diff --git a/RemoteMonitoring.sln b/RemoteMonitoring.sln index 77a0cba8..60ee7956 100644 --- a/RemoteMonitoring.sln +++ b/RemoteMonitoring.sln @@ -12,9 +12,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventProcessor.WebJob", "EventProcessor\EventProcessor.WebJob\EventProcessor.WebJob.csproj", "{588C29C8-3BF8-4CF6-89A7-33D611388E0E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simulator.WebJob", "Simulator\Simulator.WebJob\Simulator.WebJob.csproj", "{8F0FF371-2306-4210-9C22-0D0657B595DC}" - ProjectSection(ProjectDependencies) = postProject - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533} = {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533} - EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{3E3CB1FA-112D-49FB-A60A-71085BF01992}" ProjectSection(SolutionItems) = preProject @@ -36,8 +33,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution WebEssentials-Settings.json = WebEssentials-Settings.json EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iothub_client_sample_device_method", "Simulator\DMSimulator\iothub_client_sample_device_method.vcxproj", "{88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -102,14 +97,6 @@ Global {350C5961-0778-45F8-9A59-D309FCD653DD}.Release|Any CPU.Build.0 = Release|Any CPU {350C5961-0778-45F8-9A59-D309FCD653DD}.Release|x86.ActiveCfg = Release|Any CPU {350C5961-0778-45F8-9A59-D309FCD653DD}.Release|x86.Build.0 = Release|Any CPU - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Debug|Any CPU.Build.0 = Debug|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Debug|x86.ActiveCfg = Debug|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Debug|x86.Build.0 = Debug|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Release|Any CPU.ActiveCfg = Release|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Release|Any CPU.Build.0 = Release|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Release|x86.ActiveCfg = Release|Win32 - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.c b/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.c deleted file mode 100644 index 40fb84f9..00000000 --- a/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.c +++ /dev/null @@ -1,160 +0,0 @@ -#include "../SendReport.h" -#include "../Utilities.h" -#include "ConfigurationUpdate.h" - -// State switch graph: pending -> downloading -> applying -> idle -static DMTaskStep _steps[] = -{ - { CU_PENDING, 0, CU_DOWNLOADING }, - { CU_DOWNLOADING, 10, CU_APPLYING }, - { CU_APPLYING, 10, DM_IDLE }, - { DM_NULL, 0, DM_NULL } -}; - -static char* _version; -static time_t _downloadStartTime = 0; -static time_t _applyStartTime = 0; - -static BOOL OnEnterState(DMTaskState state, time_t now) -{ - BOOL succeeded = TRUE; - - unsigned char* report = NULL; - size_t size = 0; - - switch (state) - { - case CU_PENDING: - // No report for entering pending state - break; - - case CU_DOWNLOADING: - _downloadStartTime = now; - - if (strcmp(_version, "downloadFail") == 0) - { - succeeded = FALSE; - - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'download failed', 'log': 'download failed' } } }"); - } - else - { - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'downloading', 'log': 'downloading' } } }"); - } - break; - - case CU_APPLYING: - _applyStartTime = 0; - - if (strcmp(_version, "applyFail") == 0) - { - succeeded = FALSE; - - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'apply failed', 'log': 'downloaded(%I64ds) -> apply failed' } } }", - now - _downloadStartTime); - } - else - { - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'applying', 'log': 'downloaded(%I64ds) -> applying' } } }", - now - _downloadStartTime); - } - break; - - case DM_IDLE: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'updated to %s', 'log': 'downloaded(%I64ds) -> applied(%I64ds)' } }, 'ConfigurationVersion': '%s' }", - _version, - _applyStartTime - _downloadStartTime, - now - _applyStartTime, - _version); - break; - - default: - printf("Unknown ConfigurationUpdateState %d", state); - break; - } - - if (report != NULL) - { - SendReport(report, size); - } - - return succeeded; -} - -static void OnLeaveState(DMTaskState state, time_t now) -{ - unsigned char* report = NULL; - size_t size = 0; - - switch (state) - { - case DM_IDLE: - // No report for leaving idle state - break; - - case CU_PENDING: - // No report for leaving pending state - break; - - case CU_DOWNLOADING: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'download completed', 'log': 'downloaded(%I64ds)' } } }", - now - _downloadStartTime); - break; - - case CU_APPLYING: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'configurationUpdate': { 'status': 'apply completed', 'log': 'downloaded(%I64ds) -> applied(%I64ds)' } } }", - _applyStartTime - _downloadStartTime, - now - _applyStartTime); - break; - - default: - printf("Unknown ConfigurationUpdateState %d", state); - break; - } - - if (report != NULL) - { - SendReport(report, size); - } -} - -BOOL BeginConfigurationUpdate(const char* uri, DMTaskStep** steps, OnEnterStateProc* onEnterStateProc, OnLeaveStateProc* onLeaveStateProc) -{ - // [WORKAROUND] Directly pick the version from the URI - const char* prefix = "/configuration/"; - char* p = strstr(uri, prefix); - if (p == NULL) - { - return FALSE; - } - p += strlen(prefix); - - free(_version); - _version = _strdup(p); - - *steps = _steps; - *onEnterStateProc = OnEnterState; - *onLeaveStateProc = OnLeaveState; - return TRUE; -} \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.h b/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.h deleted file mode 100644 index e0ffca9f..00000000 --- a/Simulator/DMSimulator/DMTasks/ConfigurationUpdate.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include "DMTaskBase.h" - -BOOL BeginConfigurationUpdate(const char* uri, DMTaskStep** steps, OnEnterStateProc* onEnterStateProc, OnLeaveStateProc* onLeaveStateProc); \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/DMTaskBase.h b/Simulator/DMSimulator/DMTasks/DMTaskBase.h deleted file mode 100644 index a1ed7ab6..00000000 --- a/Simulator/DMSimulator/DMTasks/DMTaskBase.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include - -typedef enum _DMTaskState -{ - DM_NULL, - DM_IDLE, - - FU_PENDING, - FU_DOWNLOADING, - FU_APPLYING, - FU_REBOOTING, - - CU_PENDING, - CU_DOWNLOADING, - CU_APPLYING -} DMTaskState; - -typedef struct _DMTaskStep -{ - DMTaskState CurrentState; - time_t ExecuteTimeInSeconds; - DMTaskState NextState; -} DMTaskStep; - -typedef BOOL(*OnEnterStateProc)(DMTaskState, time_t); -typedef void(*OnLeaveStateProc)(DMTaskState, time_t); \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/DMTaskEngine.c b/Simulator/DMSimulator/DMTasks/DMTaskEngine.c deleted file mode 100644 index 848b74e0..00000000 --- a/Simulator/DMSimulator/DMTasks/DMTaskEngine.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "..\Utilities.h" -#include "FirmwareUpdate.h" -#include "ConfigurationUpdate.h" -#include "DMTaskBase.h" -#include "DMTaskEngine.h" - -static DMTaskState _currentState = DM_IDLE; -static time_t _lastStateUpdateTime = 0; -static DMTaskStep* _steps = NULL; -static OnEnterStateProc _onEnterStateProc = NULL; -static OnLeaveStateProc _onLeaveStateProc = NULL; - -// Method: firmwareUpdate(fwPackageUri) -static int OnMethodFirmwareUpdate(const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size) -{ - if (_currentState != DM_IDLE) - { - AllocAndPrintf(response, resp_size, "Device is busy", size, payload); - return 409; - } - - char* uri = GetTopLevelNodeValue((const char*)payload, size, "FwPackageUri"); - - int status; - if (uri == NULL || !BeginFirmwareUpdate(uri, &_steps, &_onEnterStateProc, &_onLeaveStateProc)) - { - _currentState = DM_IDLE; - AllocAndPrintf(response, resp_size, "Bad parameter: %.*s", size, payload); - status = 400; - } - else - { - _currentState = _steps->CurrentState; - time(&_lastStateUpdateTime); - AllocAndPrintf(response, resp_size, "Firmware updating accepted, uri = %s", uri); - status = 200; - } - - free(uri); - return status; -} - -// Method: configurationUpdate(configUri) -static int OnMethodConfigurationUpdate(const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size) -{ - if (_currentState != DM_IDLE) - { - AllocAndPrintf(response, resp_size, "Device is busy", size, payload); - return 409; - } - - char* uri = GetTopLevelNodeValue((const char*)payload, size, "ConfigUri"); - - int status; - if (uri == NULL || !BeginConfigurationUpdate(uri, &_steps, &_onEnterStateProc, &_onLeaveStateProc)) - { - _currentState = DM_IDLE; - AllocAndPrintf(response, resp_size, "Bad parameter: %.*s", size, payload); - status = 400; - } - else - { - _currentState = _steps->CurrentState; - time(&_lastStateUpdateTime); - AllocAndPrintf(response, resp_size, "Configuration updating accepted, uri = %s", uri); - status = 200; - } - - free(uri); - return status; -} - -// Method: ChangeDeviceState(...) -static int OnMethodChangeDeviceState(const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size) -{ - // Return the whole parameter as output - *resp_size = size; - *response = malloc(*resp_size); - memcpy(*response, payload, size); - - _steps = NULL; - _currentState = DM_IDLE; - return 200; -} - -int OnDeviceMethod(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size) -{ - if (strcmp(method_name, "FirmwareUpdate") == 0) - { - return OnMethodFirmwareUpdate(payload, size, response, resp_size); - } - else if (strcmp(method_name, "ConfigurationUpdate") == 0) - { - return OnMethodConfigurationUpdate(payload, size, response, resp_size); - } - else if (strcmp(method_name, "ChangeDeviceState") == 0) - { - return OnMethodChangeDeviceState(payload, size, response, resp_size); - } - else - { - return -1; - } -} - -void StepDMTask() -{ - if (_currentState == DM_IDLE) - { - return; - } - - time_t now; - time(&now); - - for (DMTaskStep* p = _steps; p->CurrentState != DM_NULL; p++) - { - if (p->CurrentState == _currentState) - { - if (now >= _lastStateUpdateTime + p->ExecuteTimeInSeconds) - { - // Switch state according to the graph - _onLeaveStateProc(_currentState, now); - - _currentState = p->NextState; - _lastStateUpdateTime = now; - - BOOL succeeded = _onEnterStateProc(_currentState, now); - if (!succeeded) - { - _currentState = DM_IDLE; - } - } - - break; - } - } -} \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/DMTaskEngine.h b/Simulator/DMSimulator/DMTasks/DMTaskEngine.h deleted file mode 100644 index d9a5a81d..00000000 --- a/Simulator/DMSimulator/DMTasks/DMTaskEngine.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include - -/* -Find matching device method, then kick-off the asynchornize task - -Parameters - method_name: device method name - payload: device method parameters in JSON - size: length of the payload - response: device method returned message - resp_size: length of the message - -Return - The status code if matching method found, otherwise -1 -*/ -int OnDeviceMethod(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size); - -/* -Run single step of the current task -*/ -void StepDMTask(); \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/FirmwareUpdate.c b/Simulator/DMSimulator/DMTasks/FirmwareUpdate.c deleted file mode 100644 index 23b76fe2..00000000 --- a/Simulator/DMSimulator/DMTasks/FirmwareUpdate.c +++ /dev/null @@ -1,198 +0,0 @@ -#include "../Utilities.h" -#include "../SendReport.h" -#include "FirmwareUpdate.h" - -// State switch graph: pending -> downloading -> applying -> rebooting -> idle -static DMTaskStep _steps[] = -{ - { FU_PENDING, 0, FU_DOWNLOADING }, - { FU_DOWNLOADING, 10, FU_APPLYING }, - { FU_APPLYING, 10, FU_REBOOTING }, - { FU_REBOOTING, 10, DM_IDLE }, - { DM_NULL, 0, DM_NULL } -}; - -static char* _version = NULL; -static time_t _downloadStartTime = 0; -static time_t _applyStartTime = 0; -static time_t _rebootStartTime = 0; - -static BOOL OnEnterState(DMTaskState state, time_t now) -{ - BOOL succeeded = TRUE; - - unsigned char* report = NULL; - size_t size = 0; - - switch (state) - { - case FU_PENDING: - // No report for entering pending state - break; - - case FU_DOWNLOADING: - _downloadStartTime = now; - - if (strcmp(_version, "downloadFail") == 0) - { - succeeded = FALSE; - - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'download failed', 'log': 'download failed' } } }"); - } - else - { - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'downloading', 'log' : 'downloading' } } }"); - } - break; - - case FU_APPLYING: - _applyStartTime = now; - - if (strcmp(_version, "applyFail") == 0) - { - succeeded = FALSE; - - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'apply failed', 'log': 'downloaded(%I64ds) -> apply failed' } } }", - now - _downloadStartTime); - } - else - { - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'applying', 'log': 'downloaded(%I64ds) -> applying' } } }", - now - _downloadStartTime); - } - break; - - case FU_REBOOTING: - _rebootStartTime = now; - - if (strcmp(_version, "rebootFail") == 0) - { - succeeded = FALSE; - - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'reboot failed', 'log': 'downloaded(%I64ds) -> applied(%I64ds) -> reboot failed' } } }", - _applyStartTime - _downloadStartTime, - now - _applyStartTime); - } - else - { - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'rebooting', 'log': 'downloaded(%I64ds) -> applied(%I64ds) -> rebooting' } } }", - _applyStartTime - _downloadStartTime, - now - _applyStartTime); - } - break; - - case DM_IDLE: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'updated to %s', 'log' : 'downloaded(%I64ds) -> applied(%I64ds) -> rebooted(%I64ds)' } }, 'FirmwareVersion' : '%s' }", - _version, - _applyStartTime - _downloadStartTime, - _rebootStartTime - _applyStartTime, - now - _rebootStartTime, - _version); - break; - - default: - printf("Unknown FirmwareUpdateState %d", state); - break; - } - - if (report != NULL) - { - SendReport(report, size); - } - - return succeeded; -} - -static void OnLeaveState(DMTaskState state, time_t now) -{ - unsigned char* report = NULL; - size_t size = 0; - - switch (state) - { - case DM_IDLE: - // No report for leaving idle state - break; - - case FU_PENDING: - // No report for leaving pending state - break; - - case FU_DOWNLOADING: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'download completed', 'log': 'downloaded(%I64ds)' } } }", - now - _downloadStartTime); - break; - - case FU_APPLYING: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'apply completed', 'log': 'downloaded(%I64ds) -> applied(%I64ds)' } } }", - _applyStartTime - _downloadStartTime, - now - _applyStartTime); - break; - - case FU_REBOOTING: - AllocAndPrintf( - &report, - &size, - "{ 'iothubDM': { 'firmwareUpdate': { 'status': 'reboot completed', 'log': 'downloaded(%I64ds) -> applied(%I64ds) -> rebooted(%I64ds)' } } }", - _applyStartTime - _downloadStartTime, - _rebootStartTime - _applyStartTime, - now - _rebootStartTime); - break; - - default: - printf("Unknown FirmwareUpdateState %d", state); - break; - } - - if (report != NULL) - { - SendReport(report, size); - } -} - -BOOL BeginFirmwareUpdate(const char* uri, DMTaskStep** steps, OnEnterStateProc* onEnterStateProc, OnLeaveStateProc* onLeaveStateProc) -{ - // [WORKAROUND] Directly pick the version from the URI - const char* prefix = "/firmware/"; - char* p = strstr(uri, prefix); - if (p == NULL) - { - return FALSE; - } - p += strlen(prefix); - - free(_version); - _version = _strdup(p); - - *steps = _steps; - *onEnterStateProc = OnEnterState; - *onLeaveStateProc = OnLeaveState; - return TRUE; -} \ No newline at end of file diff --git a/Simulator/DMSimulator/DMTasks/FirmwareUpdate.h b/Simulator/DMSimulator/DMTasks/FirmwareUpdate.h deleted file mode 100644 index 5af7fd9e..00000000 --- a/Simulator/DMSimulator/DMTasks/FirmwareUpdate.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include "DMTaskBase.h" - -BOOL BeginFirmwareUpdate(const char* uri, DMTaskStep** steps, OnEnterStateProc* onEnterStateProc, OnLeaveStateProc* onLeaveStateProc); \ No newline at end of file diff --git a/Simulator/DMSimulator/SendReport.c b/Simulator/DMSimulator/SendReport.c deleted file mode 100644 index 247f16ac..00000000 --- a/Simulator/DMSimulator/SendReport.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "SendReport.h" - -static IOTHUB_CLIENT_LL_HANDLE _iotHubClientHandle = NULL; - -static void ReportedStateCallback(int status_code, void* userContextCallback) -{ - (void)userContextCallback; - - printf("\r\nReported state changed\r\n"); - printf("Status code: %d\r\n", status_code); -} - -void SetupSendReport(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle) -{ - _iotHubClientHandle = iotHubClientHandle; -} - -void SendReport(unsigned char* report, size_t size) -{ - if (_iotHubClientHandle == NULL) - { - printf("Failed to send report. IotHubClientHandle has not been set"); - return; - } - - IoTHubClient_LL_SendReportedState(_iotHubClientHandle, report, size, ReportedStateCallback, NULL); - printf("Sent report: %.*s\r\n", size, report); -} \ No newline at end of file diff --git a/Simulator/DMSimulator/SendReport.h b/Simulator/DMSimulator/SendReport.h deleted file mode 100644 index 4a169d3f..00000000 --- a/Simulator/DMSimulator/SendReport.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include "iothub_client.h" - -void SetupSendReport(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle); -void SendReport(unsigned char* report, size_t size); \ No newline at end of file diff --git a/Simulator/DMSimulator/Utilities.c b/Simulator/DMSimulator/Utilities.c deleted file mode 100644 index 687c4351..00000000 --- a/Simulator/DMSimulator/Utilities.c +++ /dev/null @@ -1,79 +0,0 @@ -#include -#include -#include -#include "jsmn/jsmn.h" -#include "Utilities.h" - -#define MAX_TOKENS 32 - -char* GetTopLevelNodeValue(const char* json, size_t jsonLen, const char* name) -{ - jsmn_parser parser; - jsmntok_t tokens[MAX_TOKENS]; - - jsmn_init(&parser); - int rst = jsmn_parse(&parser, (char*)json, jsonLen, tokens, MAX_TOKENS); - - int startMin = 0; - for (jsmntok_t* t = tokens + 1; t < tokens + rst; t++) - { - if (t->start <= startMin) - { - continue; - } - - if (t->type != JSMN_STRING) - { - return NULL; - } - - t++; - if (t >= tokens + rst) - { - return NULL; - } - - if (t->type == JSMN_STRING && strncmp(json + t->start, name, t->size) == 0) - { - int tokenLen = t->end - t->start; - char* buffer = malloc(tokenLen + 1); - memcpy(buffer, json + t->start, tokenLen); - buffer[tokenLen] = 0; - return buffer; - } - - startMin = t->end; - } - - return NULL; -} - -void AllocAndPrintf(unsigned char** buffer, size_t* size, const char* format, ...) -{ - va_list args; - va_start(args, format); - *size = vsnprintf(NULL, 0, format, args); - va_end(args); - - *buffer = malloc(*size + 1); - va_start(args, format); - vsprintf((char*)*buffer, format, args); - va_end(args); -} - -char* FormatTime(time_t* time) -{ - static char buffer[128]; - - struct tm* p = gmtime(time); - - sprintf(buffer, "%04d-%02d-%02dT%02d:%02d:%02dZ", - p->tm_year + 1900, - p->tm_mon + 1, - p->tm_mday, - p->tm_hour, - p->tm_min, - p->tm_sec); - - return buffer; -} \ No newline at end of file diff --git a/Simulator/DMSimulator/Utilities.h b/Simulator/DMSimulator/Utilities.h deleted file mode 100644 index 907ee302..00000000 --- a/Simulator/DMSimulator/Utilities.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include -#include - -char* GetTopLevelNodeValue(const char* json, size_t jsonLen, const char* name); - -void AllocAndPrintf(unsigned char** buffer, size_t* size, const char* format, ...); - -char* FormatTime(time_t* time); \ No newline at end of file diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/agenttime.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/agenttime.h deleted file mode 100644 index 2b02d73f..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/agenttime.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file agenttime.h -* @brief Function prototypes for time related functions. -* -* @details These functions are implemented with C standard functions, -* and therefore they are platform independent. But then a platform -* can replace these functions with its own implementation as necessary. -*/ - -#ifndef AGENTTIME_H -#define AGENTTIME_H - -#include -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** @brief Get current calendar time. -* -* @details This function provides the same functionality as the -* standard C @c time() function. -*/ -MOCKABLE_FUNCTION(, time_t, get_time, time_t*, currentTime); - -/** @brief Get UTC in @c tm struct. -* -* @details This function provides the same functionality as the -* standard C @c gmtime() function. -*/ -MOCKABLE_FUNCTION(, struct tm*, get_gmtime, time_t*, currentTime); - -/** @brief Get current time representation of the given calendar time. -* -* @details This function provides the same functionality as the -* standard C @c mktime() function. -*/ -MOCKABLE_FUNCTION(, time_t, get_mktime, struct tm*, cal_time); - -/** @brief Gets a C-string representation of the given time. -* -* @details This function provides the same functionality as the -* standard C @c ctime() function. -*/ -MOCKABLE_FUNCTION(, char*, get_ctime, time_t*, timeToGet); - -/** @brief Gets the difference in seconds between @c stopTime and -* @c startTime. -* -* @details This function provides the same functionality as the -* standard C @c difftime() function. -*/ -MOCKABLE_FUNCTION(, double, get_difftime, time_t, stopTime, time_t, startTime); - -#ifdef __cplusplus -} -#endif - -#endif // AGENTTIME_H diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/base64.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/base64.h deleted file mode 100644 index 01595da4..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/base64.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file base64.h -* @brief Prototypes for functions related to encoding/decoding -* a @c buffer using standard base64 encoding. -*/ - -#ifndef BASE64_H -#define BASE64_H - -#include "azure_c_shared_utility/strings.h" -#include "azure_c_shared_utility/buffer_.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -extern const char base64char[64]; -extern const char base64b16[16]; -extern const char base64b8[4]; - -/** - * @brief Base64 encodes a buffer and returns the resulting string. - * - * @param input The buffer that needs to be base64 encoded. - * - * Base64_Encode takes as a parameter a pointer to a BUFFER. If @p input is @c NULL then - * @c Base64_Encode returns @c NULL. The size of the BUFFER pointed to by @p input may - * be zero. If when allocating memory to produce the encoding a failure occurs, then @c - * Base64_Encode returns @c NULL. Otherwise - * @c Base64_Encode returns a pointer to a STRING. That string contains the - * base 64 encoding of the @p input. This encoding of @p input will not contain embedded - * line feeds. - * - * @return A @c STRING_HANDLE containing the base64 encoding of @p input. - */ -MOCKABLE_FUNCTION(, STRING_HANDLE, Base64_Encode, BUFFER_HANDLE, input); - -/** - * @brief Base64 encodes the buffer pointed to by @p source and returns the resulting string. - * - * @param source The buffer that needs to be base64 encoded. - * @param size The size. - * - * This function produces a @c STRING_HANDLE containing the base64 encoding of the - * buffer pointed to by @p source, having the size as given by - * @p size. If @p source is @c NULL then @c Base64_Encode_Bytes returns @c NULL - * If @p source is not @c NULL and @p size is zero, then @c Base64_Encode_Bytes produces - * an empty @c STRING_HANDLE. Otherwise, @c Base64_Encode_Bytes produces a - * @c STRING_HANDLE containing the Base64 representation of the buffer. In case of - * any errors, @c Base64_Encode_Bytes returns @c NULL.]. - * - * @return @c NULL in case an error occurs or a @c STRING_HANDLE containing the base64 encoding - * of @p input. - * - */ -MOCKABLE_FUNCTION(, STRING_HANDLE, Base64_Encode_Bytes, const unsigned char*, source, size_t, size); - -/** - * @brief Base64 decodes the buffer pointed to by @p source and returns the resulting buffer. - * - * @param source A base64 encoded string buffer. - * - * This function decodes the string pointed at by @p source using base64 decoding and - * returns the resulting buffer. If @p source is @c NULL then - * @c Base64_Decoder returns NULL. If the string pointed to by @p source is zero - * length then the handle returned refers to a zero length buffer. If there is any - * memory allocation failure during the decode or if the source string has an invalid - * length for a base 64 encoded string then @c Base64_Decoder returns @c NULL. - * - * @return A @c BUFFER_HANDLE pointing to a buffer containing the result of base64 decoding @p - * source. - */ -MOCKABLE_FUNCTION(, BUFFER_HANDLE, Base64_Decoder, const char*, source); - -#ifdef __cplusplus -} -#endif - -#endif /* BASE64_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/buffer_.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/buffer_.h deleted file mode 100644 index 2a21d16e..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/buffer_.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef BUFFER_H -#define BUFFER_H - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct BUFFER_TAG* BUFFER_HANDLE; - -MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_new); -MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_create, const unsigned char*, source, size_t, size); -MOCKABLE_FUNCTION(, void, BUFFER_delete, BUFFER_HANDLE, handle); -MOCKABLE_FUNCTION(, int, BUFFER_pre_build, BUFFER_HANDLE, handle, size_t, size); -MOCKABLE_FUNCTION(, int, BUFFER_build, BUFFER_HANDLE, handle, const unsigned char*, source, size_t, size); -MOCKABLE_FUNCTION(, int, BUFFER_unbuild, BUFFER_HANDLE, handle); -MOCKABLE_FUNCTION(, int, BUFFER_enlarge, BUFFER_HANDLE, handle, size_t, enlargeSize); -MOCKABLE_FUNCTION(, int, BUFFER_content, BUFFER_HANDLE, handle, const unsigned char**, content); -MOCKABLE_FUNCTION(, int, BUFFER_size, BUFFER_HANDLE, handle, size_t*, size); -MOCKABLE_FUNCTION(, int, BUFFER_append, BUFFER_HANDLE, handle1, BUFFER_HANDLE, handle2); -MOCKABLE_FUNCTION(, int, BUFFER_prepend, BUFFER_HANDLE, handle1, BUFFER_HANDLE, handle2); -MOCKABLE_FUNCTION(, unsigned char*, BUFFER_u_char, BUFFER_HANDLE, handle); -MOCKABLE_FUNCTION(, size_t, BUFFER_length, BUFFER_HANDLE, handle); -MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_clone, BUFFER_HANDLE, handle); - -#ifdef __cplusplus -} -#endif - - -#endif /* BUFFER_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/condition.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/condition.h deleted file mode 100644 index 009f545f..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/condition.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef CONDITION_H -#define CONDITION_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/lock.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* COND_HANDLE; - -#define COND_RESULT_VALUES \ - COND_OK, \ - COND_INVALID_ARG, \ - COND_ERROR, \ - COND_TIMEOUT \ - -/** -* @brief Enumeration specifying the lock status. -*/ -DEFINE_ENUM(COND_RESULT, COND_RESULT_VALUES); - -/** -* @brief This API creates and returns a valid condition handle. -* -* @return A valid @c COND_HANDLE when successful or @c NULL otherwise. -*/ -MOCKABLE_FUNCTION(, COND_HANDLE, Condition_Init); - -/** -* @brief unblock all currently working condition. -* -* @param handle A valid handle to the lock. -* -* @return Returns @c COND_OK when the condition object has been -* destroyed and @c COND_ERROR when an error occurs -* and @c COND_TIMEOUT when the handle times out. -*/ -MOCKABLE_FUNCTION(, COND_RESULT, Condition_Post, COND_HANDLE, handle); - -/** -* @brief block on the condition handle unti the thread is signalled -* or until the timeout_milliseconds is reached. -* -* @param handle A valid handle to the lock. -* -* @return Returns @c COND_OK when the condition object has been -* destroyed and @c COND_ERROR when an error occurs -* and @c COND_TIMEOUT when the handle times out. -*/ -MOCKABLE_FUNCTION(, COND_RESULT, Condition_Wait, COND_HANDLE, handle, LOCK_HANDLE, lock, int, timeout_milliseconds); - -/** -* @brief The condition instance is deinitialized. -* -* @param handle A valid handle to the condition. -* -* @return Returns @c COND_OK when the condition object has been -* destroyed and @c COND_ERROR when an error occurs. -*/ -MOCKABLE_FUNCTION(, void, Condition_Deinit, COND_HANDLE, handle); - -#ifdef __cplusplus -} -#endif - -#endif /* CONDITION_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/consolelogger.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/consolelogger.h deleted file mode 100644 index 783b07b6..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/consolelogger.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef CONSOLELOGGER_H -#define CONSOLELOGGER_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xlogging.h" - - extern void consolelogger_log(LOG_CATEGORY log_category, const char* file, const char* func, const int line, unsigned int options, const char* format, ...); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CONSOLELOGGER_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/constbuffer.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/constbuffer.h deleted file mode 100644 index 157b82d8..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/constbuffer.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef CONSTBUFFER_H -#define CONSTBUFFER_H - -#include "azure_c_shared_utility/buffer_.h" - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -/*this is the handle*/ -typedef struct CONSTBUFFER_HANDLE_DATA_TAG* CONSTBUFFER_HANDLE; - -/*this is what is returned when the content of the buffer needs access*/ -typedef struct CONSTBUFFER_TAG -{ - const unsigned char* buffer; - size_t size; -} CONSTBUFFER; - -/*this creates a new constbuffer from a memory area*/ -MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_Create, const unsigned char*, source, size_t, size); - -/*this creates a new constbuffer from an existing BUFFER_HANDLE*/ -MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_CreateFromBuffer, BUFFER_HANDLE, buffer); - -MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_Clone, CONSTBUFFER_HANDLE, constbufferHandle); - -MOCKABLE_FUNCTION(, const CONSTBUFFER*, CONSTBUFFER_GetContent, CONSTBUFFER_HANDLE, constbufferHandle); - -MOCKABLE_FUNCTION(, void, CONSTBUFFER_Destroy, CONSTBUFFER_HANDLE, constbufferHandle); - -#ifdef __cplusplus -} -#endif - -#endif /* CONSTBUFFER_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/constmap.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/constmap.h deleted file mode 100644 index d434886a..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/constmap.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file constmap.h -* @brief ConstMap is a module that implements a read-only dictionary -* of @c const char* keys to @c const char* values. -*/ - -#ifndef CONSTMAP_H -#define CONSTMAP_H - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/crt_abstractions.h" -#include "azure_c_shared_utility/map.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#define CONSTMAP_RESULT_VALUES \ - CONSTMAP_OK, \ - CONSTMAP_ERROR, \ - CONSTMAP_INVALIDARG, \ - CONSTMAP_KEYNOTFOUND - -/** @brief Enumeration specifying the status of calls to various APIs in this - * module. - */ -DEFINE_ENUM(CONSTMAP_RESULT, CONSTMAP_RESULT_VALUES); - -typedef struct CONSTMAP_HANDLE_DATA_TAG* CONSTMAP_HANDLE; - - -/** - * @brief Creates a new read-only map from a map handle. - * - * @param sourceMap The map from which we will populate key,value - * into the read-only map. - * - * @return A valid @c CONSTMAP_HANDLE or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, CONSTMAP_HANDLE, ConstMap_Create, MAP_HANDLE, sourceMap); - - /** - * @brief Destroy a read-only map. Deallocate memory associated with handle. - * @param handle Handle to a read-only map. - */ -MOCKABLE_FUNCTION(, void, ConstMap_Destroy, CONSTMAP_HANDLE, handle); - - /** - * @brief Clone a read-only map from another read-only map. - * @param handle Handle to a read-only map. - * @return A valid @c CONSTMAP_HANDLE or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, CONSTMAP_HANDLE, ConstMap_Clone, CONSTMAP_HANDLE, handle); - - /** - * @brief Create a map handle populated from the read-only map. - * @param handle Handle to a read-only map. - * @return A valid @c MAP_HANDLE or @c NULL in case an error occurs. - * - * The new MAP_HANDLE needs to be destroyed when it is no longer needed. - */ -MOCKABLE_FUNCTION(, MAP_HANDLE, ConstMap_CloneWriteable, CONSTMAP_HANDLE, handle); - -/** - * @brief This function returns a true if the map contains a key - * with the same value the parameter @p key. - * - * @param handle The handle to an existing map. - * @param key The key that the caller wants checked. - * - * @return The function returns @c true if the key exists - * in the map and @c false if key is not found or - * parameters are invalid. - */ -MOCKABLE_FUNCTION(, bool, ConstMap_ContainsKey, CONSTMAP_HANDLE, handle, const char*, key); - -/** - * @brief This function returns @c true if at least one pair - * exists in the map where the entry's value is equal to the - * parameter @c value. - * - * @param handle The handle to an existing map. - * @param value The value that the caller wants checked. - * - * @return The function returns @c true if the value exists - * in the map and @c false if value is not found or - * parameters are invalid. - */ -MOCKABLE_FUNCTION(, bool, ConstMap_ContainsValue, CONSTMAP_HANDLE, handle, const char*, value); - -/** - * @brief Retrieves the value of a stored key. - * - * @param handle The handle to an existing map. - * @param key The key to be looked up in the map. - * - * @return Returns @c NULL in case the input arguments are @c NULL or if the - * requested key is not found in the map. Returns a pointer to the - * key's value otherwise. - */ -MOCKABLE_FUNCTION(, const char*, ConstMap_GetValue, CONSTMAP_HANDLE, handle, const char*, key); - - /** - * @brief Retrieves the complete list of keys and values from the map - * in @p values and @p keys. Also writes the size of the list - * in @p count. - * - * @param handle The handle to an existing map. - * @param keys The location where the list of keys is to be written. - * @param values The location where the list of values is to be written. - * @param count The number of stored keys and values is written at the - * location indicated by this pointer. - * - * @return Returns @c CONSTMAP_OK if the keys and values are retrieved - * and written successfully or an error code otherwise. - */ -MOCKABLE_FUNCTION(, CONSTMAP_RESULT, ConstMap_GetInternals, CONSTMAP_HANDLE, handle, const char*const**, keys, const char*const**, values, size_t*, count); - - -#ifdef __cplusplus -} -#endif - -#endif /* CONSTMAP_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/crt_abstractions.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/crt_abstractions.h deleted file mode 100644 index ccb932d5..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/crt_abstractions.h +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef CRT_ABSTRACTIONS_H -#define CRT_ABSTRACTIONS_H - -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -#include -#include -#include -extern "C" { -#else -#include -#include -#include -#endif - -#ifdef _MSC_VER - -#ifdef QUARKGALILEO -#define HAS_STDBOOL -#ifdef __cplusplus -typedef bool _Bool; -#else -/*galileo apparently has _Bool and bool as built in types*/ -#endif -#endif - -#ifndef _WIN32_WCE -#define HAS_STDBOOL -#ifdef __cplusplus -#include -/*because C++ doesn't do anything about _Bool... */ -#define _Bool bool -#else -#include -#endif -#else -/* WINCE does not support bool as C datatype */ -#define __bool_true_false_are_defined 1 - -#define HAS_STDBOOL - -#define _Bool bool - -#ifdef __cplusplus -#define _CSTDBOOL_ -#else -typedef unsigned char bool; - -#define false 0 -#define true 1 -#endif -#endif -#else -#if defined __STDC_VERSION__ -#if ((__STDC_VERSION__ == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L)) -/*C99 compiler or C11*/ -#define HAS_STDBOOL -#include -#endif -#endif -#endif - -#ifndef HAS_STDBOOL -#ifdef __cplusplus -#define _Bool bool -#else -typedef unsigned char _Bool; -typedef unsigned char bool; -#define false 0 -#define true 1 -#endif -#endif - - -/* Codes_SRS_CRT_ABSTRACTIONS_99_001:[The module shall not redefine the secure functions implemented by Microsoft CRT.] */ -/* Codes_SRS_CRT_ABSTRACTIONS_99_040 : [The module shall still compile when building on a Microsoft platform.] */ -/* Codes_SRS_CRT_ABSTRACTIONS_99_002: [CRTAbstractions module shall expose the following API]*/ -#ifdef _MSC_VER -#else -#include "inttypes.h" - -/* Adding definitions from errno.h & crtdefs.h */ -#if !defined (_TRUNCATE) -#define _TRUNCATE ((size_t)-1) -#endif /* !defined (_TRUNCATE) */ - -#if !defined STRUNCATE -#define STRUNCATE 80 -#endif /* !defined (STRUNCATE) */ - -typedef int errno_t; - -extern int strcpy_s(char* dst, size_t dstSizeInBytes, const char* src); -extern int strcat_s(char* dst, size_t dstSizeInBytes, const char* src); -extern int strncpy_s(char* dst, size_t dstSizeInBytes, const char* src, size_t maxCount); -extern int sprintf_s(char* dst, size_t dstSizeInBytes, const char* format, ...); -#endif -extern unsigned long long strtoull_s(const char* nptr, char** endPtr, int base); -extern float strtof_s(const char* nptr, char** endPtr); -extern long double strtold_s(const char* nptr, char** endPtr); - -MOCKABLE_FUNCTION(, int, mallocAndStrcpy_s, char**, destination, const char*, source); -MOCKABLE_FUNCTION(, int, unsignedIntToString, char*, destination, size_t, destinationSize, unsigned int, value); -MOCKABLE_FUNCTION(, int, size_tToString, char*, destination, size_t, destinationSize, size_t, value); -/*following logic shall define the ISNAN macro*/ -/*if runing on Microsoft Visual C compiler, than ISNAN shall be _isnan*/ -/*else if running on C99 or C11, ISNAN shall be isnan*/ -/*else if running on C89 ... #error and inform user*/ - -#ifdef _MSC_VER -#define ISNAN _isnan -#else -#if defined __STDC_VERSION__ -#if ((__STDC_VERSION__ == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L)) -/*C99 compiler or C11*/ -#define ISNAN isnan -#else -#error update this file to contain the latest C standard. -#endif -#else -#ifdef __cplusplus -/*C++ defines isnan... in C11*/ -extern "C++" { -#define ISNAN std::isnan -} -#else -#error unknown (or C89) compiler, provide ISNAN with the same meaning as isnan in C99 standard -#endif - -#endif -#endif - -#ifdef _MSC_VER -#define INT64_PRINTF "%I64d" -#else -#if defined __STDC_VERSION__ -#if ((__STDC_VERSION__ == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L)) -/*C99 compiler or C11*/ -#define INT64_PRINTF "%" PRId64 "" -#else -#error update this file to contain the latest C standard. -#endif -#else -#ifdef __cplusplus -#define INT64_PRINTF "%" PRId64 "" -#else -#error unknown (or C89) compiler, provide INT64_PRINTF with the same meaning as PRIdN in C99 standard -#endif -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* CRT_ABSTRACTIONS_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/doublylinkedlist.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/doublylinkedlist.h deleted file mode 100644 index 805dd695..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/doublylinkedlist.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef DOUBLYLINKEDLIST_H -#define DOUBLYLINKEDLIST_H - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct DLIST_ENTRY_TAG -{ - struct DLIST_ENTRY_TAG *Flink; - struct DLIST_ENTRY_TAG *Blink; -} DLIST_ENTRY, *PDLIST_ENTRY; - -MOCKABLE_FUNCTION(, void, DList_InitializeListHead, PDLIST_ENTRY, listHead); -MOCKABLE_FUNCTION(, int, DList_IsListEmpty, const PDLIST_ENTRY, listHead); -MOCKABLE_FUNCTION(, void, DList_InsertTailList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, listEntry); -MOCKABLE_FUNCTION(, void, DList_InsertHeadList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, listEntry); -MOCKABLE_FUNCTION(, void, DList_AppendTailList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, ListToAppend); -MOCKABLE_FUNCTION(, int, DList_RemoveEntryList, PDLIST_ENTRY, listEntry); -MOCKABLE_FUNCTION(, PDLIST_ENTRY, DList_RemoveHeadList, PDLIST_ENTRY, listHead); - -// -// Calculate the address of the base of the structure given its type, and an -// address of a field within the structure. -// -#define containingRecord(address, type, field) ((type *)((uintptr_t)(address) - offsetof(type,field))) - -#ifdef __cplusplus -} -#else -#endif - -#endif /* DOUBLYLINKEDLIST_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_stdio.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_stdio.h deleted file mode 100644 index 6d4f8574..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_stdio.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef GB_STDIO_H -#define GB_STDIO_H - -/*this file, if included instead of has the following functionality: -1) if GB_STDIO_INTERCEPT is defined then - a) some of the stdio.h symbols shall be redefined, for example: fopen => gb_fopen - b) all "code" using the fopen will actually (because of the preprocessor) call to gb_fopen - c) gb_fopen shall blindly call into fopen, thus realizing a passthrough - - reason is: unittesting. fopen is comes with the C Run Time and cannot be mocked (that is, in the global namespace cannot exist a function called fopen - -2) if GB_STDIO_INTERCEPT is not defined then - a) it shall include => no passthrough, just direct linking. -*/ - -#ifndef GB_STDIO_INTERCEPT -#include -#else - -/*source level intercepting of function calls*/ -#define fopen fopen_never_called_never_implemented_always_forgotten -#define fclose fclose_never_called_never_implemented_always_forgotten -#define fseek fseek_never_called_never_implemented_always_forgotten -#define ftell ftell_never_called_never_implemented_always_forgotten -#define fprintf fprintf_never_called_never_implemented_always_forgotten - -#include "azure_c_shared_utility/umock_c_prod.h" - - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#undef fopen -#define fopen gb_fopen -MOCKABLE_FUNCTION(, FILE*, gb_fopen, const char*, filename, const char*, mode); - - -#undef fclose -#define fclose gb_fclose -MOCKABLE_FUNCTION(, int, fclose, FILE *, stream); - -#undef fseek -#define fseek gb_fseek -MOCKABLE_FUNCTION(, int, fseek, FILE *,stream, long int, offset, int, whence); - -#undef ftell -#define ftell gb_ftell -MOCKABLE_FUNCTION(, long int, ftell, FILE *, stream); - -#undef fprintf -#define fprintf gb_fprintf -extern int fprintf(FILE * stream, const char * format, ...); - - -#ifdef __cplusplus -} -#endif - -#endif /*GB_STDIO_INTERCEPT*/ - -#endif /* GB_STDIO_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_time.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_time.h deleted file mode 100644 index 0f0228ae..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/gb_time.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef GB_TIME_H -#define GB_TIME_H - -/*this file, if included instead of has the following functionality: -1) if GB_TIME_INTERCEPT is defined then - a) some of the time.h symbols shall be redefined, for example: time => gb_time - b) all "code" using the time will actually (because of the preprocessor) call to gb_time - c) gb_time shall blindly call into time, thus realizing a passthrough - - reason is: unittesting. time comes with the C Run Time and cannot be mocked (that is, in the global namespace cannot exist a function called time - -2) if GB_TIME_INTERCEPT is not defined then - a) it shall include => no passthrough, just direct linking. -*/ - -#ifndef GB_TIME_INTERCEPT -#include -#else - -/*source level intercepting of function calls*/ -#define time time_never_called_never_implemented_always_forgotten -#define localtime localtime_never_called_never_implemented_always_forgotten -#define strftime strftime_never_called_never_implemented_always_forgotten - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -#undef time -#define time gb_time -MOCKABLE_FUNCTION(, time_t, time, time_t *, timer); - -#undef localtime -#define localtime gb_localtime -MOCKABLE_FUNCTION(, struct tm *, localtime, const time_t *, timer); - -#undef strftime -#define strftime gb_strftime -MOCKABLE_FUNCTION(, size_t, strftime, char *, s, size_t, maxsize, const char *, format, const struct tm *, timeptr); - - -#ifdef __cplusplus -} -#endif - -#endif /*GB_TIME_INTERCEPT*/ - -#endif /* GB_TIME_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/gballoc.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/gballoc.h deleted file mode 100644 index a2e8f902..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/gballoc.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef GBALLOC_H -#define GBALLOC_H - - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif -#ifdef _CRTDBG_MAP_ALLOC -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -/* all translation units that need memory measurement need to have GB_MEASURE_MEMORY_FOR_THIS defined */ -/* GB_DEBUG_ALLOC is the switch that turns the measurement on/off, so that it is not on always */ -#if defined(GB_DEBUG_ALLOC) - -MOCKABLE_FUNCTION(, int, gballoc_init); -MOCKABLE_FUNCTION(, void, gballoc_deinit); -MOCKABLE_FUNCTION(, void*, gballoc_malloc, size_t, size); -MOCKABLE_FUNCTION(, void*, gballoc_calloc, size_t, nmemb, size_t, size); -MOCKABLE_FUNCTION(, void*, gballoc_realloc, void*, ptr, size_t, size); -MOCKABLE_FUNCTION(, void, gballoc_free, void*, ptr); - -MOCKABLE_FUNCTION(, size_t, gballoc_getMaximumMemoryUsed); -MOCKABLE_FUNCTION(, size_t, gballoc_getCurrentMemoryUsed); - -/* if GB_MEASURE_MEMORY_FOR_THIS is defined then we want to redirect memory allocation functions to gballoc_xxx functions */ -#ifdef GB_MEASURE_MEMORY_FOR_THIS -#if defined(_CRTDBG_MAP_ALLOC) && defined(_DEBUG) -#undef _malloc_dbg -#undef _calloc_dbg -#undef _realloc_dbg -#undef _free_dbg -#define _malloc_dbg(size, ...) gballoc_malloc(size) -#define _calloc_dbg(nmemb, size, ...) gballoc_calloc(nmemb, size) -#define _realloc_dbg(ptr, size, ...) gballoc_realloc(ptr, size) -#define _free_dbg(ptr, ...) gballoc_free(ptr) -#else -#define malloc gballoc_malloc -#define calloc gballoc_calloc -#define realloc gballoc_realloc -#define free gballoc_free -#endif -#endif - -#else /* GB_DEBUG_ALLOC */ - -#define gballoc_init() 0 -#define gballoc_deinit() ((void)0) - -#define gballoc_getMaximumMemoryUsed() SIZE_MAX -#define gballoc_getCurrentMemoryUsed() SIZE_MAX - -#endif /* GB_DEBUG_ALLOC */ - -#ifdef __cplusplus -} -#endif - -#endif /* GBALLOC_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/hmac.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/hmac.h deleted file mode 100644 index 6dacfab0..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/hmac.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef HMAC_H -#define HMAC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "azure_c_shared_utility/sha.h" -#include "azure_c_shared_utility/umock_c_prod.h" - - MOCKABLE_FUNCTION(, int, hmac, SHAversion, whichSha, const unsigned char *, text, int, text_len, - const unsigned char *, key, int, key_len, - uint8_t, digest[USHAMaxHashSize]); - -#ifdef __cplusplus -} -#endif - -#endif /* HMAC_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/hmacsha256.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/hmacsha256.h deleted file mode 100644 index daf211b7..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/hmacsha256.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef HMACSHA256_H -#define HMACSHA256_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/buffer_.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define HMACSHA256_RESULT_VALUES \ - HMACSHA256_OK, \ - HMACSHA256_INVALID_ARG, \ - HMACSHA256_ERROR - -DEFINE_ENUM(HMACSHA256_RESULT, HMACSHA256_RESULT_VALUES) - -MOCKABLE_FUNCTION(, HMACSHA256_RESULT, HMACSHA256_ComputeHash, const unsigned char*, key, size_t, keyLen, const unsigned char*, payload, size_t, payloadLen, BUFFER_HANDLE, hash); - -#ifdef __cplusplus -} -#endif - -#endif /* HMACSHA256_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapi.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapi.h deleted file mode 100644 index ce358d5a..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapi.h +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file httpapi.h - * @brief This module implements the standard HTTP API used by the C IoT client - * library. - * - * @details For example, on the Windows platform the HTTP API code uses - * WinHTTP and for Linux it uses curl and so forth. HTTPAPI must support - * HTTPs (HTTP+SSL). - */ - -#ifndef HTTPAPI_H -#define HTTPAPI_H - -#include "azure_c_shared_utility/httpheaders.h" -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/buffer_.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif - -typedef struct HTTP_HANDLE_DATA_TAG* HTTP_HANDLE; - -#define AMBIGUOUS_STATUS_CODE (300) - -#define HTTPAPI_RESULT_VALUES \ -HTTPAPI_OK, \ -HTTPAPI_INVALID_ARG, \ -HTTPAPI_ERROR, \ -HTTPAPI_OPEN_REQUEST_FAILED, \ -HTTPAPI_SET_OPTION_FAILED, \ -HTTPAPI_SEND_REQUEST_FAILED, \ -HTTPAPI_RECEIVE_RESPONSE_FAILED, \ -HTTPAPI_QUERY_HEADERS_FAILED, \ -HTTPAPI_QUERY_DATA_AVAILABLE_FAILED, \ -HTTPAPI_READ_DATA_FAILED, \ -HTTPAPI_ALREADY_INIT, \ -HTTPAPI_NOT_INIT, \ -HTTPAPI_HTTP_HEADERS_FAILED, \ -HTTPAPI_STRING_PROCESSING_ERROR, \ -HTTPAPI_ALLOC_FAILED, \ -HTTPAPI_INIT_FAILED, \ -HTTPAPI_INSUFFICIENT_RESPONSE_BUFFER, \ -HTTPAPI_SET_X509_FAILURE, \ -HTTPAPI_SET_TIMEOUTS_FAILED \ - -/** @brief Enumeration specifying the possible return values for the APIs in - * this module. - */ -DEFINE_ENUM(HTTPAPI_RESULT, HTTPAPI_RESULT_VALUES); - -#define HTTPAPI_REQUEST_TYPE_VALUES\ - HTTPAPI_REQUEST_GET, \ - HTTPAPI_REQUEST_POST, \ - HTTPAPI_REQUEST_PUT, \ - HTTPAPI_REQUEST_DELETE, \ - HTTPAPI_REQUEST_PATCH \ - -/** @brief Enumeration specifying the HTTP request verbs accepted by - * the HTTPAPI module. - */ -DEFINE_ENUM(HTTPAPI_REQUEST_TYPE, HTTPAPI_REQUEST_TYPE_VALUES); - -#define MAX_HOSTNAME_LEN 65 - -/** - * @brief Global initialization for the HTTP API component. - * - * Platform specific implementations are expected to initialize - * the underlying HTTP API stacks. - * - * @return @c HTTPAPI_OK if initialization is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_Init); - -/** @brief Free resources allocated in ::HTTPAPI_Init. */ -MOCKABLE_FUNCTION(, void, HTTPAPI_Deinit); - -/** - * @brief Creates an HTTPS connection to the host specified by the @p - * hostName parameter. - * - * @param hostName Name of the host. - * - * This function returns a handle to the newly created connection. - * You can use the handle in subsequent calls to execute specific - * HTTP calls using ::HTTPAPI_ExecuteRequest. - * - * @return A @c HTTP_HANDLE to the newly created connection or @c NULL in - * case an error occurs. - */ -MOCKABLE_FUNCTION(, HTTP_HANDLE, HTTPAPI_CreateConnection, const char*, hostName); - -/** - * @brief Closes a connection created with ::HTTPAPI_CreateConnection. - * - * @param handle The handle to the HTTP connection created via ::HTTPAPI_CreateConnection. - * - * All resources allocated by ::HTTPAPI_CreateConnection should be - * freed in ::HTTPAPI_CloseConnection. - */ -MOCKABLE_FUNCTION(, void, HTTPAPI_CloseConnection, HTTP_HANDLE, handle); - -/** - * @brief Sends the HTTP request to the host and handles the response for - * the HTTP call. - * - * @param handle The handle to the HTTP connection created - * via ::HTTPAPI_CreateConnection. - * @param requestType Specifies which HTTP method is used (GET, - * POST, DELETE, PUT, PATCH). - * @param relativePath Specifies the relative path of the URL - * excluding the host name. - * @param httpHeadersHandle Specifies a set of HTTP headers (name-value - * pairs) to be added to the - * HTTP request. The @p httpHeadersHandle - * handle can be created and setup with - * the proper name-value pairs by using the - * HTTPHeaders APIs available in @c - * HTTPHeaders.h. - * @param content Specifies a pointer to the request body. - * This value is optional and can be @c NULL. - * @param contentLength Specifies the request body size (this is - * typically added into the HTTP headers as - * the Content-Length header). This value is - * optional and can be 0. - * @param statusCode This is an out parameter, where - * ::HTTPAPI_ExecuteRequest returns the status - * code from the HTTP response (200, 201, 400, - * 401, etc.) - * @param responseHeadersHandle This is an HTTP headers handle to which - * ::HTTPAPI_ExecuteRequest must add all the - * HTTP response headers so that the caller of - * ::HTTPAPI_ExecuteRequest can inspect them. - * You can manipulate @p responseHeadersHandle - * by using the HTTPHeaders APIs available in - * @c HTTPHeaders.h - * @param responseContent This is a buffer that must be filled by - * ::HTTPAPI_ExecuteRequest with the contents - * of the HTTP response body. The buffer size - * must be increased by the - * ::HTTPAPI_ExecuteRequest implementation in - * order to fit the response body. - * ::HTTPAPI_ExecuteRequest must also handle - * chunked transfer encoding for HTTP responses. - * To manipulate the @p responseContent buffer, - * use the APIs available in @c Strings.h. - * - * @return @c HTTPAPI_OK if the API call is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_ExecuteRequest, HTTP_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath, - HTTP_HEADERS_HANDLE, httpHeadersHandle, const unsigned char*, content, - size_t, contentLength, unsigned int*, statusCode, - HTTP_HEADERS_HANDLE, responseHeadersHandle, BUFFER_HANDLE, responseContent); - -/** - * @brief Sets the option named @p optionName bearing the value - * @p value for the HTTP_HANDLE @p handle. - * - * @param handle The handle to the HTTP connection created via - * ::HTTPAPI_CreateConnection. - * @param optionName A @c NULL terminated string representing the name - * of the option. - * @param value A pointer to the value for the option. - * - * @return @c HTTPAPI_OK if initialization is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_SetOption, HTTP_HANDLE, handle, const char*, optionName, const void*, value); - -/** - * @brief Clones the option named @p optionName bearing the value @p value - * into the pointer @p savedValue. - * - * @param optionName A @c NULL terminated string representing the name of - * the option - * @param value A pointer to the value of the option. - * @param savedValue This pointer receives the copy of the value of the - * option. The copy needs to be free-able. - * - * @return @c HTTPAPI_OK if initialization is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_CloneOption, const char*, optionName, const void*, value, const void**, savedValue); - -#ifdef __cplusplus -} -#endif - -#endif /* HTTPAPI_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiex.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiex.h deleted file mode 100644 index b340f86c..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiex.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file httpapiex.h -* @brief This is a utility module that provides HTTP requests with -* build-in retry capabilities. -* -* @details HTTAPIEX is a utility module that provides HTTP requests with build-in -* retry capability to an HTTP server. Features over "regular" HTTPAPI include: -* - Optional parameters -* - Implementation independent -* - Retry mechanism -* - Persistent options -*/ - -#ifndef HTTPAPIEX_H -#define HTTPAPIEX_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/httpapi.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif - -typedef struct HTTPAPIEX_HANDLE_DATA_TAG* HTTPAPIEX_HANDLE; - -#define HTTPAPIEX_RESULT_VALUES \ - HTTPAPIEX_OK, \ - HTTPAPIEX_ERROR, \ - HTTPAPIEX_INVALID_ARG, \ - HTTPAPIEX_RECOVERYFAILED -/*to be continued*/ - -/** @brief Enumeration specifying the status of calls to various APIs in this module. -*/ -DEFINE_ENUM(HTTPAPIEX_RESULT, HTTPAPIEX_RESULT_VALUES); - -/** - * @brief Creates an @c HTTPAPIEX_HANDLE that can be used in further calls. - * - * @param hostName Pointer to a null-terminated string that contains the host name - * of an HTTP server. - * - * If @p hostName is @c NULL then @c HTTPAPIEX_Create returns @c NULL. The @p - * hostName value is saved and associated with the returned handle. If creating - * the handle fails for any reason, then @c HTTAPIEX_Create returns @c NULL. - * Otherwise, @c HTTPAPIEX_Create returns an @c HTTAPIEX_HANDLE suitable for - * further calls to the module. - * - * @return An @c HTTAPIEX_HANDLE suitable for further calls to the module. - */ -MOCKABLE_FUNCTION(, HTTPAPIEX_HANDLE, HTTPAPIEX_Create, const char*, hostName); - -/** - * @brief Tries to execute an HTTP request. - * - * @param handle A valid @c HTTPAPIEX_HANDLE value. - * @param requestType A value from the ::HTTPAPI_REQUEST_TYPE enum. - * @param relativePath Relative path to send the request to on the server. - * @param requestHttpHeadersHandle Handle to the request HTTP headers. - * @param requestContent The request content. - * @param statusCode If non-null, the HTTP status code is written to this - * pointer. - * @param responseHttpHeadersHandle Handle to the response HTTP headers. - * @param responseContent The response content. - * - * @c HTTPAPIEX_ExecuteRequest tries to execute an HTTP request of type @p - * requestType, on the server's @p relativePath, pushing the request HTTP - * headers @p requestHttpHeadersHandle, having the content of the request - * as pointed to by @p requestContent. If successful, @c HTTAPIEX_ExecuteRequest - * writes in the out @p parameter statusCode the HTTP status, populates the @p - * responseHeadersHandle with the response headers and copies the response body - * to @p responseContent. - * - * @return An @c HTTAPIEX_HANDLE suitable for further calls to the module. - */ -MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_ExecuteRequest, HTTPAPIEX_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath, HTTP_HEADERS_HANDLE, requestHttpHeadersHandle, BUFFER_HANDLE, requestContent, unsigned int*, statusCode, HTTP_HEADERS_HANDLE, responseHttpHeadersHandle, BUFFER_HANDLE, responseContent); - -/** - * @brief Frees all resources used by the @c HTTPAPIEX_HANDLE object. - * - * @param handle The @c HTTPAPIEX_HANDLE object to be freed. - */ -MOCKABLE_FUNCTION(, void, HTTPAPIEX_Destroy, HTTPAPIEX_HANDLE, handle); - -/** - * @brief Sets the option @p optionName to the value pointed to by @p value. - * - * @param handle The @c HTTPAPIEX_HANDLE representing this session. - * @param optionName Name of the option. - * @param value The value to be set for the option. - * - * @return An @c HTTPAPIEX_RESULT indicating the status of the call. - */ -MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_SetOption, HTTPAPIEX_HANDLE, handle, const char*, optionName, const void*, value); - -#ifdef __cplusplus -} -#endif - -#endif /* HTTPAPIEX_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiexsas.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiexsas.h deleted file mode 100644 index 2df7d8fc..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpapiexsas.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef HTTPAPIEX_SAS_H -#define HTTPAPIEX_SAS_H - -#include "azure_c_shared_utility/strings.h" -#include "azure_c_shared_utility/buffer_.h" -#include "azure_c_shared_utility/httpheaders.h" -#include "azure_c_shared_utility/httpapiex.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct HTTPAPIEX_SAS_STATE_TAG* HTTPAPIEX_SAS_HANDLE; - -MOCKABLE_FUNCTION(, HTTPAPIEX_SAS_HANDLE, HTTPAPIEX_SAS_Create, STRING_HANDLE, key, STRING_HANDLE, uriResource, STRING_HANDLE, keyName); - -MOCKABLE_FUNCTION(, void, HTTPAPIEX_SAS_Destroy, HTTPAPIEX_SAS_HANDLE, handle); - -MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_SAS_ExecuteRequest, HTTPAPIEX_SAS_HANDLE, sasHandle, HTTPAPIEX_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath, HTTP_HEADERS_HANDLE, requestHttpHeadersHandle, BUFFER_HANDLE, requestContent, unsigned int*, statusCode, HTTP_HEADERS_HANDLE, responseHeadersHandle, BUFFER_HANDLE, responseContent); - -#ifdef __cplusplus -} -#endif - -#endif /* HTTPAPIEX_SAS_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpheaders.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/httpheaders.h deleted file mode 100644 index d2b6ee17..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/httpheaders.h +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file httpheaders.h -* @brief This is a utility module that handles HTTP message-headers. -* -* @details An application would use ::HTTPHeaders_Alloc to create a new set of HTTP headers. -* After getting the handle, the application would build in several headers by -* consecutive calls to ::HTTPHeaders_AddHeaderNameValuePair. When the headers are -* constructed, the application can retrieve the stored data by calling one of the -* following functions: -* - ::HTTPHeaders_FindHeaderValue - when the name of the header is known and it -* wants to know the value of that header -* - ::HTTPHeaders_GetHeaderCount - when the application needs to know the count -* of all the headers -* - ::HTTPHeaders_GetHeader - when the application needs to retrieve the -* name + ": " + value string based on an index. -*/ - -#ifndef HTTPHEADERS_H -#define HTTPHEADERS_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif - -/*Codes_SRS_HTTP_HEADERS_99_001:[ HttpHeaders shall have the following interface]*/ - -#define HTTP_HEADERS_RESULT_VALUES \ -HTTP_HEADERS_OK, \ -HTTP_HEADERS_INVALID_ARG, \ -HTTP_HEADERS_ALLOC_FAILED, \ -HTTP_HEADERS_INSUFFICIENT_BUFFER, \ -HTTP_HEADERS_ERROR \ - -/** @brief Enumeration specifying the status of calls to various APIs in this module. -*/ -DEFINE_ENUM(HTTP_HEADERS_RESULT, HTTP_HEADERS_RESULT_VALUES); -typedef struct HTTP_HEADERS_HANDLE_DATA_TAG* HTTP_HEADERS_HANDLE; - -/** - * @brief Produces a @c HTTP_HANDLE that can later be used in subsequent calls to the module. - * - * This function returns @c NULL in case an error occurs. After successful execution - * ::HTTPHeaders_GetHeaderCount will report @c 0 existing headers. - * - * @return A HTTP_HEADERS_HANDLE representing the newly created collection of HTTP headers. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_HANDLE, HTTPHeaders_Alloc); - -/** - * @brief De-allocates the data structures allocated by previous API calls to the same handle. - * - * @param httpHeadersHandle A valid @c HTTP_HEADERS_HANDLE value. - */ -MOCKABLE_FUNCTION(, void, HTTPHeaders_Free, HTTP_HEADERS_HANDLE, httpHeadersHandle); - -/** - * @brief Adds a header record from the @p name and @p value parameters. - * - * @param httpHeadersHandle A valid @c HTTP_HEADERS_HANDLE value. - * @param name The name of the HTTP header to add. It is invalid for - * the name to include the ':' character or character codes - * outside the range 33-126. - * @param value The value to be assigned to the header. - * - * The function stores the @c name:value pair in such a way that when later - * retrieved by a call to ::HTTPHeaders_GetHeader it will return a string - * that is @c strcmp equal to @c name+": "+value. If the name already exists - * in the collection of headers, the function concatenates the new value - * after the existing value, separated by a comma and a space as in: - * old-value+", "+new-value. - * - * @return Returns @c HTTP_HEADERS_OK when execution is successful or an error code from - * the ::HTTPAPIEX_RESULT enum. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_AddHeaderNameValuePair, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name, const char*, value); - -/** - * @brief This API performs exactly the same as ::HTTPHeaders_AddHeaderNameValuePair - * except that if the header name already exists then the already existing value - * will be replaced as opposed to being concatenated to. - * - * @param httpHeadersHandle A valid @c HTTP_HEADERS_HANDLE value. - * @param name The name of the HTTP header to add/replace. It is invalid for - * the name to include the ':' character or character codes - * outside the range 33-126. - * @param value The value to be assigned to the header. - * - * @return Returns @c HTTP_HEADERS_OK when execution is successful or an error code from - * the ::HTTPAPIEX_RESULT enum. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_ReplaceHeaderNameValuePair, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name, const char*, value); - -/** - * @brief Retrieves the value for a previously stored name. - * - * @param httpHeadersHandle A valid @c HTTP_HEADERS_HANDLE value. - * @param name The name of the HTTP header to find. - * - * @return The return value points to a string that shall be @c strcmp equal - * to the original stored string. - */ -MOCKABLE_FUNCTION(, const char*, HTTPHeaders_FindHeaderValue, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name); - -/** - * @brief This API retrieves the number of stored headers. - * - * @param httpHeadersHandle A valid @c HTTP_HEADERS_HANDLE value. - * @param headersCount If non-null, the API writes the number of - * into the memory pointed at by this parameter. - * - * @return Returns @c HTTP_HEADERS_OK when execution is successful or - * @c HTTP_HEADERS_ERROR when an error occurs. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_GetHeaderCount, HTTP_HEADERS_HANDLE, httpHeadersHandle, size_t*, headersCount); - -/** - * @brief This API retrieves the string name+": "+value for the header - * element at the given @p index. - * - * @param handle A valid @c HTTP_HEADERS_HANDLE value. - * @param index Zero-based index of the item in the - * headers collection. - * @param destination If non-null, the header value is written into a - * new string a pointer to which is written into this - * parameters. It is the caller's responsibility to free - * this memory. - * - * @return Returns @c HTTP_HEADERS_OK when execution is successful or - * @c HTTP_HEADERS_ERROR when an error occurs. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_GetHeader, HTTP_HEADERS_HANDLE, handle, size_t, index, char**, destination); - -/** - * @brief This API produces a clone of the @p handle parameter. - * - * @param handle A valid @c HTTP_HEADERS_HANDLE value. - * - * If @p handle is not @c NULL this function clones the content - * of the handle to a new handle and returns it. - * - * @return A @c HTTP_HEADERS_HANDLE containing a cloned copy of the - * contents of @p handle. - */ -MOCKABLE_FUNCTION(, HTTP_HEADERS_HANDLE, HTTPHeaders_Clone, HTTP_HEADERS_HANDLE, handle); - -#ifdef __cplusplus -} -#endif - -#endif /* HTTPHEADERS_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/list.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/list.h deleted file mode 100644 index 67f5df30..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/list.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef LIST_H -#define LIST_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include "stdbool.h" -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct LIST_INSTANCE_TAG* LIST_HANDLE; -typedef struct LIST_ITEM_INSTANCE_TAG* LIST_ITEM_HANDLE; -typedef bool (*LIST_MATCH_FUNCTION)(LIST_ITEM_HANDLE list_item, const void* match_context); - -MOCKABLE_FUNCTION(, LIST_HANDLE, list_create); -MOCKABLE_FUNCTION(, void, list_destroy, LIST_HANDLE, list); -MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, list_add, LIST_HANDLE, list, const void*, item); -MOCKABLE_FUNCTION(, int, list_remove, LIST_HANDLE, list, LIST_ITEM_HANDLE, item_handle); -MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, list_get_head_item, LIST_HANDLE, list); -MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, list_get_next_item, LIST_ITEM_HANDLE, item_handle); -MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, list_find, LIST_HANDLE, list, LIST_MATCH_FUNCTION, match_function, const void*, match_context); -MOCKABLE_FUNCTION(, const void*, list_item_get_value, LIST_ITEM_HANDLE, item_handle); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* LIST_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/lock.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/lock.h deleted file mode 100644 index 5bd22122..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/lock.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file lock.h -* @brief A minimalistic platform agnostic lock abstraction for thread -* synchronization. -* @details The Lock component is implemented in order to achieve thread -* synchronization, as we may have a requirement to consume locks -* across different platforms. This component exposes some generic -* APIs so that it can be extended for platform specific -* implementations. -*/ - -#ifndef LOCK_H -#define LOCK_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* LOCK_HANDLE; - -#define LOCK_RESULT_VALUES \ - LOCK_OK, \ - LOCK_ERROR \ - -/** @brief Enumeration specifying the lock status. -*/ -DEFINE_ENUM(LOCK_RESULT, LOCK_RESULT_VALUES); - -/** - * @brief This API creates and returns a valid lock handle. - * - * @return A valid @c LOCK_HANDLE when successful or @c NULL otherwise. - */ -MOCKABLE_FUNCTION(, LOCK_HANDLE, Lock_Init); - -/** - * @brief Acquires a lock on the given lock handle. Uses platform - * specific mutex primitives in its implementation. - * - * @param handle A valid handle to the lock. - * - * @return Returns @c LOCK_OK when a lock has been acquired and - * @c LOCK_ERROR when an error occurs. - */ -MOCKABLE_FUNCTION(, LOCK_RESULT, Lock, LOCK_HANDLE, handle); - -/** - * @brief Releases the lock on the given lock handle. Uses platform - * specific mutex primitives in its implementation. - * - * @param handle A valid handle to the lock. - * - * @return Returns @c LOCK_OK when the lock has been released and - * @c LOCK_ERROR when an error occurs. - */ -MOCKABLE_FUNCTION(, LOCK_RESULT, Unlock, LOCK_HANDLE, handle); - -/** - * @brief The lock instance is destroyed. - * - * @param handle A valid handle to the lock. - * - * @return Returns @c LOCK_OK when the lock object has been - * destroyed and @c LOCK_ERROR when an error occurs. - */ -MOCKABLE_FUNCTION(, LOCK_RESULT, Lock_Deinit, LOCK_HANDLE, handle); - -#ifdef __cplusplus -} -#endif - -#endif /* LOCK_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/macro_utils.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/macro_utils.h deleted file mode 100644 index 0e6e2ffd..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/macro_utils.h +++ /dev/null @@ -1,11324 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/*THIS FILE IS GENERATED*/ -/*DO NOT EDIT BY HAND!!!*/ -/*instead edit macro_utils.tt */ - -#ifndef MACRO_UTILS_H -#define MACRO_UTILS_H - -#include - -/*"pointer or NULL" macro - because when printf-ing arguments NULL is not valid for %p or %s (section 7.1.4 of C11 standard) */ -#define P_OR_NULL(p) (((p)!=NULL)?(p):"NULL") - -#define TOSTRING_(x) #x -#define TOSTRING(x) TOSTRING_(x) - -#define IFCOMMA(N) C2(IFCOMMA_, N) -#define IFCOMMA_0 -#define IFCOMMA_2 -#define IFCOMMA_4 , -#define IFCOMMA_6 , -#define IFCOMMA_8 , -#define IFCOMMA_10 , -#define IFCOMMA_12 , -#define IFCOMMA_14 , -#define IFCOMMA_16 , -#define IFCOMMA_18 , -#define IFCOMMA_20 , -#define IFCOMMA_22 , -#define IFCOMMA_24 , -#define IFCOMMA_26 , -#define IFCOMMA_28 , -#define IFCOMMA_30 , -#define IFCOMMA_32 , -#define IFCOMMA_34 , -#define IFCOMMA_36 , -#define IFCOMMA_38 , -#define IFCOMMA_40 , -#define IFCOMMA_42 , -#define IFCOMMA_44 , -#define IFCOMMA_46 , -#define IFCOMMA_48 , -#define IFCOMMA_50 , -#define IFCOMMA_52 , -#define IFCOMMA_54 , -#define IFCOMMA_56 , -#define IFCOMMA_58 , -#define IFCOMMA_60 , -#define IFCOMMA_62 , -#define IFCOMMA_64 , -#define IFCOMMA_66 , -#define IFCOMMA_68 , -#define IFCOMMA_70 , -#define IFCOMMA_72 , -#define IFCOMMA_74 , -#define IFCOMMA_76 , -#define IFCOMMA_78 , -#define IFCOMMA_80 , -#define IFCOMMA_82 , -#define IFCOMMA_84 , -#define IFCOMMA_86 , -#define IFCOMMA_88 , -#define IFCOMMA_90 , -#define IFCOMMA_92 , -#define IFCOMMA_94 , -#define IFCOMMA_96 , -#define IFCOMMA_98 , -#define IFCOMMA_100 , -#define IFCOMMA_102 , -#define IFCOMMA_104 , -#define IFCOMMA_106 , -#define IFCOMMA_108 , -#define IFCOMMA_110 , -#define IFCOMMA_112 , -#define IFCOMMA_114 , -#define IFCOMMA_116 , -#define IFCOMMA_118 , -#define IFCOMMA_120 , -#define IFCOMMA_122 , -#define IFCOMMA_124 , - -#define IFCOMMA_NOFIRST(N) C2(IFCOMMA_NOFIRST, N) -#define IFCOMMA_NOFIRST1 -#define IFCOMMA_NOFIRST2 , -#define IFCOMMA_NOFIRST3 , -#define IFCOMMA_NOFIRST4 , -#define IFCOMMA_NOFIRST5 , -#define IFCOMMA_NOFIRST6 , -#define IFCOMMA_NOFIRST7 , -#define IFCOMMA_NOFIRST8 , -#define IFCOMMA_NOFIRST9 , -#define IFCOMMA_NOFIRST10 , -#define IFCOMMA_NOFIRST11 , -#define IFCOMMA_NOFIRST12 , -#define IFCOMMA_NOFIRST13 , -#define IFCOMMA_NOFIRST14 , -#define IFCOMMA_NOFIRST15 , -#define IFCOMMA_NOFIRST16 , -#define IFCOMMA_NOFIRST17 , -#define IFCOMMA_NOFIRST18 , -#define IFCOMMA_NOFIRST19 , -#define IFCOMMA_NOFIRST20 , -#define IFCOMMA_NOFIRST21 , -#define IFCOMMA_NOFIRST22 , -#define IFCOMMA_NOFIRST23 , -#define IFCOMMA_NOFIRST24 , -#define IFCOMMA_NOFIRST25 , -#define IFCOMMA_NOFIRST26 , -#define IFCOMMA_NOFIRST27 , -#define IFCOMMA_NOFIRST28 , -#define IFCOMMA_NOFIRST29 , -#define IFCOMMA_NOFIRST30 , -#define IFCOMMA_NOFIRST31 , -#define IFCOMMA_NOFIRST32 , -#define IFCOMMA_NOFIRST33 , -#define IFCOMMA_NOFIRST34 , -#define IFCOMMA_NOFIRST35 , -#define IFCOMMA_NOFIRST36 , -#define IFCOMMA_NOFIRST37 , -#define IFCOMMA_NOFIRST38 , -#define IFCOMMA_NOFIRST39 , -#define IFCOMMA_NOFIRST40 , -#define IFCOMMA_NOFIRST41 , -#define IFCOMMA_NOFIRST42 , -#define IFCOMMA_NOFIRST43 , -#define IFCOMMA_NOFIRST44 , -#define IFCOMMA_NOFIRST45 , -#define IFCOMMA_NOFIRST46 , -#define IFCOMMA_NOFIRST47 , -#define IFCOMMA_NOFIRST48 , -#define IFCOMMA_NOFIRST49 , -#define IFCOMMA_NOFIRST50 , -#define IFCOMMA_NOFIRST51 , -#define IFCOMMA_NOFIRST52 , -#define IFCOMMA_NOFIRST53 , -#define IFCOMMA_NOFIRST54 , -#define IFCOMMA_NOFIRST55 , -#define IFCOMMA_NOFIRST56 , -#define IFCOMMA_NOFIRST57 , -#define IFCOMMA_NOFIRST58 , -#define IFCOMMA_NOFIRST59 , -#define IFCOMMA_NOFIRST60 , -#define IFCOMMA_NOFIRST61 , -#define IFCOMMA_NOFIRST62 , -#define IFCOMMA_NOFIRST63 , -#define IFCOMMA_NOFIRST64 , -#define IFCOMMA_NOFIRST65 , -#define IFCOMMA_NOFIRST66 , -#define IFCOMMA_NOFIRST67 , -#define IFCOMMA_NOFIRST68 , -#define IFCOMMA_NOFIRST69 , -#define IFCOMMA_NOFIRST70 , -#define IFCOMMA_NOFIRST71 , -#define IFCOMMA_NOFIRST72 , -#define IFCOMMA_NOFIRST73 , -#define IFCOMMA_NOFIRST74 , -#define IFCOMMA_NOFIRST75 , -#define IFCOMMA_NOFIRST76 , -#define IFCOMMA_NOFIRST77 , -#define IFCOMMA_NOFIRST78 , -#define IFCOMMA_NOFIRST79 , -#define IFCOMMA_NOFIRST80 , -#define IFCOMMA_NOFIRST81 , -#define IFCOMMA_NOFIRST82 , -#define IFCOMMA_NOFIRST83 , -#define IFCOMMA_NOFIRST84 , -#define IFCOMMA_NOFIRST85 , -#define IFCOMMA_NOFIRST86 , -#define IFCOMMA_NOFIRST87 , -#define IFCOMMA_NOFIRST88 , -#define IFCOMMA_NOFIRST89 , -#define IFCOMMA_NOFIRST90 , -#define IFCOMMA_NOFIRST91 , -#define IFCOMMA_NOFIRST92 , -#define IFCOMMA_NOFIRST93 , -#define IFCOMMA_NOFIRST94 , -#define IFCOMMA_NOFIRST95 , -#define IFCOMMA_NOFIRST96 , -#define IFCOMMA_NOFIRST97 , -#define IFCOMMA_NOFIRST98 , -#define IFCOMMA_NOFIRST99 , -#define IFCOMMA_NOFIRST100 , -#define IFCOMMA_NOFIRST101 , -#define IFCOMMA_NOFIRST102 , -#define IFCOMMA_NOFIRST103 , -#define IFCOMMA_NOFIRST104 , -#define IFCOMMA_NOFIRST105 , -#define IFCOMMA_NOFIRST106 , -#define IFCOMMA_NOFIRST107 , -#define IFCOMMA_NOFIRST108 , -#define IFCOMMA_NOFIRST109 , -#define IFCOMMA_NOFIRST110 , -#define IFCOMMA_NOFIRST111 , -#define IFCOMMA_NOFIRST112 , -#define IFCOMMA_NOFIRST113 , -#define IFCOMMA_NOFIRST114 , -#define IFCOMMA_NOFIRST115 , -#define IFCOMMA_NOFIRST116 , -#define IFCOMMA_NOFIRST117 , -#define IFCOMMA_NOFIRST118 , -#define IFCOMMA_NOFIRST119 , -#define IFCOMMA_NOFIRST120 , -#define IFCOMMA_NOFIRST121 , -#define IFCOMMA_NOFIRST122 , -#define IFCOMMA_NOFIRST123 , -#define IFCOMMA_NOFIRST124 , - -#define DEC(x) C2(DEC,x) -#define DEC1024 1023 -#define DEC1023 1022 -#define DEC1022 1021 -#define DEC1021 1020 -#define DEC1020 1019 -#define DEC1019 1018 -#define DEC1018 1017 -#define DEC1017 1016 -#define DEC1016 1015 -#define DEC1015 1014 -#define DEC1014 1013 -#define DEC1013 1012 -#define DEC1012 1011 -#define DEC1011 1010 -#define DEC1010 1009 -#define DEC1009 1008 -#define DEC1008 1007 -#define DEC1007 1006 -#define DEC1006 1005 -#define DEC1005 1004 -#define DEC1004 1003 -#define DEC1003 1002 -#define DEC1002 1001 -#define DEC1001 1000 -#define DEC1000 999 -#define DEC999 998 -#define DEC998 997 -#define DEC997 996 -#define DEC996 995 -#define DEC995 994 -#define DEC994 993 -#define DEC993 992 -#define DEC992 991 -#define DEC991 990 -#define DEC990 989 -#define DEC989 988 -#define DEC988 987 -#define DEC987 986 -#define DEC986 985 -#define DEC985 984 -#define DEC984 983 -#define DEC983 982 -#define DEC982 981 -#define DEC981 980 -#define DEC980 979 -#define DEC979 978 -#define DEC978 977 -#define DEC977 976 -#define DEC976 975 -#define DEC975 974 -#define DEC974 973 -#define DEC973 972 -#define DEC972 971 -#define DEC971 970 -#define DEC970 969 -#define DEC969 968 -#define DEC968 967 -#define DEC967 966 -#define DEC966 965 -#define DEC965 964 -#define DEC964 963 -#define DEC963 962 -#define DEC962 961 -#define DEC961 960 -#define DEC960 959 -#define DEC959 958 -#define DEC958 957 -#define DEC957 956 -#define DEC956 955 -#define DEC955 954 -#define DEC954 953 -#define DEC953 952 -#define DEC952 951 -#define DEC951 950 -#define DEC950 949 -#define DEC949 948 -#define DEC948 947 -#define DEC947 946 -#define DEC946 945 -#define DEC945 944 -#define DEC944 943 -#define DEC943 942 -#define DEC942 941 -#define DEC941 940 -#define DEC940 939 -#define DEC939 938 -#define DEC938 937 -#define DEC937 936 -#define DEC936 935 -#define DEC935 934 -#define DEC934 933 -#define DEC933 932 -#define DEC932 931 -#define DEC931 930 -#define DEC930 929 -#define DEC929 928 -#define DEC928 927 -#define DEC927 926 -#define DEC926 925 -#define DEC925 924 -#define DEC924 923 -#define DEC923 922 -#define DEC922 921 -#define DEC921 920 -#define DEC920 919 -#define DEC919 918 -#define DEC918 917 -#define DEC917 916 -#define DEC916 915 -#define DEC915 914 -#define DEC914 913 -#define DEC913 912 -#define DEC912 911 -#define DEC911 910 -#define DEC910 909 -#define DEC909 908 -#define DEC908 907 -#define DEC907 906 -#define DEC906 905 -#define DEC905 904 -#define DEC904 903 -#define DEC903 902 -#define DEC902 901 -#define DEC901 900 -#define DEC900 899 -#define DEC899 898 -#define DEC898 897 -#define DEC897 896 -#define DEC896 895 -#define DEC895 894 -#define DEC894 893 -#define DEC893 892 -#define DEC892 891 -#define DEC891 890 -#define DEC890 889 -#define DEC889 888 -#define DEC888 887 -#define DEC887 886 -#define DEC886 885 -#define DEC885 884 -#define DEC884 883 -#define DEC883 882 -#define DEC882 881 -#define DEC881 880 -#define DEC880 879 -#define DEC879 878 -#define DEC878 877 -#define DEC877 876 -#define DEC876 875 -#define DEC875 874 -#define DEC874 873 -#define DEC873 872 -#define DEC872 871 -#define DEC871 870 -#define DEC870 869 -#define DEC869 868 -#define DEC868 867 -#define DEC867 866 -#define DEC866 865 -#define DEC865 864 -#define DEC864 863 -#define DEC863 862 -#define DEC862 861 -#define DEC861 860 -#define DEC860 859 -#define DEC859 858 -#define DEC858 857 -#define DEC857 856 -#define DEC856 855 -#define DEC855 854 -#define DEC854 853 -#define DEC853 852 -#define DEC852 851 -#define DEC851 850 -#define DEC850 849 -#define DEC849 848 -#define DEC848 847 -#define DEC847 846 -#define DEC846 845 -#define DEC845 844 -#define DEC844 843 -#define DEC843 842 -#define DEC842 841 -#define DEC841 840 -#define DEC840 839 -#define DEC839 838 -#define DEC838 837 -#define DEC837 836 -#define DEC836 835 -#define DEC835 834 -#define DEC834 833 -#define DEC833 832 -#define DEC832 831 -#define DEC831 830 -#define DEC830 829 -#define DEC829 828 -#define DEC828 827 -#define DEC827 826 -#define DEC826 825 -#define DEC825 824 -#define DEC824 823 -#define DEC823 822 -#define DEC822 821 -#define DEC821 820 -#define DEC820 819 -#define DEC819 818 -#define DEC818 817 -#define DEC817 816 -#define DEC816 815 -#define DEC815 814 -#define DEC814 813 -#define DEC813 812 -#define DEC812 811 -#define DEC811 810 -#define DEC810 809 -#define DEC809 808 -#define DEC808 807 -#define DEC807 806 -#define DEC806 805 -#define DEC805 804 -#define DEC804 803 -#define DEC803 802 -#define DEC802 801 -#define DEC801 800 -#define DEC800 799 -#define DEC799 798 -#define DEC798 797 -#define DEC797 796 -#define DEC796 795 -#define DEC795 794 -#define DEC794 793 -#define DEC793 792 -#define DEC792 791 -#define DEC791 790 -#define DEC790 789 -#define DEC789 788 -#define DEC788 787 -#define DEC787 786 -#define DEC786 785 -#define DEC785 784 -#define DEC784 783 -#define DEC783 782 -#define DEC782 781 -#define DEC781 780 -#define DEC780 779 -#define DEC779 778 -#define DEC778 777 -#define DEC777 776 -#define DEC776 775 -#define DEC775 774 -#define DEC774 773 -#define DEC773 772 -#define DEC772 771 -#define DEC771 770 -#define DEC770 769 -#define DEC769 768 -#define DEC768 767 -#define DEC767 766 -#define DEC766 765 -#define DEC765 764 -#define DEC764 763 -#define DEC763 762 -#define DEC762 761 -#define DEC761 760 -#define DEC760 759 -#define DEC759 758 -#define DEC758 757 -#define DEC757 756 -#define DEC756 755 -#define DEC755 754 -#define DEC754 753 -#define DEC753 752 -#define DEC752 751 -#define DEC751 750 -#define DEC750 749 -#define DEC749 748 -#define DEC748 747 -#define DEC747 746 -#define DEC746 745 -#define DEC745 744 -#define DEC744 743 -#define DEC743 742 -#define DEC742 741 -#define DEC741 740 -#define DEC740 739 -#define DEC739 738 -#define DEC738 737 -#define DEC737 736 -#define DEC736 735 -#define DEC735 734 -#define DEC734 733 -#define DEC733 732 -#define DEC732 731 -#define DEC731 730 -#define DEC730 729 -#define DEC729 728 -#define DEC728 727 -#define DEC727 726 -#define DEC726 725 -#define DEC725 724 -#define DEC724 723 -#define DEC723 722 -#define DEC722 721 -#define DEC721 720 -#define DEC720 719 -#define DEC719 718 -#define DEC718 717 -#define DEC717 716 -#define DEC716 715 -#define DEC715 714 -#define DEC714 713 -#define DEC713 712 -#define DEC712 711 -#define DEC711 710 -#define DEC710 709 -#define DEC709 708 -#define DEC708 707 -#define DEC707 706 -#define DEC706 705 -#define DEC705 704 -#define DEC704 703 -#define DEC703 702 -#define DEC702 701 -#define DEC701 700 -#define DEC700 699 -#define DEC699 698 -#define DEC698 697 -#define DEC697 696 -#define DEC696 695 -#define DEC695 694 -#define DEC694 693 -#define DEC693 692 -#define DEC692 691 -#define DEC691 690 -#define DEC690 689 -#define DEC689 688 -#define DEC688 687 -#define DEC687 686 -#define DEC686 685 -#define DEC685 684 -#define DEC684 683 -#define DEC683 682 -#define DEC682 681 -#define DEC681 680 -#define DEC680 679 -#define DEC679 678 -#define DEC678 677 -#define DEC677 676 -#define DEC676 675 -#define DEC675 674 -#define DEC674 673 -#define DEC673 672 -#define DEC672 671 -#define DEC671 670 -#define DEC670 669 -#define DEC669 668 -#define DEC668 667 -#define DEC667 666 -#define DEC666 665 -#define DEC665 664 -#define DEC664 663 -#define DEC663 662 -#define DEC662 661 -#define DEC661 660 -#define DEC660 659 -#define DEC659 658 -#define DEC658 657 -#define DEC657 656 -#define DEC656 655 -#define DEC655 654 -#define DEC654 653 -#define DEC653 652 -#define DEC652 651 -#define DEC651 650 -#define DEC650 649 -#define DEC649 648 -#define DEC648 647 -#define DEC647 646 -#define DEC646 645 -#define DEC645 644 -#define DEC644 643 -#define DEC643 642 -#define DEC642 641 -#define DEC641 640 -#define DEC640 639 -#define DEC639 638 -#define DEC638 637 -#define DEC637 636 -#define DEC636 635 -#define DEC635 634 -#define DEC634 633 -#define DEC633 632 -#define DEC632 631 -#define DEC631 630 -#define DEC630 629 -#define DEC629 628 -#define DEC628 627 -#define DEC627 626 -#define DEC626 625 -#define DEC625 624 -#define DEC624 623 -#define DEC623 622 -#define DEC622 621 -#define DEC621 620 -#define DEC620 619 -#define DEC619 618 -#define DEC618 617 -#define DEC617 616 -#define DEC616 615 -#define DEC615 614 -#define DEC614 613 -#define DEC613 612 -#define DEC612 611 -#define DEC611 610 -#define DEC610 609 -#define DEC609 608 -#define DEC608 607 -#define DEC607 606 -#define DEC606 605 -#define DEC605 604 -#define DEC604 603 -#define DEC603 602 -#define DEC602 601 -#define DEC601 600 -#define DEC600 599 -#define DEC599 598 -#define DEC598 597 -#define DEC597 596 -#define DEC596 595 -#define DEC595 594 -#define DEC594 593 -#define DEC593 592 -#define DEC592 591 -#define DEC591 590 -#define DEC590 589 -#define DEC589 588 -#define DEC588 587 -#define DEC587 586 -#define DEC586 585 -#define DEC585 584 -#define DEC584 583 -#define DEC583 582 -#define DEC582 581 -#define DEC581 580 -#define DEC580 579 -#define DEC579 578 -#define DEC578 577 -#define DEC577 576 -#define DEC576 575 -#define DEC575 574 -#define DEC574 573 -#define DEC573 572 -#define DEC572 571 -#define DEC571 570 -#define DEC570 569 -#define DEC569 568 -#define DEC568 567 -#define DEC567 566 -#define DEC566 565 -#define DEC565 564 -#define DEC564 563 -#define DEC563 562 -#define DEC562 561 -#define DEC561 560 -#define DEC560 559 -#define DEC559 558 -#define DEC558 557 -#define DEC557 556 -#define DEC556 555 -#define DEC555 554 -#define DEC554 553 -#define DEC553 552 -#define DEC552 551 -#define DEC551 550 -#define DEC550 549 -#define DEC549 548 -#define DEC548 547 -#define DEC547 546 -#define DEC546 545 -#define DEC545 544 -#define DEC544 543 -#define DEC543 542 -#define DEC542 541 -#define DEC541 540 -#define DEC540 539 -#define DEC539 538 -#define DEC538 537 -#define DEC537 536 -#define DEC536 535 -#define DEC535 534 -#define DEC534 533 -#define DEC533 532 -#define DEC532 531 -#define DEC531 530 -#define DEC530 529 -#define DEC529 528 -#define DEC528 527 -#define DEC527 526 -#define DEC526 525 -#define DEC525 524 -#define DEC524 523 -#define DEC523 522 -#define DEC522 521 -#define DEC521 520 -#define DEC520 519 -#define DEC519 518 -#define DEC518 517 -#define DEC517 516 -#define DEC516 515 -#define DEC515 514 -#define DEC514 513 -#define DEC513 512 -#define DEC512 511 -#define DEC511 510 -#define DEC510 509 -#define DEC509 508 -#define DEC508 507 -#define DEC507 506 -#define DEC506 505 -#define DEC505 504 -#define DEC504 503 -#define DEC503 502 -#define DEC502 501 -#define DEC501 500 -#define DEC500 499 -#define DEC499 498 -#define DEC498 497 -#define DEC497 496 -#define DEC496 495 -#define DEC495 494 -#define DEC494 493 -#define DEC493 492 -#define DEC492 491 -#define DEC491 490 -#define DEC490 489 -#define DEC489 488 -#define DEC488 487 -#define DEC487 486 -#define DEC486 485 -#define DEC485 484 -#define DEC484 483 -#define DEC483 482 -#define DEC482 481 -#define DEC481 480 -#define DEC480 479 -#define DEC479 478 -#define DEC478 477 -#define DEC477 476 -#define DEC476 475 -#define DEC475 474 -#define DEC474 473 -#define DEC473 472 -#define DEC472 471 -#define DEC471 470 -#define DEC470 469 -#define DEC469 468 -#define DEC468 467 -#define DEC467 466 -#define DEC466 465 -#define DEC465 464 -#define DEC464 463 -#define DEC463 462 -#define DEC462 461 -#define DEC461 460 -#define DEC460 459 -#define DEC459 458 -#define DEC458 457 -#define DEC457 456 -#define DEC456 455 -#define DEC455 454 -#define DEC454 453 -#define DEC453 452 -#define DEC452 451 -#define DEC451 450 -#define DEC450 449 -#define DEC449 448 -#define DEC448 447 -#define DEC447 446 -#define DEC446 445 -#define DEC445 444 -#define DEC444 443 -#define DEC443 442 -#define DEC442 441 -#define DEC441 440 -#define DEC440 439 -#define DEC439 438 -#define DEC438 437 -#define DEC437 436 -#define DEC436 435 -#define DEC435 434 -#define DEC434 433 -#define DEC433 432 -#define DEC432 431 -#define DEC431 430 -#define DEC430 429 -#define DEC429 428 -#define DEC428 427 -#define DEC427 426 -#define DEC426 425 -#define DEC425 424 -#define DEC424 423 -#define DEC423 422 -#define DEC422 421 -#define DEC421 420 -#define DEC420 419 -#define DEC419 418 -#define DEC418 417 -#define DEC417 416 -#define DEC416 415 -#define DEC415 414 -#define DEC414 413 -#define DEC413 412 -#define DEC412 411 -#define DEC411 410 -#define DEC410 409 -#define DEC409 408 -#define DEC408 407 -#define DEC407 406 -#define DEC406 405 -#define DEC405 404 -#define DEC404 403 -#define DEC403 402 -#define DEC402 401 -#define DEC401 400 -#define DEC400 399 -#define DEC399 398 -#define DEC398 397 -#define DEC397 396 -#define DEC396 395 -#define DEC395 394 -#define DEC394 393 -#define DEC393 392 -#define DEC392 391 -#define DEC391 390 -#define DEC390 389 -#define DEC389 388 -#define DEC388 387 -#define DEC387 386 -#define DEC386 385 -#define DEC385 384 -#define DEC384 383 -#define DEC383 382 -#define DEC382 381 -#define DEC381 380 -#define DEC380 379 -#define DEC379 378 -#define DEC378 377 -#define DEC377 376 -#define DEC376 375 -#define DEC375 374 -#define DEC374 373 -#define DEC373 372 -#define DEC372 371 -#define DEC371 370 -#define DEC370 369 -#define DEC369 368 -#define DEC368 367 -#define DEC367 366 -#define DEC366 365 -#define DEC365 364 -#define DEC364 363 -#define DEC363 362 -#define DEC362 361 -#define DEC361 360 -#define DEC360 359 -#define DEC359 358 -#define DEC358 357 -#define DEC357 356 -#define DEC356 355 -#define DEC355 354 -#define DEC354 353 -#define DEC353 352 -#define DEC352 351 -#define DEC351 350 -#define DEC350 349 -#define DEC349 348 -#define DEC348 347 -#define DEC347 346 -#define DEC346 345 -#define DEC345 344 -#define DEC344 343 -#define DEC343 342 -#define DEC342 341 -#define DEC341 340 -#define DEC340 339 -#define DEC339 338 -#define DEC338 337 -#define DEC337 336 -#define DEC336 335 -#define DEC335 334 -#define DEC334 333 -#define DEC333 332 -#define DEC332 331 -#define DEC331 330 -#define DEC330 329 -#define DEC329 328 -#define DEC328 327 -#define DEC327 326 -#define DEC326 325 -#define DEC325 324 -#define DEC324 323 -#define DEC323 322 -#define DEC322 321 -#define DEC321 320 -#define DEC320 319 -#define DEC319 318 -#define DEC318 317 -#define DEC317 316 -#define DEC316 315 -#define DEC315 314 -#define DEC314 313 -#define DEC313 312 -#define DEC312 311 -#define DEC311 310 -#define DEC310 309 -#define DEC309 308 -#define DEC308 307 -#define DEC307 306 -#define DEC306 305 -#define DEC305 304 -#define DEC304 303 -#define DEC303 302 -#define DEC302 301 -#define DEC301 300 -#define DEC300 299 -#define DEC299 298 -#define DEC298 297 -#define DEC297 296 -#define DEC296 295 -#define DEC295 294 -#define DEC294 293 -#define DEC293 292 -#define DEC292 291 -#define DEC291 290 -#define DEC290 289 -#define DEC289 288 -#define DEC288 287 -#define DEC287 286 -#define DEC286 285 -#define DEC285 284 -#define DEC284 283 -#define DEC283 282 -#define DEC282 281 -#define DEC281 280 -#define DEC280 279 -#define DEC279 278 -#define DEC278 277 -#define DEC277 276 -#define DEC276 275 -#define DEC275 274 -#define DEC274 273 -#define DEC273 272 -#define DEC272 271 -#define DEC271 270 -#define DEC270 269 -#define DEC269 268 -#define DEC268 267 -#define DEC267 266 -#define DEC266 265 -#define DEC265 264 -#define DEC264 263 -#define DEC263 262 -#define DEC262 261 -#define DEC261 260 -#define DEC260 259 -#define DEC259 258 -#define DEC258 257 -#define DEC257 256 -#define DEC256 255 -#define DEC255 254 -#define DEC254 253 -#define DEC253 252 -#define DEC252 251 -#define DEC251 250 -#define DEC250 249 -#define DEC249 248 -#define DEC248 247 -#define DEC247 246 -#define DEC246 245 -#define DEC245 244 -#define DEC244 243 -#define DEC243 242 -#define DEC242 241 -#define DEC241 240 -#define DEC240 239 -#define DEC239 238 -#define DEC238 237 -#define DEC237 236 -#define DEC236 235 -#define DEC235 234 -#define DEC234 233 -#define DEC233 232 -#define DEC232 231 -#define DEC231 230 -#define DEC230 229 -#define DEC229 228 -#define DEC228 227 -#define DEC227 226 -#define DEC226 225 -#define DEC225 224 -#define DEC224 223 -#define DEC223 222 -#define DEC222 221 -#define DEC221 220 -#define DEC220 219 -#define DEC219 218 -#define DEC218 217 -#define DEC217 216 -#define DEC216 215 -#define DEC215 214 -#define DEC214 213 -#define DEC213 212 -#define DEC212 211 -#define DEC211 210 -#define DEC210 209 -#define DEC209 208 -#define DEC208 207 -#define DEC207 206 -#define DEC206 205 -#define DEC205 204 -#define DEC204 203 -#define DEC203 202 -#define DEC202 201 -#define DEC201 200 -#define DEC200 199 -#define DEC199 198 -#define DEC198 197 -#define DEC197 196 -#define DEC196 195 -#define DEC195 194 -#define DEC194 193 -#define DEC193 192 -#define DEC192 191 -#define DEC191 190 -#define DEC190 189 -#define DEC189 188 -#define DEC188 187 -#define DEC187 186 -#define DEC186 185 -#define DEC185 184 -#define DEC184 183 -#define DEC183 182 -#define DEC182 181 -#define DEC181 180 -#define DEC180 179 -#define DEC179 178 -#define DEC178 177 -#define DEC177 176 -#define DEC176 175 -#define DEC175 174 -#define DEC174 173 -#define DEC173 172 -#define DEC172 171 -#define DEC171 170 -#define DEC170 169 -#define DEC169 168 -#define DEC168 167 -#define DEC167 166 -#define DEC166 165 -#define DEC165 164 -#define DEC164 163 -#define DEC163 162 -#define DEC162 161 -#define DEC161 160 -#define DEC160 159 -#define DEC159 158 -#define DEC158 157 -#define DEC157 156 -#define DEC156 155 -#define DEC155 154 -#define DEC154 153 -#define DEC153 152 -#define DEC152 151 -#define DEC151 150 -#define DEC150 149 -#define DEC149 148 -#define DEC148 147 -#define DEC147 146 -#define DEC146 145 -#define DEC145 144 -#define DEC144 143 -#define DEC143 142 -#define DEC142 141 -#define DEC141 140 -#define DEC140 139 -#define DEC139 138 -#define DEC138 137 -#define DEC137 136 -#define DEC136 135 -#define DEC135 134 -#define DEC134 133 -#define DEC133 132 -#define DEC132 131 -#define DEC131 130 -#define DEC130 129 -#define DEC129 128 -#define DEC128 127 -#define DEC127 126 -#define DEC126 125 -#define DEC125 124 -#define DEC124 123 -#define DEC123 122 -#define DEC122 121 -#define DEC121 120 -#define DEC120 119 -#define DEC119 118 -#define DEC118 117 -#define DEC117 116 -#define DEC116 115 -#define DEC115 114 -#define DEC114 113 -#define DEC113 112 -#define DEC112 111 -#define DEC111 110 -#define DEC110 109 -#define DEC109 108 -#define DEC108 107 -#define DEC107 106 -#define DEC106 105 -#define DEC105 104 -#define DEC104 103 -#define DEC103 102 -#define DEC102 101 -#define DEC101 100 -#define DEC100 99 -#define DEC99 98 -#define DEC98 97 -#define DEC97 96 -#define DEC96 95 -#define DEC95 94 -#define DEC94 93 -#define DEC93 92 -#define DEC92 91 -#define DEC91 90 -#define DEC90 89 -#define DEC89 88 -#define DEC88 87 -#define DEC87 86 -#define DEC86 85 -#define DEC85 84 -#define DEC84 83 -#define DEC83 82 -#define DEC82 81 -#define DEC81 80 -#define DEC80 79 -#define DEC79 78 -#define DEC78 77 -#define DEC77 76 -#define DEC76 75 -#define DEC75 74 -#define DEC74 73 -#define DEC73 72 -#define DEC72 71 -#define DEC71 70 -#define DEC70 69 -#define DEC69 68 -#define DEC68 67 -#define DEC67 66 -#define DEC66 65 -#define DEC65 64 -#define DEC64 63 -#define DEC63 62 -#define DEC62 61 -#define DEC61 60 -#define DEC60 59 -#define DEC59 58 -#define DEC58 57 -#define DEC57 56 -#define DEC56 55 -#define DEC55 54 -#define DEC54 53 -#define DEC53 52 -#define DEC52 51 -#define DEC51 50 -#define DEC50 49 -#define DEC49 48 -#define DEC48 47 -#define DEC47 46 -#define DEC46 45 -#define DEC45 44 -#define DEC44 43 -#define DEC43 42 -#define DEC42 41 -#define DEC41 40 -#define DEC40 39 -#define DEC39 38 -#define DEC38 37 -#define DEC37 36 -#define DEC36 35 -#define DEC35 34 -#define DEC34 33 -#define DEC33 32 -#define DEC32 31 -#define DEC31 30 -#define DEC30 29 -#define DEC29 28 -#define DEC28 27 -#define DEC27 26 -#define DEC26 25 -#define DEC25 24 -#define DEC24 23 -#define DEC23 22 -#define DEC22 21 -#define DEC21 20 -#define DEC20 19 -#define DEC19 18 -#define DEC18 17 -#define DEC17 16 -#define DEC16 15 -#define DEC15 14 -#define DEC14 13 -#define DEC13 12 -#define DEC12 11 -#define DEC11 10 -#define DEC10 9 -#define DEC9 8 -#define DEC8 7 -#define DEC7 6 -#define DEC6 5 -#define DEC5 4 -#define DEC4 3 -#define DEC3 2 -#define DEC2 1 -#define DEC1 0 - -#define INC(x) C2(INC,x) -#define INC1024 1025 -#define INC1023 1024 -#define INC1022 1023 -#define INC1021 1022 -#define INC1020 1021 -#define INC1019 1020 -#define INC1018 1019 -#define INC1017 1018 -#define INC1016 1017 -#define INC1015 1016 -#define INC1014 1015 -#define INC1013 1014 -#define INC1012 1013 -#define INC1011 1012 -#define INC1010 1011 -#define INC1009 1010 -#define INC1008 1009 -#define INC1007 1008 -#define INC1006 1007 -#define INC1005 1006 -#define INC1004 1005 -#define INC1003 1004 -#define INC1002 1003 -#define INC1001 1002 -#define INC1000 1001 -#define INC999 1000 -#define INC998 999 -#define INC997 998 -#define INC996 997 -#define INC995 996 -#define INC994 995 -#define INC993 994 -#define INC992 993 -#define INC991 992 -#define INC990 991 -#define INC989 990 -#define INC988 989 -#define INC987 988 -#define INC986 987 -#define INC985 986 -#define INC984 985 -#define INC983 984 -#define INC982 983 -#define INC981 982 -#define INC980 981 -#define INC979 980 -#define INC978 979 -#define INC977 978 -#define INC976 977 -#define INC975 976 -#define INC974 975 -#define INC973 974 -#define INC972 973 -#define INC971 972 -#define INC970 971 -#define INC969 970 -#define INC968 969 -#define INC967 968 -#define INC966 967 -#define INC965 966 -#define INC964 965 -#define INC963 964 -#define INC962 963 -#define INC961 962 -#define INC960 961 -#define INC959 960 -#define INC958 959 -#define INC957 958 -#define INC956 957 -#define INC955 956 -#define INC954 955 -#define INC953 954 -#define INC952 953 -#define INC951 952 -#define INC950 951 -#define INC949 950 -#define INC948 949 -#define INC947 948 -#define INC946 947 -#define INC945 946 -#define INC944 945 -#define INC943 944 -#define INC942 943 -#define INC941 942 -#define INC940 941 -#define INC939 940 -#define INC938 939 -#define INC937 938 -#define INC936 937 -#define INC935 936 -#define INC934 935 -#define INC933 934 -#define INC932 933 -#define INC931 932 -#define INC930 931 -#define INC929 930 -#define INC928 929 -#define INC927 928 -#define INC926 927 -#define INC925 926 -#define INC924 925 -#define INC923 924 -#define INC922 923 -#define INC921 922 -#define INC920 921 -#define INC919 920 -#define INC918 919 -#define INC917 918 -#define INC916 917 -#define INC915 916 -#define INC914 915 -#define INC913 914 -#define INC912 913 -#define INC911 912 -#define INC910 911 -#define INC909 910 -#define INC908 909 -#define INC907 908 -#define INC906 907 -#define INC905 906 -#define INC904 905 -#define INC903 904 -#define INC902 903 -#define INC901 902 -#define INC900 901 -#define INC899 900 -#define INC898 899 -#define INC897 898 -#define INC896 897 -#define INC895 896 -#define INC894 895 -#define INC893 894 -#define INC892 893 -#define INC891 892 -#define INC890 891 -#define INC889 890 -#define INC888 889 -#define INC887 888 -#define INC886 887 -#define INC885 886 -#define INC884 885 -#define INC883 884 -#define INC882 883 -#define INC881 882 -#define INC880 881 -#define INC879 880 -#define INC878 879 -#define INC877 878 -#define INC876 877 -#define INC875 876 -#define INC874 875 -#define INC873 874 -#define INC872 873 -#define INC871 872 -#define INC870 871 -#define INC869 870 -#define INC868 869 -#define INC867 868 -#define INC866 867 -#define INC865 866 -#define INC864 865 -#define INC863 864 -#define INC862 863 -#define INC861 862 -#define INC860 861 -#define INC859 860 -#define INC858 859 -#define INC857 858 -#define INC856 857 -#define INC855 856 -#define INC854 855 -#define INC853 854 -#define INC852 853 -#define INC851 852 -#define INC850 851 -#define INC849 850 -#define INC848 849 -#define INC847 848 -#define INC846 847 -#define INC845 846 -#define INC844 845 -#define INC843 844 -#define INC842 843 -#define INC841 842 -#define INC840 841 -#define INC839 840 -#define INC838 839 -#define INC837 838 -#define INC836 837 -#define INC835 836 -#define INC834 835 -#define INC833 834 -#define INC832 833 -#define INC831 832 -#define INC830 831 -#define INC829 830 -#define INC828 829 -#define INC827 828 -#define INC826 827 -#define INC825 826 -#define INC824 825 -#define INC823 824 -#define INC822 823 -#define INC821 822 -#define INC820 821 -#define INC819 820 -#define INC818 819 -#define INC817 818 -#define INC816 817 -#define INC815 816 -#define INC814 815 -#define INC813 814 -#define INC812 813 -#define INC811 812 -#define INC810 811 -#define INC809 810 -#define INC808 809 -#define INC807 808 -#define INC806 807 -#define INC805 806 -#define INC804 805 -#define INC803 804 -#define INC802 803 -#define INC801 802 -#define INC800 801 -#define INC799 800 -#define INC798 799 -#define INC797 798 -#define INC796 797 -#define INC795 796 -#define INC794 795 -#define INC793 794 -#define INC792 793 -#define INC791 792 -#define INC790 791 -#define INC789 790 -#define INC788 789 -#define INC787 788 -#define INC786 787 -#define INC785 786 -#define INC784 785 -#define INC783 784 -#define INC782 783 -#define INC781 782 -#define INC780 781 -#define INC779 780 -#define INC778 779 -#define INC777 778 -#define INC776 777 -#define INC775 776 -#define INC774 775 -#define INC773 774 -#define INC772 773 -#define INC771 772 -#define INC770 771 -#define INC769 770 -#define INC768 769 -#define INC767 768 -#define INC766 767 -#define INC765 766 -#define INC764 765 -#define INC763 764 -#define INC762 763 -#define INC761 762 -#define INC760 761 -#define INC759 760 -#define INC758 759 -#define INC757 758 -#define INC756 757 -#define INC755 756 -#define INC754 755 -#define INC753 754 -#define INC752 753 -#define INC751 752 -#define INC750 751 -#define INC749 750 -#define INC748 749 -#define INC747 748 -#define INC746 747 -#define INC745 746 -#define INC744 745 -#define INC743 744 -#define INC742 743 -#define INC741 742 -#define INC740 741 -#define INC739 740 -#define INC738 739 -#define INC737 738 -#define INC736 737 -#define INC735 736 -#define INC734 735 -#define INC733 734 -#define INC732 733 -#define INC731 732 -#define INC730 731 -#define INC729 730 -#define INC728 729 -#define INC727 728 -#define INC726 727 -#define INC725 726 -#define INC724 725 -#define INC723 724 -#define INC722 723 -#define INC721 722 -#define INC720 721 -#define INC719 720 -#define INC718 719 -#define INC717 718 -#define INC716 717 -#define INC715 716 -#define INC714 715 -#define INC713 714 -#define INC712 713 -#define INC711 712 -#define INC710 711 -#define INC709 710 -#define INC708 709 -#define INC707 708 -#define INC706 707 -#define INC705 706 -#define INC704 705 -#define INC703 704 -#define INC702 703 -#define INC701 702 -#define INC700 701 -#define INC699 700 -#define INC698 699 -#define INC697 698 -#define INC696 697 -#define INC695 696 -#define INC694 695 -#define INC693 694 -#define INC692 693 -#define INC691 692 -#define INC690 691 -#define INC689 690 -#define INC688 689 -#define INC687 688 -#define INC686 687 -#define INC685 686 -#define INC684 685 -#define INC683 684 -#define INC682 683 -#define INC681 682 -#define INC680 681 -#define INC679 680 -#define INC678 679 -#define INC677 678 -#define INC676 677 -#define INC675 676 -#define INC674 675 -#define INC673 674 -#define INC672 673 -#define INC671 672 -#define INC670 671 -#define INC669 670 -#define INC668 669 -#define INC667 668 -#define INC666 667 -#define INC665 666 -#define INC664 665 -#define INC663 664 -#define INC662 663 -#define INC661 662 -#define INC660 661 -#define INC659 660 -#define INC658 659 -#define INC657 658 -#define INC656 657 -#define INC655 656 -#define INC654 655 -#define INC653 654 -#define INC652 653 -#define INC651 652 -#define INC650 651 -#define INC649 650 -#define INC648 649 -#define INC647 648 -#define INC646 647 -#define INC645 646 -#define INC644 645 -#define INC643 644 -#define INC642 643 -#define INC641 642 -#define INC640 641 -#define INC639 640 -#define INC638 639 -#define INC637 638 -#define INC636 637 -#define INC635 636 -#define INC634 635 -#define INC633 634 -#define INC632 633 -#define INC631 632 -#define INC630 631 -#define INC629 630 -#define INC628 629 -#define INC627 628 -#define INC626 627 -#define INC625 626 -#define INC624 625 -#define INC623 624 -#define INC622 623 -#define INC621 622 -#define INC620 621 -#define INC619 620 -#define INC618 619 -#define INC617 618 -#define INC616 617 -#define INC615 616 -#define INC614 615 -#define INC613 614 -#define INC612 613 -#define INC611 612 -#define INC610 611 -#define INC609 610 -#define INC608 609 -#define INC607 608 -#define INC606 607 -#define INC605 606 -#define INC604 605 -#define INC603 604 -#define INC602 603 -#define INC601 602 -#define INC600 601 -#define INC599 600 -#define INC598 599 -#define INC597 598 -#define INC596 597 -#define INC595 596 -#define INC594 595 -#define INC593 594 -#define INC592 593 -#define INC591 592 -#define INC590 591 -#define INC589 590 -#define INC588 589 -#define INC587 588 -#define INC586 587 -#define INC585 586 -#define INC584 585 -#define INC583 584 -#define INC582 583 -#define INC581 582 -#define INC580 581 -#define INC579 580 -#define INC578 579 -#define INC577 578 -#define INC576 577 -#define INC575 576 -#define INC574 575 -#define INC573 574 -#define INC572 573 -#define INC571 572 -#define INC570 571 -#define INC569 570 -#define INC568 569 -#define INC567 568 -#define INC566 567 -#define INC565 566 -#define INC564 565 -#define INC563 564 -#define INC562 563 -#define INC561 562 -#define INC560 561 -#define INC559 560 -#define INC558 559 -#define INC557 558 -#define INC556 557 -#define INC555 556 -#define INC554 555 -#define INC553 554 -#define INC552 553 -#define INC551 552 -#define INC550 551 -#define INC549 550 -#define INC548 549 -#define INC547 548 -#define INC546 547 -#define INC545 546 -#define INC544 545 -#define INC543 544 -#define INC542 543 -#define INC541 542 -#define INC540 541 -#define INC539 540 -#define INC538 539 -#define INC537 538 -#define INC536 537 -#define INC535 536 -#define INC534 535 -#define INC533 534 -#define INC532 533 -#define INC531 532 -#define INC530 531 -#define INC529 530 -#define INC528 529 -#define INC527 528 -#define INC526 527 -#define INC525 526 -#define INC524 525 -#define INC523 524 -#define INC522 523 -#define INC521 522 -#define INC520 521 -#define INC519 520 -#define INC518 519 -#define INC517 518 -#define INC516 517 -#define INC515 516 -#define INC514 515 -#define INC513 514 -#define INC512 513 -#define INC511 512 -#define INC510 511 -#define INC509 510 -#define INC508 509 -#define INC507 508 -#define INC506 507 -#define INC505 506 -#define INC504 505 -#define INC503 504 -#define INC502 503 -#define INC501 502 -#define INC500 501 -#define INC499 500 -#define INC498 499 -#define INC497 498 -#define INC496 497 -#define INC495 496 -#define INC494 495 -#define INC493 494 -#define INC492 493 -#define INC491 492 -#define INC490 491 -#define INC489 490 -#define INC488 489 -#define INC487 488 -#define INC486 487 -#define INC485 486 -#define INC484 485 -#define INC483 484 -#define INC482 483 -#define INC481 482 -#define INC480 481 -#define INC479 480 -#define INC478 479 -#define INC477 478 -#define INC476 477 -#define INC475 476 -#define INC474 475 -#define INC473 474 -#define INC472 473 -#define INC471 472 -#define INC470 471 -#define INC469 470 -#define INC468 469 -#define INC467 468 -#define INC466 467 -#define INC465 466 -#define INC464 465 -#define INC463 464 -#define INC462 463 -#define INC461 462 -#define INC460 461 -#define INC459 460 -#define INC458 459 -#define INC457 458 -#define INC456 457 -#define INC455 456 -#define INC454 455 -#define INC453 454 -#define INC452 453 -#define INC451 452 -#define INC450 451 -#define INC449 450 -#define INC448 449 -#define INC447 448 -#define INC446 447 -#define INC445 446 -#define INC444 445 -#define INC443 444 -#define INC442 443 -#define INC441 442 -#define INC440 441 -#define INC439 440 -#define INC438 439 -#define INC437 438 -#define INC436 437 -#define INC435 436 -#define INC434 435 -#define INC433 434 -#define INC432 433 -#define INC431 432 -#define INC430 431 -#define INC429 430 -#define INC428 429 -#define INC427 428 -#define INC426 427 -#define INC425 426 -#define INC424 425 -#define INC423 424 -#define INC422 423 -#define INC421 422 -#define INC420 421 -#define INC419 420 -#define INC418 419 -#define INC417 418 -#define INC416 417 -#define INC415 416 -#define INC414 415 -#define INC413 414 -#define INC412 413 -#define INC411 412 -#define INC410 411 -#define INC409 410 -#define INC408 409 -#define INC407 408 -#define INC406 407 -#define INC405 406 -#define INC404 405 -#define INC403 404 -#define INC402 403 -#define INC401 402 -#define INC400 401 -#define INC399 400 -#define INC398 399 -#define INC397 398 -#define INC396 397 -#define INC395 396 -#define INC394 395 -#define INC393 394 -#define INC392 393 -#define INC391 392 -#define INC390 391 -#define INC389 390 -#define INC388 389 -#define INC387 388 -#define INC386 387 -#define INC385 386 -#define INC384 385 -#define INC383 384 -#define INC382 383 -#define INC381 382 -#define INC380 381 -#define INC379 380 -#define INC378 379 -#define INC377 378 -#define INC376 377 -#define INC375 376 -#define INC374 375 -#define INC373 374 -#define INC372 373 -#define INC371 372 -#define INC370 371 -#define INC369 370 -#define INC368 369 -#define INC367 368 -#define INC366 367 -#define INC365 366 -#define INC364 365 -#define INC363 364 -#define INC362 363 -#define INC361 362 -#define INC360 361 -#define INC359 360 -#define INC358 359 -#define INC357 358 -#define INC356 357 -#define INC355 356 -#define INC354 355 -#define INC353 354 -#define INC352 353 -#define INC351 352 -#define INC350 351 -#define INC349 350 -#define INC348 349 -#define INC347 348 -#define INC346 347 -#define INC345 346 -#define INC344 345 -#define INC343 344 -#define INC342 343 -#define INC341 342 -#define INC340 341 -#define INC339 340 -#define INC338 339 -#define INC337 338 -#define INC336 337 -#define INC335 336 -#define INC334 335 -#define INC333 334 -#define INC332 333 -#define INC331 332 -#define INC330 331 -#define INC329 330 -#define INC328 329 -#define INC327 328 -#define INC326 327 -#define INC325 326 -#define INC324 325 -#define INC323 324 -#define INC322 323 -#define INC321 322 -#define INC320 321 -#define INC319 320 -#define INC318 319 -#define INC317 318 -#define INC316 317 -#define INC315 316 -#define INC314 315 -#define INC313 314 -#define INC312 313 -#define INC311 312 -#define INC310 311 -#define INC309 310 -#define INC308 309 -#define INC307 308 -#define INC306 307 -#define INC305 306 -#define INC304 305 -#define INC303 304 -#define INC302 303 -#define INC301 302 -#define INC300 301 -#define INC299 300 -#define INC298 299 -#define INC297 298 -#define INC296 297 -#define INC295 296 -#define INC294 295 -#define INC293 294 -#define INC292 293 -#define INC291 292 -#define INC290 291 -#define INC289 290 -#define INC288 289 -#define INC287 288 -#define INC286 287 -#define INC285 286 -#define INC284 285 -#define INC283 284 -#define INC282 283 -#define INC281 282 -#define INC280 281 -#define INC279 280 -#define INC278 279 -#define INC277 278 -#define INC276 277 -#define INC275 276 -#define INC274 275 -#define INC273 274 -#define INC272 273 -#define INC271 272 -#define INC270 271 -#define INC269 270 -#define INC268 269 -#define INC267 268 -#define INC266 267 -#define INC265 266 -#define INC264 265 -#define INC263 264 -#define INC262 263 -#define INC261 262 -#define INC260 261 -#define INC259 260 -#define INC258 259 -#define INC257 258 -#define INC256 257 -#define INC255 256 -#define INC254 255 -#define INC253 254 -#define INC252 253 -#define INC251 252 -#define INC250 251 -#define INC249 250 -#define INC248 249 -#define INC247 248 -#define INC246 247 -#define INC245 246 -#define INC244 245 -#define INC243 244 -#define INC242 243 -#define INC241 242 -#define INC240 241 -#define INC239 240 -#define INC238 239 -#define INC237 238 -#define INC236 237 -#define INC235 236 -#define INC234 235 -#define INC233 234 -#define INC232 233 -#define INC231 232 -#define INC230 231 -#define INC229 230 -#define INC228 229 -#define INC227 228 -#define INC226 227 -#define INC225 226 -#define INC224 225 -#define INC223 224 -#define INC222 223 -#define INC221 222 -#define INC220 221 -#define INC219 220 -#define INC218 219 -#define INC217 218 -#define INC216 217 -#define INC215 216 -#define INC214 215 -#define INC213 214 -#define INC212 213 -#define INC211 212 -#define INC210 211 -#define INC209 210 -#define INC208 209 -#define INC207 208 -#define INC206 207 -#define INC205 206 -#define INC204 205 -#define INC203 204 -#define INC202 203 -#define INC201 202 -#define INC200 201 -#define INC199 200 -#define INC198 199 -#define INC197 198 -#define INC196 197 -#define INC195 196 -#define INC194 195 -#define INC193 194 -#define INC192 193 -#define INC191 192 -#define INC190 191 -#define INC189 190 -#define INC188 189 -#define INC187 188 -#define INC186 187 -#define INC185 186 -#define INC184 185 -#define INC183 184 -#define INC182 183 -#define INC181 182 -#define INC180 181 -#define INC179 180 -#define INC178 179 -#define INC177 178 -#define INC176 177 -#define INC175 176 -#define INC174 175 -#define INC173 174 -#define INC172 173 -#define INC171 172 -#define INC170 171 -#define INC169 170 -#define INC168 169 -#define INC167 168 -#define INC166 167 -#define INC165 166 -#define INC164 165 -#define INC163 164 -#define INC162 163 -#define INC161 162 -#define INC160 161 -#define INC159 160 -#define INC158 159 -#define INC157 158 -#define INC156 157 -#define INC155 156 -#define INC154 155 -#define INC153 154 -#define INC152 153 -#define INC151 152 -#define INC150 151 -#define INC149 150 -#define INC148 149 -#define INC147 148 -#define INC146 147 -#define INC145 146 -#define INC144 145 -#define INC143 144 -#define INC142 143 -#define INC141 142 -#define INC140 141 -#define INC139 140 -#define INC138 139 -#define INC137 138 -#define INC136 137 -#define INC135 136 -#define INC134 135 -#define INC133 134 -#define INC132 133 -#define INC131 132 -#define INC130 131 -#define INC129 130 -#define INC128 129 -#define INC127 128 -#define INC126 127 -#define INC125 126 -#define INC124 125 -#define INC123 124 -#define INC122 123 -#define INC121 122 -#define INC120 121 -#define INC119 120 -#define INC118 119 -#define INC117 118 -#define INC116 117 -#define INC115 116 -#define INC114 115 -#define INC113 114 -#define INC112 113 -#define INC111 112 -#define INC110 111 -#define INC109 110 -#define INC108 109 -#define INC107 108 -#define INC106 107 -#define INC105 106 -#define INC104 105 -#define INC103 104 -#define INC102 103 -#define INC101 102 -#define INC100 101 -#define INC99 100 -#define INC98 99 -#define INC97 98 -#define INC96 97 -#define INC95 96 -#define INC94 95 -#define INC93 94 -#define INC92 93 -#define INC91 92 -#define INC90 91 -#define INC89 90 -#define INC88 89 -#define INC87 88 -#define INC86 87 -#define INC85 86 -#define INC84 85 -#define INC83 84 -#define INC82 83 -#define INC81 82 -#define INC80 81 -#define INC79 80 -#define INC78 79 -#define INC77 78 -#define INC76 77 -#define INC75 76 -#define INC74 75 -#define INC73 74 -#define INC72 73 -#define INC71 72 -#define INC70 71 -#define INC69 70 -#define INC68 69 -#define INC67 68 -#define INC66 67 -#define INC65 66 -#define INC64 65 -#define INC63 64 -#define INC62 63 -#define INC61 62 -#define INC60 61 -#define INC59 60 -#define INC58 59 -#define INC57 58 -#define INC56 57 -#define INC55 56 -#define INC54 55 -#define INC53 54 -#define INC52 53 -#define INC51 52 -#define INC50 51 -#define INC49 50 -#define INC48 49 -#define INC47 48 -#define INC46 47 -#define INC45 46 -#define INC44 45 -#define INC43 44 -#define INC42 43 -#define INC41 42 -#define INC40 41 -#define INC39 40 -#define INC38 39 -#define INC37 38 -#define INC36 37 -#define INC35 36 -#define INC34 35 -#define INC33 34 -#define INC32 33 -#define INC31 32 -#define INC30 31 -#define INC29 30 -#define INC28 29 -#define INC27 28 -#define INC26 27 -#define INC25 26 -#define INC24 25 -#define INC23 24 -#define INC22 23 -#define INC21 22 -#define INC20 21 -#define INC19 20 -#define INC18 19 -#define INC17 18 -#define INC16 17 -#define INC15 16 -#define INC14 15 -#define INC13 14 -#define INC12 13 -#define INC11 12 -#define INC10 11 -#define INC9 10 -#define INC8 9 -#define INC7 8 -#define INC6 7 -#define INC5 6 -#define INC4 5 -#define INC3 4 -#define INC2 3 -#define INC1 2 -#define INC0 1 - -#define DIV2(x) C2(DIV2_,x) - -#define DIV2_1024 512 -#define DIV2_1023 511 -#define DIV2_1022 511 -#define DIV2_1021 510 -#define DIV2_1020 510 -#define DIV2_1019 509 -#define DIV2_1018 509 -#define DIV2_1017 508 -#define DIV2_1016 508 -#define DIV2_1015 507 -#define DIV2_1014 507 -#define DIV2_1013 506 -#define DIV2_1012 506 -#define DIV2_1011 505 -#define DIV2_1010 505 -#define DIV2_1009 504 -#define DIV2_1008 504 -#define DIV2_1007 503 -#define DIV2_1006 503 -#define DIV2_1005 502 -#define DIV2_1004 502 -#define DIV2_1003 501 -#define DIV2_1002 501 -#define DIV2_1001 500 -#define DIV2_1000 500 -#define DIV2_999 499 -#define DIV2_998 499 -#define DIV2_997 498 -#define DIV2_996 498 -#define DIV2_995 497 -#define DIV2_994 497 -#define DIV2_993 496 -#define DIV2_992 496 -#define DIV2_991 495 -#define DIV2_990 495 -#define DIV2_989 494 -#define DIV2_988 494 -#define DIV2_987 493 -#define DIV2_986 493 -#define DIV2_985 492 -#define DIV2_984 492 -#define DIV2_983 491 -#define DIV2_982 491 -#define DIV2_981 490 -#define DIV2_980 490 -#define DIV2_979 489 -#define DIV2_978 489 -#define DIV2_977 488 -#define DIV2_976 488 -#define DIV2_975 487 -#define DIV2_974 487 -#define DIV2_973 486 -#define DIV2_972 486 -#define DIV2_971 485 -#define DIV2_970 485 -#define DIV2_969 484 -#define DIV2_968 484 -#define DIV2_967 483 -#define DIV2_966 483 -#define DIV2_965 482 -#define DIV2_964 482 -#define DIV2_963 481 -#define DIV2_962 481 -#define DIV2_961 480 -#define DIV2_960 480 -#define DIV2_959 479 -#define DIV2_958 479 -#define DIV2_957 478 -#define DIV2_956 478 -#define DIV2_955 477 -#define DIV2_954 477 -#define DIV2_953 476 -#define DIV2_952 476 -#define DIV2_951 475 -#define DIV2_950 475 -#define DIV2_949 474 -#define DIV2_948 474 -#define DIV2_947 473 -#define DIV2_946 473 -#define DIV2_945 472 -#define DIV2_944 472 -#define DIV2_943 471 -#define DIV2_942 471 -#define DIV2_941 470 -#define DIV2_940 470 -#define DIV2_939 469 -#define DIV2_938 469 -#define DIV2_937 468 -#define DIV2_936 468 -#define DIV2_935 467 -#define DIV2_934 467 -#define DIV2_933 466 -#define DIV2_932 466 -#define DIV2_931 465 -#define DIV2_930 465 -#define DIV2_929 464 -#define DIV2_928 464 -#define DIV2_927 463 -#define DIV2_926 463 -#define DIV2_925 462 -#define DIV2_924 462 -#define DIV2_923 461 -#define DIV2_922 461 -#define DIV2_921 460 -#define DIV2_920 460 -#define DIV2_919 459 -#define DIV2_918 459 -#define DIV2_917 458 -#define DIV2_916 458 -#define DIV2_915 457 -#define DIV2_914 457 -#define DIV2_913 456 -#define DIV2_912 456 -#define DIV2_911 455 -#define DIV2_910 455 -#define DIV2_909 454 -#define DIV2_908 454 -#define DIV2_907 453 -#define DIV2_906 453 -#define DIV2_905 452 -#define DIV2_904 452 -#define DIV2_903 451 -#define DIV2_902 451 -#define DIV2_901 450 -#define DIV2_900 450 -#define DIV2_899 449 -#define DIV2_898 449 -#define DIV2_897 448 -#define DIV2_896 448 -#define DIV2_895 447 -#define DIV2_894 447 -#define DIV2_893 446 -#define DIV2_892 446 -#define DIV2_891 445 -#define DIV2_890 445 -#define DIV2_889 444 -#define DIV2_888 444 -#define DIV2_887 443 -#define DIV2_886 443 -#define DIV2_885 442 -#define DIV2_884 442 -#define DIV2_883 441 -#define DIV2_882 441 -#define DIV2_881 440 -#define DIV2_880 440 -#define DIV2_879 439 -#define DIV2_878 439 -#define DIV2_877 438 -#define DIV2_876 438 -#define DIV2_875 437 -#define DIV2_874 437 -#define DIV2_873 436 -#define DIV2_872 436 -#define DIV2_871 435 -#define DIV2_870 435 -#define DIV2_869 434 -#define DIV2_868 434 -#define DIV2_867 433 -#define DIV2_866 433 -#define DIV2_865 432 -#define DIV2_864 432 -#define DIV2_863 431 -#define DIV2_862 431 -#define DIV2_861 430 -#define DIV2_860 430 -#define DIV2_859 429 -#define DIV2_858 429 -#define DIV2_857 428 -#define DIV2_856 428 -#define DIV2_855 427 -#define DIV2_854 427 -#define DIV2_853 426 -#define DIV2_852 426 -#define DIV2_851 425 -#define DIV2_850 425 -#define DIV2_849 424 -#define DIV2_848 424 -#define DIV2_847 423 -#define DIV2_846 423 -#define DIV2_845 422 -#define DIV2_844 422 -#define DIV2_843 421 -#define DIV2_842 421 -#define DIV2_841 420 -#define DIV2_840 420 -#define DIV2_839 419 -#define DIV2_838 419 -#define DIV2_837 418 -#define DIV2_836 418 -#define DIV2_835 417 -#define DIV2_834 417 -#define DIV2_833 416 -#define DIV2_832 416 -#define DIV2_831 415 -#define DIV2_830 415 -#define DIV2_829 414 -#define DIV2_828 414 -#define DIV2_827 413 -#define DIV2_826 413 -#define DIV2_825 412 -#define DIV2_824 412 -#define DIV2_823 411 -#define DIV2_822 411 -#define DIV2_821 410 -#define DIV2_820 410 -#define DIV2_819 409 -#define DIV2_818 409 -#define DIV2_817 408 -#define DIV2_816 408 -#define DIV2_815 407 -#define DIV2_814 407 -#define DIV2_813 406 -#define DIV2_812 406 -#define DIV2_811 405 -#define DIV2_810 405 -#define DIV2_809 404 -#define DIV2_808 404 -#define DIV2_807 403 -#define DIV2_806 403 -#define DIV2_805 402 -#define DIV2_804 402 -#define DIV2_803 401 -#define DIV2_802 401 -#define DIV2_801 400 -#define DIV2_800 400 -#define DIV2_799 399 -#define DIV2_798 399 -#define DIV2_797 398 -#define DIV2_796 398 -#define DIV2_795 397 -#define DIV2_794 397 -#define DIV2_793 396 -#define DIV2_792 396 -#define DIV2_791 395 -#define DIV2_790 395 -#define DIV2_789 394 -#define DIV2_788 394 -#define DIV2_787 393 -#define DIV2_786 393 -#define DIV2_785 392 -#define DIV2_784 392 -#define DIV2_783 391 -#define DIV2_782 391 -#define DIV2_781 390 -#define DIV2_780 390 -#define DIV2_779 389 -#define DIV2_778 389 -#define DIV2_777 388 -#define DIV2_776 388 -#define DIV2_775 387 -#define DIV2_774 387 -#define DIV2_773 386 -#define DIV2_772 386 -#define DIV2_771 385 -#define DIV2_770 385 -#define DIV2_769 384 -#define DIV2_768 384 -#define DIV2_767 383 -#define DIV2_766 383 -#define DIV2_765 382 -#define DIV2_764 382 -#define DIV2_763 381 -#define DIV2_762 381 -#define DIV2_761 380 -#define DIV2_760 380 -#define DIV2_759 379 -#define DIV2_758 379 -#define DIV2_757 378 -#define DIV2_756 378 -#define DIV2_755 377 -#define DIV2_754 377 -#define DIV2_753 376 -#define DIV2_752 376 -#define DIV2_751 375 -#define DIV2_750 375 -#define DIV2_749 374 -#define DIV2_748 374 -#define DIV2_747 373 -#define DIV2_746 373 -#define DIV2_745 372 -#define DIV2_744 372 -#define DIV2_743 371 -#define DIV2_742 371 -#define DIV2_741 370 -#define DIV2_740 370 -#define DIV2_739 369 -#define DIV2_738 369 -#define DIV2_737 368 -#define DIV2_736 368 -#define DIV2_735 367 -#define DIV2_734 367 -#define DIV2_733 366 -#define DIV2_732 366 -#define DIV2_731 365 -#define DIV2_730 365 -#define DIV2_729 364 -#define DIV2_728 364 -#define DIV2_727 363 -#define DIV2_726 363 -#define DIV2_725 362 -#define DIV2_724 362 -#define DIV2_723 361 -#define DIV2_722 361 -#define DIV2_721 360 -#define DIV2_720 360 -#define DIV2_719 359 -#define DIV2_718 359 -#define DIV2_717 358 -#define DIV2_716 358 -#define DIV2_715 357 -#define DIV2_714 357 -#define DIV2_713 356 -#define DIV2_712 356 -#define DIV2_711 355 -#define DIV2_710 355 -#define DIV2_709 354 -#define DIV2_708 354 -#define DIV2_707 353 -#define DIV2_706 353 -#define DIV2_705 352 -#define DIV2_704 352 -#define DIV2_703 351 -#define DIV2_702 351 -#define DIV2_701 350 -#define DIV2_700 350 -#define DIV2_699 349 -#define DIV2_698 349 -#define DIV2_697 348 -#define DIV2_696 348 -#define DIV2_695 347 -#define DIV2_694 347 -#define DIV2_693 346 -#define DIV2_692 346 -#define DIV2_691 345 -#define DIV2_690 345 -#define DIV2_689 344 -#define DIV2_688 344 -#define DIV2_687 343 -#define DIV2_686 343 -#define DIV2_685 342 -#define DIV2_684 342 -#define DIV2_683 341 -#define DIV2_682 341 -#define DIV2_681 340 -#define DIV2_680 340 -#define DIV2_679 339 -#define DIV2_678 339 -#define DIV2_677 338 -#define DIV2_676 338 -#define DIV2_675 337 -#define DIV2_674 337 -#define DIV2_673 336 -#define DIV2_672 336 -#define DIV2_671 335 -#define DIV2_670 335 -#define DIV2_669 334 -#define DIV2_668 334 -#define DIV2_667 333 -#define DIV2_666 333 -#define DIV2_665 332 -#define DIV2_664 332 -#define DIV2_663 331 -#define DIV2_662 331 -#define DIV2_661 330 -#define DIV2_660 330 -#define DIV2_659 329 -#define DIV2_658 329 -#define DIV2_657 328 -#define DIV2_656 328 -#define DIV2_655 327 -#define DIV2_654 327 -#define DIV2_653 326 -#define DIV2_652 326 -#define DIV2_651 325 -#define DIV2_650 325 -#define DIV2_649 324 -#define DIV2_648 324 -#define DIV2_647 323 -#define DIV2_646 323 -#define DIV2_645 322 -#define DIV2_644 322 -#define DIV2_643 321 -#define DIV2_642 321 -#define DIV2_641 320 -#define DIV2_640 320 -#define DIV2_639 319 -#define DIV2_638 319 -#define DIV2_637 318 -#define DIV2_636 318 -#define DIV2_635 317 -#define DIV2_634 317 -#define DIV2_633 316 -#define DIV2_632 316 -#define DIV2_631 315 -#define DIV2_630 315 -#define DIV2_629 314 -#define DIV2_628 314 -#define DIV2_627 313 -#define DIV2_626 313 -#define DIV2_625 312 -#define DIV2_624 312 -#define DIV2_623 311 -#define DIV2_622 311 -#define DIV2_621 310 -#define DIV2_620 310 -#define DIV2_619 309 -#define DIV2_618 309 -#define DIV2_617 308 -#define DIV2_616 308 -#define DIV2_615 307 -#define DIV2_614 307 -#define DIV2_613 306 -#define DIV2_612 306 -#define DIV2_611 305 -#define DIV2_610 305 -#define DIV2_609 304 -#define DIV2_608 304 -#define DIV2_607 303 -#define DIV2_606 303 -#define DIV2_605 302 -#define DIV2_604 302 -#define DIV2_603 301 -#define DIV2_602 301 -#define DIV2_601 300 -#define DIV2_600 300 -#define DIV2_599 299 -#define DIV2_598 299 -#define DIV2_597 298 -#define DIV2_596 298 -#define DIV2_595 297 -#define DIV2_594 297 -#define DIV2_593 296 -#define DIV2_592 296 -#define DIV2_591 295 -#define DIV2_590 295 -#define DIV2_589 294 -#define DIV2_588 294 -#define DIV2_587 293 -#define DIV2_586 293 -#define DIV2_585 292 -#define DIV2_584 292 -#define DIV2_583 291 -#define DIV2_582 291 -#define DIV2_581 290 -#define DIV2_580 290 -#define DIV2_579 289 -#define DIV2_578 289 -#define DIV2_577 288 -#define DIV2_576 288 -#define DIV2_575 287 -#define DIV2_574 287 -#define DIV2_573 286 -#define DIV2_572 286 -#define DIV2_571 285 -#define DIV2_570 285 -#define DIV2_569 284 -#define DIV2_568 284 -#define DIV2_567 283 -#define DIV2_566 283 -#define DIV2_565 282 -#define DIV2_564 282 -#define DIV2_563 281 -#define DIV2_562 281 -#define DIV2_561 280 -#define DIV2_560 280 -#define DIV2_559 279 -#define DIV2_558 279 -#define DIV2_557 278 -#define DIV2_556 278 -#define DIV2_555 277 -#define DIV2_554 277 -#define DIV2_553 276 -#define DIV2_552 276 -#define DIV2_551 275 -#define DIV2_550 275 -#define DIV2_549 274 -#define DIV2_548 274 -#define DIV2_547 273 -#define DIV2_546 273 -#define DIV2_545 272 -#define DIV2_544 272 -#define DIV2_543 271 -#define DIV2_542 271 -#define DIV2_541 270 -#define DIV2_540 270 -#define DIV2_539 269 -#define DIV2_538 269 -#define DIV2_537 268 -#define DIV2_536 268 -#define DIV2_535 267 -#define DIV2_534 267 -#define DIV2_533 266 -#define DIV2_532 266 -#define DIV2_531 265 -#define DIV2_530 265 -#define DIV2_529 264 -#define DIV2_528 264 -#define DIV2_527 263 -#define DIV2_526 263 -#define DIV2_525 262 -#define DIV2_524 262 -#define DIV2_523 261 -#define DIV2_522 261 -#define DIV2_521 260 -#define DIV2_520 260 -#define DIV2_519 259 -#define DIV2_518 259 -#define DIV2_517 258 -#define DIV2_516 258 -#define DIV2_515 257 -#define DIV2_514 257 -#define DIV2_513 256 -#define DIV2_512 256 -#define DIV2_511 255 -#define DIV2_510 255 -#define DIV2_509 254 -#define DIV2_508 254 -#define DIV2_507 253 -#define DIV2_506 253 -#define DIV2_505 252 -#define DIV2_504 252 -#define DIV2_503 251 -#define DIV2_502 251 -#define DIV2_501 250 -#define DIV2_500 250 -#define DIV2_499 249 -#define DIV2_498 249 -#define DIV2_497 248 -#define DIV2_496 248 -#define DIV2_495 247 -#define DIV2_494 247 -#define DIV2_493 246 -#define DIV2_492 246 -#define DIV2_491 245 -#define DIV2_490 245 -#define DIV2_489 244 -#define DIV2_488 244 -#define DIV2_487 243 -#define DIV2_486 243 -#define DIV2_485 242 -#define DIV2_484 242 -#define DIV2_483 241 -#define DIV2_482 241 -#define DIV2_481 240 -#define DIV2_480 240 -#define DIV2_479 239 -#define DIV2_478 239 -#define DIV2_477 238 -#define DIV2_476 238 -#define DIV2_475 237 -#define DIV2_474 237 -#define DIV2_473 236 -#define DIV2_472 236 -#define DIV2_471 235 -#define DIV2_470 235 -#define DIV2_469 234 -#define DIV2_468 234 -#define DIV2_467 233 -#define DIV2_466 233 -#define DIV2_465 232 -#define DIV2_464 232 -#define DIV2_463 231 -#define DIV2_462 231 -#define DIV2_461 230 -#define DIV2_460 230 -#define DIV2_459 229 -#define DIV2_458 229 -#define DIV2_457 228 -#define DIV2_456 228 -#define DIV2_455 227 -#define DIV2_454 227 -#define DIV2_453 226 -#define DIV2_452 226 -#define DIV2_451 225 -#define DIV2_450 225 -#define DIV2_449 224 -#define DIV2_448 224 -#define DIV2_447 223 -#define DIV2_446 223 -#define DIV2_445 222 -#define DIV2_444 222 -#define DIV2_443 221 -#define DIV2_442 221 -#define DIV2_441 220 -#define DIV2_440 220 -#define DIV2_439 219 -#define DIV2_438 219 -#define DIV2_437 218 -#define DIV2_436 218 -#define DIV2_435 217 -#define DIV2_434 217 -#define DIV2_433 216 -#define DIV2_432 216 -#define DIV2_431 215 -#define DIV2_430 215 -#define DIV2_429 214 -#define DIV2_428 214 -#define DIV2_427 213 -#define DIV2_426 213 -#define DIV2_425 212 -#define DIV2_424 212 -#define DIV2_423 211 -#define DIV2_422 211 -#define DIV2_421 210 -#define DIV2_420 210 -#define DIV2_419 209 -#define DIV2_418 209 -#define DIV2_417 208 -#define DIV2_416 208 -#define DIV2_415 207 -#define DIV2_414 207 -#define DIV2_413 206 -#define DIV2_412 206 -#define DIV2_411 205 -#define DIV2_410 205 -#define DIV2_409 204 -#define DIV2_408 204 -#define DIV2_407 203 -#define DIV2_406 203 -#define DIV2_405 202 -#define DIV2_404 202 -#define DIV2_403 201 -#define DIV2_402 201 -#define DIV2_401 200 -#define DIV2_400 200 -#define DIV2_399 199 -#define DIV2_398 199 -#define DIV2_397 198 -#define DIV2_396 198 -#define DIV2_395 197 -#define DIV2_394 197 -#define DIV2_393 196 -#define DIV2_392 196 -#define DIV2_391 195 -#define DIV2_390 195 -#define DIV2_389 194 -#define DIV2_388 194 -#define DIV2_387 193 -#define DIV2_386 193 -#define DIV2_385 192 -#define DIV2_384 192 -#define DIV2_383 191 -#define DIV2_382 191 -#define DIV2_381 190 -#define DIV2_380 190 -#define DIV2_379 189 -#define DIV2_378 189 -#define DIV2_377 188 -#define DIV2_376 188 -#define DIV2_375 187 -#define DIV2_374 187 -#define DIV2_373 186 -#define DIV2_372 186 -#define DIV2_371 185 -#define DIV2_370 185 -#define DIV2_369 184 -#define DIV2_368 184 -#define DIV2_367 183 -#define DIV2_366 183 -#define DIV2_365 182 -#define DIV2_364 182 -#define DIV2_363 181 -#define DIV2_362 181 -#define DIV2_361 180 -#define DIV2_360 180 -#define DIV2_359 179 -#define DIV2_358 179 -#define DIV2_357 178 -#define DIV2_356 178 -#define DIV2_355 177 -#define DIV2_354 177 -#define DIV2_353 176 -#define DIV2_352 176 -#define DIV2_351 175 -#define DIV2_350 175 -#define DIV2_349 174 -#define DIV2_348 174 -#define DIV2_347 173 -#define DIV2_346 173 -#define DIV2_345 172 -#define DIV2_344 172 -#define DIV2_343 171 -#define DIV2_342 171 -#define DIV2_341 170 -#define DIV2_340 170 -#define DIV2_339 169 -#define DIV2_338 169 -#define DIV2_337 168 -#define DIV2_336 168 -#define DIV2_335 167 -#define DIV2_334 167 -#define DIV2_333 166 -#define DIV2_332 166 -#define DIV2_331 165 -#define DIV2_330 165 -#define DIV2_329 164 -#define DIV2_328 164 -#define DIV2_327 163 -#define DIV2_326 163 -#define DIV2_325 162 -#define DIV2_324 162 -#define DIV2_323 161 -#define DIV2_322 161 -#define DIV2_321 160 -#define DIV2_320 160 -#define DIV2_319 159 -#define DIV2_318 159 -#define DIV2_317 158 -#define DIV2_316 158 -#define DIV2_315 157 -#define DIV2_314 157 -#define DIV2_313 156 -#define DIV2_312 156 -#define DIV2_311 155 -#define DIV2_310 155 -#define DIV2_309 154 -#define DIV2_308 154 -#define DIV2_307 153 -#define DIV2_306 153 -#define DIV2_305 152 -#define DIV2_304 152 -#define DIV2_303 151 -#define DIV2_302 151 -#define DIV2_301 150 -#define DIV2_300 150 -#define DIV2_299 149 -#define DIV2_298 149 -#define DIV2_297 148 -#define DIV2_296 148 -#define DIV2_295 147 -#define DIV2_294 147 -#define DIV2_293 146 -#define DIV2_292 146 -#define DIV2_291 145 -#define DIV2_290 145 -#define DIV2_289 144 -#define DIV2_288 144 -#define DIV2_287 143 -#define DIV2_286 143 -#define DIV2_285 142 -#define DIV2_284 142 -#define DIV2_283 141 -#define DIV2_282 141 -#define DIV2_281 140 -#define DIV2_280 140 -#define DIV2_279 139 -#define DIV2_278 139 -#define DIV2_277 138 -#define DIV2_276 138 -#define DIV2_275 137 -#define DIV2_274 137 -#define DIV2_273 136 -#define DIV2_272 136 -#define DIV2_271 135 -#define DIV2_270 135 -#define DIV2_269 134 -#define DIV2_268 134 -#define DIV2_267 133 -#define DIV2_266 133 -#define DIV2_265 132 -#define DIV2_264 132 -#define DIV2_263 131 -#define DIV2_262 131 -#define DIV2_261 130 -#define DIV2_260 130 -#define DIV2_259 129 -#define DIV2_258 129 -#define DIV2_257 128 -#define DIV2_256 128 -#define DIV2_255 127 -#define DIV2_254 127 -#define DIV2_253 126 -#define DIV2_252 126 -#define DIV2_251 125 -#define DIV2_250 125 -#define DIV2_249 124 -#define DIV2_248 124 -#define DIV2_247 123 -#define DIV2_246 123 -#define DIV2_245 122 -#define DIV2_244 122 -#define DIV2_243 121 -#define DIV2_242 121 -#define DIV2_241 120 -#define DIV2_240 120 -#define DIV2_239 119 -#define DIV2_238 119 -#define DIV2_237 118 -#define DIV2_236 118 -#define DIV2_235 117 -#define DIV2_234 117 -#define DIV2_233 116 -#define DIV2_232 116 -#define DIV2_231 115 -#define DIV2_230 115 -#define DIV2_229 114 -#define DIV2_228 114 -#define DIV2_227 113 -#define DIV2_226 113 -#define DIV2_225 112 -#define DIV2_224 112 -#define DIV2_223 111 -#define DIV2_222 111 -#define DIV2_221 110 -#define DIV2_220 110 -#define DIV2_219 109 -#define DIV2_218 109 -#define DIV2_217 108 -#define DIV2_216 108 -#define DIV2_215 107 -#define DIV2_214 107 -#define DIV2_213 106 -#define DIV2_212 106 -#define DIV2_211 105 -#define DIV2_210 105 -#define DIV2_209 104 -#define DIV2_208 104 -#define DIV2_207 103 -#define DIV2_206 103 -#define DIV2_205 102 -#define DIV2_204 102 -#define DIV2_203 101 -#define DIV2_202 101 -#define DIV2_201 100 -#define DIV2_200 100 -#define DIV2_199 99 -#define DIV2_198 99 -#define DIV2_197 98 -#define DIV2_196 98 -#define DIV2_195 97 -#define DIV2_194 97 -#define DIV2_193 96 -#define DIV2_192 96 -#define DIV2_191 95 -#define DIV2_190 95 -#define DIV2_189 94 -#define DIV2_188 94 -#define DIV2_187 93 -#define DIV2_186 93 -#define DIV2_185 92 -#define DIV2_184 92 -#define DIV2_183 91 -#define DIV2_182 91 -#define DIV2_181 90 -#define DIV2_180 90 -#define DIV2_179 89 -#define DIV2_178 89 -#define DIV2_177 88 -#define DIV2_176 88 -#define DIV2_175 87 -#define DIV2_174 87 -#define DIV2_173 86 -#define DIV2_172 86 -#define DIV2_171 85 -#define DIV2_170 85 -#define DIV2_169 84 -#define DIV2_168 84 -#define DIV2_167 83 -#define DIV2_166 83 -#define DIV2_165 82 -#define DIV2_164 82 -#define DIV2_163 81 -#define DIV2_162 81 -#define DIV2_161 80 -#define DIV2_160 80 -#define DIV2_159 79 -#define DIV2_158 79 -#define DIV2_157 78 -#define DIV2_156 78 -#define DIV2_155 77 -#define DIV2_154 77 -#define DIV2_153 76 -#define DIV2_152 76 -#define DIV2_151 75 -#define DIV2_150 75 -#define DIV2_149 74 -#define DIV2_148 74 -#define DIV2_147 73 -#define DIV2_146 73 -#define DIV2_145 72 -#define DIV2_144 72 -#define DIV2_143 71 -#define DIV2_142 71 -#define DIV2_141 70 -#define DIV2_140 70 -#define DIV2_139 69 -#define DIV2_138 69 -#define DIV2_137 68 -#define DIV2_136 68 -#define DIV2_135 67 -#define DIV2_134 67 -#define DIV2_133 66 -#define DIV2_132 66 -#define DIV2_131 65 -#define DIV2_130 65 -#define DIV2_129 64 -#define DIV2_128 64 -#define DIV2_127 63 -#define DIV2_126 63 -#define DIV2_125 62 -#define DIV2_124 62 -#define DIV2_123 61 -#define DIV2_122 61 -#define DIV2_121 60 -#define DIV2_120 60 -#define DIV2_119 59 -#define DIV2_118 59 -#define DIV2_117 58 -#define DIV2_116 58 -#define DIV2_115 57 -#define DIV2_114 57 -#define DIV2_113 56 -#define DIV2_112 56 -#define DIV2_111 55 -#define DIV2_110 55 -#define DIV2_109 54 -#define DIV2_108 54 -#define DIV2_107 53 -#define DIV2_106 53 -#define DIV2_105 52 -#define DIV2_104 52 -#define DIV2_103 51 -#define DIV2_102 51 -#define DIV2_101 50 -#define DIV2_100 50 -#define DIV2_99 49 -#define DIV2_98 49 -#define DIV2_97 48 -#define DIV2_96 48 -#define DIV2_95 47 -#define DIV2_94 47 -#define DIV2_93 46 -#define DIV2_92 46 -#define DIV2_91 45 -#define DIV2_90 45 -#define DIV2_89 44 -#define DIV2_88 44 -#define DIV2_87 43 -#define DIV2_86 43 -#define DIV2_85 42 -#define DIV2_84 42 -#define DIV2_83 41 -#define DIV2_82 41 -#define DIV2_81 40 -#define DIV2_80 40 -#define DIV2_79 39 -#define DIV2_78 39 -#define DIV2_77 38 -#define DIV2_76 38 -#define DIV2_75 37 -#define DIV2_74 37 -#define DIV2_73 36 -#define DIV2_72 36 -#define DIV2_71 35 -#define DIV2_70 35 -#define DIV2_69 34 -#define DIV2_68 34 -#define DIV2_67 33 -#define DIV2_66 33 -#define DIV2_65 32 -#define DIV2_64 32 -#define DIV2_63 31 -#define DIV2_62 31 -#define DIV2_61 30 -#define DIV2_60 30 -#define DIV2_59 29 -#define DIV2_58 29 -#define DIV2_57 28 -#define DIV2_56 28 -#define DIV2_55 27 -#define DIV2_54 27 -#define DIV2_53 26 -#define DIV2_52 26 -#define DIV2_51 25 -#define DIV2_50 25 -#define DIV2_49 24 -#define DIV2_48 24 -#define DIV2_47 23 -#define DIV2_46 23 -#define DIV2_45 22 -#define DIV2_44 22 -#define DIV2_43 21 -#define DIV2_42 21 -#define DIV2_41 20 -#define DIV2_40 20 -#define DIV2_39 19 -#define DIV2_38 19 -#define DIV2_37 18 -#define DIV2_36 18 -#define DIV2_35 17 -#define DIV2_34 17 -#define DIV2_33 16 -#define DIV2_32 16 -#define DIV2_31 15 -#define DIV2_30 15 -#define DIV2_29 14 -#define DIV2_28 14 -#define DIV2_27 13 -#define DIV2_26 13 -#define DIV2_25 12 -#define DIV2_24 12 -#define DIV2_23 11 -#define DIV2_22 11 -#define DIV2_21 10 -#define DIV2_20 10 -#define DIV2_19 9 -#define DIV2_18 9 -#define DIV2_17 8 -#define DIV2_16 8 -#define DIV2_15 7 -#define DIV2_14 7 -#define DIV2_13 6 -#define DIV2_12 6 -#define DIV2_11 5 -#define DIV2_10 5 -#define DIV2_9 4 -#define DIV2_8 4 -#define DIV2_7 3 -#define DIV2_6 3 -#define DIV2_5 2 -#define DIV2_4 2 -#define DIV2_3 1 -#define DIV2_2 1 -#define DIV2_1 0 -#define DIV2_0 0 - -#define THE_NTH_ARG(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124, ... ) P124 - -#define _TRIGGER_PARENTHESIS_(...) , - -#ifdef _MSC_VER -#define LPAREN ( -#define COUNT_1_OR_MORE_ARG(...) THE_NTH_ARG LPAREN __VA_ARGS__, \ -123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) -#define MORE_THAN_1_ARG(...) THE_NTH_ARG LPAREN __VA_ARGS__, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0) -#else -#define COUNT_1_OR_MORE_ARG(...) THE_NTH_ARG (__VA_ARGS__, \ -123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) -#define MORE_THAN_1_ARG(...) THE_NTH_ARG(__VA_ARGS__, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0) -#endif - -#define COUNT_ARG(...) C2(COUNT_ARG_, ISEMPTY(__VA_ARGS__))(__VA_ARGS__) -#define COUNT_ARG_1(...) 0 -#define COUNT_ARG_0(...) C1(COUNT_1_OR_MORE_ARG(__VA_ARGS__)) - -#define ISEMPTY(...) C3(DISPTACH_EMPTY_, MORE_THAN_1_ARG(_TRIGGER_PARENTHESIS_ __VA_ARGS__ ()), MORE_THAN_1_ARG(__VA_ARGS__)) -#define DISPTACH_EMPTY_10 1 -#define DISPTACH_EMPTY_00 0 -#define DISPTACH_EMPTY_11 0 - - -#define C2_(x,y) x##y - -#define C2(x,y) C2_(x,y) - -#define C3(x,y,z) C2(x, C2(y,z)) - -#define C4(x,y,z, u) C2(C2(x,y), C2(z,u)) - -#define C5(x,y,z,u, v) C2(C4(x,y, z, u), v) - -#define C1_(x) x - -#define C1(x) C1_(x) - -#define C2STRING(x,y) x y - -#define C3STRING(x,y,z) x y z - -#define C4STRING(x,y,z,u) x y z u - -#define C5STRING(x,y,z,u,v) x y z u v - - -#define FOR_EACH_1_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(P1) \ -FOR_EACH_1_123(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - -#define FOR_EACH_1_123(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \ -X(P1) \ -FOR_EACH_1_122(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) - -#define FOR_EACH_1_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(P1) \ -FOR_EACH_1_121(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - -#define FOR_EACH_1_121(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \ -X(P1) \ -FOR_EACH_1_120(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) - -#define FOR_EACH_1_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(P1) \ -FOR_EACH_1_119(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - -#define FOR_EACH_1_119(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \ -X(P1) \ -FOR_EACH_1_118(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) - -#define FOR_EACH_1_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(P1) \ -FOR_EACH_1_117(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - -#define FOR_EACH_1_117(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \ -X(P1) \ -FOR_EACH_1_116(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) - -#define FOR_EACH_1_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(P1) \ -FOR_EACH_1_115(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - -#define FOR_EACH_1_115(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \ -X(P1) \ -FOR_EACH_1_114(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) - -#define FOR_EACH_1_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(P1) \ -FOR_EACH_1_113(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - -#define FOR_EACH_1_113(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \ -X(P1) \ -FOR_EACH_1_112(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) - -#define FOR_EACH_1_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(P1) \ -FOR_EACH_1_111(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - -#define FOR_EACH_1_111(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \ -X(P1) \ -FOR_EACH_1_110(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) - -#define FOR_EACH_1_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(P1) \ -FOR_EACH_1_109(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - -#define FOR_EACH_1_109(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \ -X(P1) \ -FOR_EACH_1_108(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) - -#define FOR_EACH_1_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(P1) \ -FOR_EACH_1_107(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - -#define FOR_EACH_1_107(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \ -X(P1) \ -FOR_EACH_1_106(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) - -#define FOR_EACH_1_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(P1) \ -FOR_EACH_1_105(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - -#define FOR_EACH_1_105(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \ -X(P1) \ -FOR_EACH_1_104(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) - -#define FOR_EACH_1_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(P1) \ -FOR_EACH_1_103(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - -#define FOR_EACH_1_103(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \ -X(P1) \ -FOR_EACH_1_102(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) - -#define FOR_EACH_1_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(P1) \ -FOR_EACH_1_101(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - -#define FOR_EACH_1_101(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \ -X(P1) \ -FOR_EACH_1_100(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) - -#define FOR_EACH_1_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(P1) \ -FOR_EACH_1_99(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - -#define FOR_EACH_1_99(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \ -X(P1) \ -FOR_EACH_1_98(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) - -#define FOR_EACH_1_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(P1) \ -FOR_EACH_1_97(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - -#define FOR_EACH_1_97(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \ -X(P1) \ -FOR_EACH_1_96(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) - -#define FOR_EACH_1_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(P1) \ -FOR_EACH_1_95(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - -#define FOR_EACH_1_95(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \ -X(P1) \ -FOR_EACH_1_94(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) - -#define FOR_EACH_1_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(P1) \ -FOR_EACH_1_93(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - -#define FOR_EACH_1_93(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \ -X(P1) \ -FOR_EACH_1_92(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) - -#define FOR_EACH_1_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(P1) \ -FOR_EACH_1_91(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - -#define FOR_EACH_1_91(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \ -X(P1) \ -FOR_EACH_1_90(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) - -#define FOR_EACH_1_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(P1) \ -FOR_EACH_1_89(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - -#define FOR_EACH_1_89(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \ -X(P1) \ -FOR_EACH_1_88(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) - -#define FOR_EACH_1_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(P1) \ -FOR_EACH_1_87(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - -#define FOR_EACH_1_87(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \ -X(P1) \ -FOR_EACH_1_86(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) - -#define FOR_EACH_1_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(P1) \ -FOR_EACH_1_85(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - -#define FOR_EACH_1_85(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \ -X(P1) \ -FOR_EACH_1_84(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) - -#define FOR_EACH_1_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(P1) \ -FOR_EACH_1_83(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - -#define FOR_EACH_1_83(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \ -X(P1) \ -FOR_EACH_1_82(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) - -#define FOR_EACH_1_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(P1) \ -FOR_EACH_1_81(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - -#define FOR_EACH_1_81(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \ -X(P1) \ -FOR_EACH_1_80(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) - -#define FOR_EACH_1_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(P1) \ -FOR_EACH_1_79(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - -#define FOR_EACH_1_79(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \ -X(P1) \ -FOR_EACH_1_78(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) - -#define FOR_EACH_1_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(P1) \ -FOR_EACH_1_77(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - -#define FOR_EACH_1_77(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \ -X(P1) \ -FOR_EACH_1_76(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) - -#define FOR_EACH_1_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(P1) \ -FOR_EACH_1_75(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - -#define FOR_EACH_1_75(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \ -X(P1) \ -FOR_EACH_1_74(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) - -#define FOR_EACH_1_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(P1) \ -FOR_EACH_1_73(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - -#define FOR_EACH_1_73(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \ -X(P1) \ -FOR_EACH_1_72(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) - -#define FOR_EACH_1_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(P1) \ -FOR_EACH_1_71(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - -#define FOR_EACH_1_71(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \ -X(P1) \ -FOR_EACH_1_70(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) - -#define FOR_EACH_1_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(P1) \ -FOR_EACH_1_69(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - -#define FOR_EACH_1_69(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \ -X(P1) \ -FOR_EACH_1_68(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) - -#define FOR_EACH_1_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(P1) \ -FOR_EACH_1_67(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - -#define FOR_EACH_1_67(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \ -X(P1) \ -FOR_EACH_1_66(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) - -#define FOR_EACH_1_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(P1) \ -FOR_EACH_1_65(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - -#define FOR_EACH_1_65(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \ -X(P1) \ -FOR_EACH_1_64(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) - -#define FOR_EACH_1_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(P1) \ -FOR_EACH_1_63(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - -#define FOR_EACH_1_63(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \ -X(P1) \ -FOR_EACH_1_62(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) - -#define FOR_EACH_1_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(P1) \ -FOR_EACH_1_61(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - -#define FOR_EACH_1_61(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \ -X(P1) \ -FOR_EACH_1_60(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) - -#define FOR_EACH_1_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(P1) \ -FOR_EACH_1_59(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - -#define FOR_EACH_1_59(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \ -X(P1) \ -FOR_EACH_1_58(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) - -#define FOR_EACH_1_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(P1) \ -FOR_EACH_1_57(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - -#define FOR_EACH_1_57(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \ -X(P1) \ -FOR_EACH_1_56(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) - -#define FOR_EACH_1_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(P1) \ -FOR_EACH_1_55(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - -#define FOR_EACH_1_55(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \ -X(P1) \ -FOR_EACH_1_54(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) - -#define FOR_EACH_1_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(P1) \ -FOR_EACH_1_53(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - -#define FOR_EACH_1_53(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \ -X(P1) \ -FOR_EACH_1_52(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) - -#define FOR_EACH_1_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(P1) \ -FOR_EACH_1_51(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - -#define FOR_EACH_1_51(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \ -X(P1) \ -FOR_EACH_1_50(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) - -#define FOR_EACH_1_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(P1) \ -FOR_EACH_1_49(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - -#define FOR_EACH_1_49(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \ -X(P1) \ -FOR_EACH_1_48(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) - -#define FOR_EACH_1_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(P1) \ -FOR_EACH_1_47(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - -#define FOR_EACH_1_47(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \ -X(P1) \ -FOR_EACH_1_46(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) - -#define FOR_EACH_1_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(P1) \ -FOR_EACH_1_45(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - -#define FOR_EACH_1_45(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \ -X(P1) \ -FOR_EACH_1_44(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) - -#define FOR_EACH_1_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(P1) \ -FOR_EACH_1_43(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - -#define FOR_EACH_1_43(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \ -X(P1) \ -FOR_EACH_1_42(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) - -#define FOR_EACH_1_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(P1) \ -FOR_EACH_1_41(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - -#define FOR_EACH_1_41(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \ -X(P1) \ -FOR_EACH_1_40(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) - -#define FOR_EACH_1_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(P1) \ -FOR_EACH_1_39(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - -#define FOR_EACH_1_39(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \ -X(P1) \ -FOR_EACH_1_38(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) - -#define FOR_EACH_1_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(P1) \ -FOR_EACH_1_37(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - -#define FOR_EACH_1_37(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \ -X(P1) \ -FOR_EACH_1_36(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) - -#define FOR_EACH_1_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(P1) \ -FOR_EACH_1_35(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - -#define FOR_EACH_1_35(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \ -X(P1) \ -FOR_EACH_1_34(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) - -#define FOR_EACH_1_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(P1) \ -FOR_EACH_1_33(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - -#define FOR_EACH_1_33(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \ -X(P1) \ -FOR_EACH_1_32(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) - -#define FOR_EACH_1_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(P1) \ -FOR_EACH_1_31(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - -#define FOR_EACH_1_31(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \ -X(P1) \ -FOR_EACH_1_30(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) - -#define FOR_EACH_1_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(P1) \ -FOR_EACH_1_29(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - -#define FOR_EACH_1_29(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \ -X(P1) \ -FOR_EACH_1_28(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) - -#define FOR_EACH_1_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(P1) \ -FOR_EACH_1_27(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - -#define FOR_EACH_1_27(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \ -X(P1) \ -FOR_EACH_1_26(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) - -#define FOR_EACH_1_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(P1) \ -FOR_EACH_1_25(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - -#define FOR_EACH_1_25(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \ -X(P1) \ -FOR_EACH_1_24(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) - -#define FOR_EACH_1_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(P1) \ -FOR_EACH_1_23(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - -#define FOR_EACH_1_23(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \ -X(P1) \ -FOR_EACH_1_22(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) - -#define FOR_EACH_1_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(P1) \ -FOR_EACH_1_21(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - -#define FOR_EACH_1_21(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \ -X(P1) \ -FOR_EACH_1_20(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) - -#define FOR_EACH_1_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(P1) \ -FOR_EACH_1_19(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - -#define FOR_EACH_1_19(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \ -X(P1) \ -FOR_EACH_1_18(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) - -#define FOR_EACH_1_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(P1) \ -FOR_EACH_1_17(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - -#define FOR_EACH_1_17(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \ -X(P1) \ -FOR_EACH_1_16(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) - -#define FOR_EACH_1_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(P1) \ -FOR_EACH_1_15(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - -#define FOR_EACH_1_15(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \ -X(P1) \ -FOR_EACH_1_14(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) - -#define FOR_EACH_1_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(P1) \ -FOR_EACH_1_13(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - -#define FOR_EACH_1_13(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \ -X(P1) \ -FOR_EACH_1_12(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) - -#define FOR_EACH_1_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(P1) \ -FOR_EACH_1_11(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - -#define FOR_EACH_1_11(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \ -X(P1) \ -FOR_EACH_1_10(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) - -#define FOR_EACH_1_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(P1) \ -FOR_EACH_1_9(X, P2, P3, P4, P5, P6, P7, P8, P9, P10) - -#define FOR_EACH_1_9(X, P1, P2, P3, P4, P5, P6, P7, P8, P9) \ -X(P1) \ -FOR_EACH_1_8(X, P2, P3, P4, P5, P6, P7, P8, P9) - -#define FOR_EACH_1_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(P1) \ -FOR_EACH_1_7(X, P2, P3, P4, P5, P6, P7, P8) - -#define FOR_EACH_1_7(X, P1, P2, P3, P4, P5, P6, P7) \ -X(P1) \ -FOR_EACH_1_6(X, P2, P3, P4, P5, P6, P7) - -#define FOR_EACH_1_6(X, P1, P2, P3, P4, P5, P6) \ -X(P1) \ -FOR_EACH_1_5(X, P2, P3, P4, P5, P6) - -#define FOR_EACH_1_5(X, P1, P2, P3, P4, P5) \ -X(P1) \ -FOR_EACH_1_4(X, P2, P3, P4, P5) - -#define FOR_EACH_1_4(X, P1, P2, P3, P4) \ -X(P1) \ -FOR_EACH_1_3(X, P2, P3, P4) - -#define FOR_EACH_1_3(X, P1, P2, P3) \ -X(P1) \ -FOR_EACH_1_2(X, P2, P3) - -#define FOR_EACH_1_2(X, P1, P2) \ -X(P1) \ -FOR_EACH_1_1(X, P2) - -#define FOR_EACH_1_1(X, P1) \ -X(P1) - -#ifdef _MSC_VER -#define FOR_EACH_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_,C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#else -#define FOR_EACH_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_,C1(COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#endif - -#define FOR_EACH_1_KEEP_1_124(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_123(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#define FOR_EACH_1_KEEP_1_123(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_122(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) - - -#define FOR_EACH_1_KEEP_1_122(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_121(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - - -#define FOR_EACH_1_KEEP_1_121(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_120(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) - - -#define FOR_EACH_1_KEEP_1_120(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_119(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - - -#define FOR_EACH_1_KEEP_1_119(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_118(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) - - -#define FOR_EACH_1_KEEP_1_118(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_117(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - - -#define FOR_EACH_1_KEEP_1_117(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_116(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) - - -#define FOR_EACH_1_KEEP_1_116(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_115(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - - -#define FOR_EACH_1_KEEP_1_115(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_114(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) - - -#define FOR_EACH_1_KEEP_1_114(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_113(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - - -#define FOR_EACH_1_KEEP_1_113(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_112(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) - - -#define FOR_EACH_1_KEEP_1_112(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_111(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - - -#define FOR_EACH_1_KEEP_1_111(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_110(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) - - -#define FOR_EACH_1_KEEP_1_110(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_109(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - - -#define FOR_EACH_1_KEEP_1_109(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_108(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) - - -#define FOR_EACH_1_KEEP_1_108(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_107(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - - -#define FOR_EACH_1_KEEP_1_107(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_106(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) - - -#define FOR_EACH_1_KEEP_1_106(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_105(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - - -#define FOR_EACH_1_KEEP_1_105(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_104(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) - - -#define FOR_EACH_1_KEEP_1_104(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_103(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - - -#define FOR_EACH_1_KEEP_1_103(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_102(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) - - -#define FOR_EACH_1_KEEP_1_102(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_101(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - - -#define FOR_EACH_1_KEEP_1_101(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_100(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) - - -#define FOR_EACH_1_KEEP_1_100(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_99(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - - -#define FOR_EACH_1_KEEP_1_99(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_98(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) - - -#define FOR_EACH_1_KEEP_1_98(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_97(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - - -#define FOR_EACH_1_KEEP_1_97(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_96(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) - - -#define FOR_EACH_1_KEEP_1_96(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_95(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - - -#define FOR_EACH_1_KEEP_1_95(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_94(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) - - -#define FOR_EACH_1_KEEP_1_94(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_93(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - - -#define FOR_EACH_1_KEEP_1_93(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_92(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) - - -#define FOR_EACH_1_KEEP_1_92(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_91(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - - -#define FOR_EACH_1_KEEP_1_91(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_90(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) - - -#define FOR_EACH_1_KEEP_1_90(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_89(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - - -#define FOR_EACH_1_KEEP_1_89(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_88(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) - - -#define FOR_EACH_1_KEEP_1_88(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_87(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - - -#define FOR_EACH_1_KEEP_1_87(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_86(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) - - -#define FOR_EACH_1_KEEP_1_86(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_85(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - - -#define FOR_EACH_1_KEEP_1_85(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_84(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) - - -#define FOR_EACH_1_KEEP_1_84(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_83(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - - -#define FOR_EACH_1_KEEP_1_83(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_82(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) - - -#define FOR_EACH_1_KEEP_1_82(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_81(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - - -#define FOR_EACH_1_KEEP_1_81(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_80(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) - - -#define FOR_EACH_1_KEEP_1_80(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_79(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - - -#define FOR_EACH_1_KEEP_1_79(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_78(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) - - -#define FOR_EACH_1_KEEP_1_78(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_77(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - - -#define FOR_EACH_1_KEEP_1_77(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_76(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) - - -#define FOR_EACH_1_KEEP_1_76(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_75(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - - -#define FOR_EACH_1_KEEP_1_75(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_74(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) - - -#define FOR_EACH_1_KEEP_1_74(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_73(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - - -#define FOR_EACH_1_KEEP_1_73(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_72(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) - - -#define FOR_EACH_1_KEEP_1_72(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_71(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - - -#define FOR_EACH_1_KEEP_1_71(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_70(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) - - -#define FOR_EACH_1_KEEP_1_70(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_69(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - - -#define FOR_EACH_1_KEEP_1_69(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_68(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) - - -#define FOR_EACH_1_KEEP_1_68(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_67(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - - -#define FOR_EACH_1_KEEP_1_67(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_66(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) - - -#define FOR_EACH_1_KEEP_1_66(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_65(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - - -#define FOR_EACH_1_KEEP_1_65(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_64(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) - - -#define FOR_EACH_1_KEEP_1_64(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_63(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - - -#define FOR_EACH_1_KEEP_1_63(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_62(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) - - -#define FOR_EACH_1_KEEP_1_62(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_61(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - - -#define FOR_EACH_1_KEEP_1_61(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_60(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) - - -#define FOR_EACH_1_KEEP_1_60(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_59(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - - -#define FOR_EACH_1_KEEP_1_59(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_58(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) - - -#define FOR_EACH_1_KEEP_1_58(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_57(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - - -#define FOR_EACH_1_KEEP_1_57(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_56(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) - - -#define FOR_EACH_1_KEEP_1_56(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_55(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - - -#define FOR_EACH_1_KEEP_1_55(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_54(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) - - -#define FOR_EACH_1_KEEP_1_54(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_53(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - - -#define FOR_EACH_1_KEEP_1_53(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_52(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) - - -#define FOR_EACH_1_KEEP_1_52(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_51(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - - -#define FOR_EACH_1_KEEP_1_51(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_50(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) - - -#define FOR_EACH_1_KEEP_1_50(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_49(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - - -#define FOR_EACH_1_KEEP_1_49(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_48(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) - - -#define FOR_EACH_1_KEEP_1_48(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_47(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - - -#define FOR_EACH_1_KEEP_1_47(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_46(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) - - -#define FOR_EACH_1_KEEP_1_46(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_45(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - - -#define FOR_EACH_1_KEEP_1_45(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_44(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) - - -#define FOR_EACH_1_KEEP_1_44(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_43(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - - -#define FOR_EACH_1_KEEP_1_43(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_42(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) - - -#define FOR_EACH_1_KEEP_1_42(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_41(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - - -#define FOR_EACH_1_KEEP_1_41(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_40(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) - - -#define FOR_EACH_1_KEEP_1_40(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_39(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - - -#define FOR_EACH_1_KEEP_1_39(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_38(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) - - -#define FOR_EACH_1_KEEP_1_38(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_37(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - - -#define FOR_EACH_1_KEEP_1_37(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_36(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) - - -#define FOR_EACH_1_KEEP_1_36(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_35(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - - -#define FOR_EACH_1_KEEP_1_35(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_34(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) - - -#define FOR_EACH_1_KEEP_1_34(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_33(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - - -#define FOR_EACH_1_KEEP_1_33(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_32(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) - - -#define FOR_EACH_1_KEEP_1_32(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_31(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - - -#define FOR_EACH_1_KEEP_1_31(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_30(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) - - -#define FOR_EACH_1_KEEP_1_30(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_29(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - - -#define FOR_EACH_1_KEEP_1_29(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_28(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) - - -#define FOR_EACH_1_KEEP_1_28(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_27(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - - -#define FOR_EACH_1_KEEP_1_27(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_26(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) - - -#define FOR_EACH_1_KEEP_1_26(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_25(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - - -#define FOR_EACH_1_KEEP_1_25(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_24(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) - - -#define FOR_EACH_1_KEEP_1_24(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_23(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - - -#define FOR_EACH_1_KEEP_1_23(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_22(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) - - -#define FOR_EACH_1_KEEP_1_22(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_21(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - - -#define FOR_EACH_1_KEEP_1_21(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_20(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) - - -#define FOR_EACH_1_KEEP_1_20(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_19(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - - -#define FOR_EACH_1_KEEP_1_19(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_18(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) - - -#define FOR_EACH_1_KEEP_1_18(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_17(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - - -#define FOR_EACH_1_KEEP_1_17(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_16(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) - - -#define FOR_EACH_1_KEEP_1_16(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_15(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - - -#define FOR_EACH_1_KEEP_1_15(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_14(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) - - -#define FOR_EACH_1_KEEP_1_14(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_13(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - - -#define FOR_EACH_1_KEEP_1_13(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_12(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) - - -#define FOR_EACH_1_KEEP_1_12(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_11(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - - -#define FOR_EACH_1_KEEP_1_11(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_10(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) - - -#define FOR_EACH_1_KEEP_1_10(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_9(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10) - - -#define FOR_EACH_1_KEEP_1_9(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_8(X, keep, P2, P3, P4, P5, P6, P7, P8, P9) - - -#define FOR_EACH_1_KEEP_1_8(X, keep, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_7(X, keep, P2, P3, P4, P5, P6, P7, P8) - - -#define FOR_EACH_1_KEEP_1_7(X, keep, P1, P2, P3, P4, P5, P6, P7) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_6(X, keep, P2, P3, P4, P5, P6, P7) - - -#define FOR_EACH_1_KEEP_1_6(X, keep, P1, P2, P3, P4, P5, P6) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_5(X, keep, P2, P3, P4, P5, P6) - - -#define FOR_EACH_1_KEEP_1_5(X, keep, P1, P2, P3, P4, P5) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_4(X, keep, P2, P3, P4, P5) - - -#define FOR_EACH_1_KEEP_1_4(X, keep, P1, P2, P3, P4) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_3(X, keep, P2, P3, P4) - - -#define FOR_EACH_1_KEEP_1_3(X, keep, P1, P2, P3) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_2(X, keep, P2, P3) - - -#define FOR_EACH_1_KEEP_1_2(X, keep, P1, P2) \ -X(keep, P1) \ -FOR_EACH_1_KEEP_1_1(X, keep, P2) - - - -#define FOR_EACH_1_KEEP_1_1(X, keep, P1) \ -X(keep, P1) - -#ifdef _MSC_VER -#define FOR_EACH_1_KEEP_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_KEEP_1_, C2(DEC,C1(COUNT_ARG(__VA_ARGS__)))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#else -#define FOR_EACH_1_KEEP_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_KEEP_1_, C2(DEC,C1(COUNT_ARG(__VA_ARGS__)))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#endif - -#define FOR_EACH_2_KEEP_1_124(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_122(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#define FOR_EACH_2_KEEP_1_122(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_120(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - - -#define FOR_EACH_2_KEEP_1_120(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_118(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - - -#define FOR_EACH_2_KEEP_1_118(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_116(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - - -#define FOR_EACH_2_KEEP_1_116(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_114(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - - -#define FOR_EACH_2_KEEP_1_114(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_112(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - - -#define FOR_EACH_2_KEEP_1_112(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_110(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - - -#define FOR_EACH_2_KEEP_1_110(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_108(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - - -#define FOR_EACH_2_KEEP_1_108(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_106(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - - -#define FOR_EACH_2_KEEP_1_106(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_104(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - - -#define FOR_EACH_2_KEEP_1_104(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_102(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - - -#define FOR_EACH_2_KEEP_1_102(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_100(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - - -#define FOR_EACH_2_KEEP_1_100(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_98(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - - -#define FOR_EACH_2_KEEP_1_98(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_96(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - - -#define FOR_EACH_2_KEEP_1_96(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_94(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - - -#define FOR_EACH_2_KEEP_1_94(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_92(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - - -#define FOR_EACH_2_KEEP_1_92(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_90(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - - -#define FOR_EACH_2_KEEP_1_90(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_88(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - - -#define FOR_EACH_2_KEEP_1_88(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_86(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - - -#define FOR_EACH_2_KEEP_1_86(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_84(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - - -#define FOR_EACH_2_KEEP_1_84(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_82(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - - -#define FOR_EACH_2_KEEP_1_82(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_80(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - - -#define FOR_EACH_2_KEEP_1_80(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_78(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - - -#define FOR_EACH_2_KEEP_1_78(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_76(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - - -#define FOR_EACH_2_KEEP_1_76(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_74(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - - -#define FOR_EACH_2_KEEP_1_74(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_72(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - - -#define FOR_EACH_2_KEEP_1_72(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_70(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - - -#define FOR_EACH_2_KEEP_1_70(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_68(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - - -#define FOR_EACH_2_KEEP_1_68(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_66(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - - -#define FOR_EACH_2_KEEP_1_66(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_64(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - - -#define FOR_EACH_2_KEEP_1_64(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_62(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - - -#define FOR_EACH_2_KEEP_1_62(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_60(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - - -#define FOR_EACH_2_KEEP_1_60(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_58(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - - -#define FOR_EACH_2_KEEP_1_58(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_56(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - - -#define FOR_EACH_2_KEEP_1_56(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_54(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - - -#define FOR_EACH_2_KEEP_1_54(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_52(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - - -#define FOR_EACH_2_KEEP_1_52(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_50(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - - -#define FOR_EACH_2_KEEP_1_50(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_48(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - - -#define FOR_EACH_2_KEEP_1_48(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_46(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - - -#define FOR_EACH_2_KEEP_1_46(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_44(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - - -#define FOR_EACH_2_KEEP_1_44(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_42(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - - -#define FOR_EACH_2_KEEP_1_42(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_40(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - - -#define FOR_EACH_2_KEEP_1_40(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_38(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - - -#define FOR_EACH_2_KEEP_1_38(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_36(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - - -#define FOR_EACH_2_KEEP_1_36(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_34(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - - -#define FOR_EACH_2_KEEP_1_34(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_32(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - - -#define FOR_EACH_2_KEEP_1_32(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_30(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - - -#define FOR_EACH_2_KEEP_1_30(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_28(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - - -#define FOR_EACH_2_KEEP_1_28(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_26(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - - -#define FOR_EACH_2_KEEP_1_26(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_24(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - - -#define FOR_EACH_2_KEEP_1_24(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_22(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - - -#define FOR_EACH_2_KEEP_1_22(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_20(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - - -#define FOR_EACH_2_KEEP_1_20(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_18(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - - -#define FOR_EACH_2_KEEP_1_18(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_16(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - - -#define FOR_EACH_2_KEEP_1_16(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_14(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - - -#define FOR_EACH_2_KEEP_1_14(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_12(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - - -#define FOR_EACH_2_KEEP_1_12(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_10(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - - -#define FOR_EACH_2_KEEP_1_10(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_8(X, keep, P3, P4, P5, P6, P7, P8, P9, P10) - - -#define FOR_EACH_2_KEEP_1_8(X, keep, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_6(X, keep, P3, P4, P5, P6, P7, P8) - - -#define FOR_EACH_2_KEEP_1_6(X, keep, P1, P2, P3, P4, P5, P6) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_4(X, keep, P3, P4, P5, P6) - - -#define FOR_EACH_2_KEEP_1_4(X, keep, P1, P2, P3, P4) \ -X(keep, P1, P2) \ -FOR_EACH_2_KEEP_1_2(X, keep, P3, P4) - - - -#define FOR_EACH_2_KEEP_1_1(...) - -#define FOR_EACH_2_KEEP_1_0(...) - -#define FOR_EACH_2_KEEP_1_2(X, keep, P1, P2) \ - X(keep, P1, P2) \ - -#ifdef _MSC_VER -#define FOR_EACH_2_KEEP_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_KEEP_1_, C2(DEC,C1(COUNT_ARG(__VA_ARGS__)))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#else -#define FOR_EACH_2_KEEP_1(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_KEEP_1_, C2(DEC,C1(COUNT_ARG(__VA_ARGS__)))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#endif - - -#define FOR_EACH_2_KEEP_2_124(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_122(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#define FOR_EACH_2_KEEP_2_122(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_120(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - - -#define FOR_EACH_2_KEEP_2_120(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_118(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - - -#define FOR_EACH_2_KEEP_2_118(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_116(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - - -#define FOR_EACH_2_KEEP_2_116(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_114(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - - -#define FOR_EACH_2_KEEP_2_114(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_112(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - - -#define FOR_EACH_2_KEEP_2_112(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_110(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - - -#define FOR_EACH_2_KEEP_2_110(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_108(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - - -#define FOR_EACH_2_KEEP_2_108(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_106(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - - -#define FOR_EACH_2_KEEP_2_106(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_104(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - - -#define FOR_EACH_2_KEEP_2_104(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_102(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - - -#define FOR_EACH_2_KEEP_2_102(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_100(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - - -#define FOR_EACH_2_KEEP_2_100(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_98(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - - -#define FOR_EACH_2_KEEP_2_98(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_96(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - - -#define FOR_EACH_2_KEEP_2_96(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_94(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - - -#define FOR_EACH_2_KEEP_2_94(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_92(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - - -#define FOR_EACH_2_KEEP_2_92(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_90(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - - -#define FOR_EACH_2_KEEP_2_90(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_88(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - - -#define FOR_EACH_2_KEEP_2_88(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_86(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - - -#define FOR_EACH_2_KEEP_2_86(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_84(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - - -#define FOR_EACH_2_KEEP_2_84(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_82(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - - -#define FOR_EACH_2_KEEP_2_82(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_80(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - - -#define FOR_EACH_2_KEEP_2_80(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_78(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - - -#define FOR_EACH_2_KEEP_2_78(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_76(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - - -#define FOR_EACH_2_KEEP_2_76(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_74(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - - -#define FOR_EACH_2_KEEP_2_74(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_72(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - - -#define FOR_EACH_2_KEEP_2_72(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_70(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - - -#define FOR_EACH_2_KEEP_2_70(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_68(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - - -#define FOR_EACH_2_KEEP_2_68(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_66(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - - -#define FOR_EACH_2_KEEP_2_66(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_64(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - - -#define FOR_EACH_2_KEEP_2_64(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_62(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - - -#define FOR_EACH_2_KEEP_2_62(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_60(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - - -#define FOR_EACH_2_KEEP_2_60(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_58(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - - -#define FOR_EACH_2_KEEP_2_58(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_56(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - - -#define FOR_EACH_2_KEEP_2_56(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_54(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - - -#define FOR_EACH_2_KEEP_2_54(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_52(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - - -#define FOR_EACH_2_KEEP_2_52(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_50(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - - -#define FOR_EACH_2_KEEP_2_50(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_48(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - - -#define FOR_EACH_2_KEEP_2_48(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_46(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - - -#define FOR_EACH_2_KEEP_2_46(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_44(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - - -#define FOR_EACH_2_KEEP_2_44(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_42(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - - -#define FOR_EACH_2_KEEP_2_42(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_40(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - - -#define FOR_EACH_2_KEEP_2_40(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_38(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - - -#define FOR_EACH_2_KEEP_2_38(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_36(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - - -#define FOR_EACH_2_KEEP_2_36(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_34(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - - -#define FOR_EACH_2_KEEP_2_34(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_32(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - - -#define FOR_EACH_2_KEEP_2_32(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_30(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - - -#define FOR_EACH_2_KEEP_2_30(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_28(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - - -#define FOR_EACH_2_KEEP_2_28(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_26(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - - -#define FOR_EACH_2_KEEP_2_26(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_24(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - - -#define FOR_EACH_2_KEEP_2_24(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_22(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - - -#define FOR_EACH_2_KEEP_2_22(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_20(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - - -#define FOR_EACH_2_KEEP_2_20(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_18(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - - -#define FOR_EACH_2_KEEP_2_18(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_16(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - - -#define FOR_EACH_2_KEEP_2_16(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_14(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - - -#define FOR_EACH_2_KEEP_2_14(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_12(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - - -#define FOR_EACH_2_KEEP_2_12(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_10(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - - -#define FOR_EACH_2_KEEP_2_10(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_8(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10) - - -#define FOR_EACH_2_KEEP_2_8(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_6(X, keep1, keep2, P3, P4, P5, P6, P7, P8) - - -#define FOR_EACH_2_KEEP_2_6(X, keep1, keep2, P1, P2, P3, P4, P5, P6) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_4(X, keep1, keep2, P3, P4, P5, P6) - - -#define FOR_EACH_2_KEEP_2_4(X, keep1, keep2, P1, P2, P3, P4) \ -X(keep1, keep2, P1, P2) \ -FOR_EACH_2_KEEP_2_2(X, keep1, keep2, P3, P4) - - - -#define FOR_EACH_2_KEEP_2_1(...) - -#define FOR_EACH_2_KEEP_2_0(...) - -#define FOR_EACH_2_KEEP_2_2(X, keep1, keep2, P1, P2) \ - X(keep1, keep2, P1, P2) \ - -#ifdef _MSC_VER -#define FOR_EACH_2_KEEP_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_KEEP_2_, C2(DEC,C2(DEC,C1(COUNT_ARG(__VA_ARGS__))))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#else -#define FOR_EACH_2_KEEP_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_KEEP_2_, C2(DEC, C2(DEC,C1(COUNT_ARG(__VA_ARGS__))))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#endif - - -#define FOR_EACH_2_0(...) - -#define FOR_EACH_2_2(X, P1, P2) \ -X(P1, P2) - -#define FOR_EACH_2_4(X, P1, P2, P3, P4) \ -X(P1, P2) \ -FOR_EACH_2_2(X, P3, P4) - -#define FOR_EACH_2_6(X, P1, P2, P3, P4, P5, P6) \ -X(P1, P2) \ -FOR_EACH_2_4(X, P3, P4, P5, P6) - -#define FOR_EACH_2_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(P1, P2) \ -FOR_EACH_2_6(X, P3, P4, P5, P6, P7, P8) - -#define FOR_EACH_2_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(P1, P2) \ -FOR_EACH_2_8(X, P3, P4, P5, P6, P7, P8, P9, P10) - -#define FOR_EACH_2_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(P1, P2) \ -FOR_EACH_2_10(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - -#define FOR_EACH_2_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(P1, P2) \ -FOR_EACH_2_12(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - -#define FOR_EACH_2_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(P1, P2) \ -FOR_EACH_2_14(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - -#define FOR_EACH_2_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(P1, P2) \ -FOR_EACH_2_16(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - -#define FOR_EACH_2_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(P1, P2) \ -FOR_EACH_2_18(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - -#define FOR_EACH_2_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(P1, P2) \ -FOR_EACH_2_20(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - -#define FOR_EACH_2_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(P1, P2) \ -FOR_EACH_2_22(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - -#define FOR_EACH_2_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(P1, P2) \ -FOR_EACH_2_24(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - -#define FOR_EACH_2_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(P1, P2) \ -FOR_EACH_2_26(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - -#define FOR_EACH_2_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(P1, P2) \ -FOR_EACH_2_28(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - -#define FOR_EACH_2_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(P1, P2) \ -FOR_EACH_2_30(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - -#define FOR_EACH_2_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(P1, P2) \ -FOR_EACH_2_32(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - -#define FOR_EACH_2_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(P1, P2) \ -FOR_EACH_2_34(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - -#define FOR_EACH_2_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(P1, P2) \ -FOR_EACH_2_36(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - -#define FOR_EACH_2_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(P1, P2) \ -FOR_EACH_2_38(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - -#define FOR_EACH_2_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(P1, P2) \ -FOR_EACH_2_40(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - -#define FOR_EACH_2_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(P1, P2) \ -FOR_EACH_2_42(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - -#define FOR_EACH_2_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(P1, P2) \ -FOR_EACH_2_44(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - -#define FOR_EACH_2_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(P1, P2) \ -FOR_EACH_2_46(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - -#define FOR_EACH_2_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(P1, P2) \ -FOR_EACH_2_48(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - -#define FOR_EACH_2_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(P1, P2) \ -FOR_EACH_2_50(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - -#define FOR_EACH_2_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(P1, P2) \ -FOR_EACH_2_52(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - -#define FOR_EACH_2_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(P1, P2) \ -FOR_EACH_2_54(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - -#define FOR_EACH_2_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(P1, P2) \ -FOR_EACH_2_56(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - -#define FOR_EACH_2_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(P1, P2) \ -FOR_EACH_2_58(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - -#define FOR_EACH_2_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(P1, P2) \ -FOR_EACH_2_60(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - -#define FOR_EACH_2_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(P1, P2) \ -FOR_EACH_2_62(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - -#define FOR_EACH_2_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(P1, P2) \ -FOR_EACH_2_64(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - -#define FOR_EACH_2_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(P1, P2) \ -FOR_EACH_2_66(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - -#define FOR_EACH_2_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(P1, P2) \ -FOR_EACH_2_68(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - -#define FOR_EACH_2_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(P1, P2) \ -FOR_EACH_2_70(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - -#define FOR_EACH_2_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(P1, P2) \ -FOR_EACH_2_72(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - -#define FOR_EACH_2_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(P1, P2) \ -FOR_EACH_2_74(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - -#define FOR_EACH_2_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(P1, P2) \ -FOR_EACH_2_76(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - -#define FOR_EACH_2_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(P1, P2) \ -FOR_EACH_2_78(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - -#define FOR_EACH_2_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(P1, P2) \ -FOR_EACH_2_80(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - -#define FOR_EACH_2_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(P1, P2) \ -FOR_EACH_2_82(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - -#define FOR_EACH_2_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(P1, P2) \ -FOR_EACH_2_84(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - -#define FOR_EACH_2_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(P1, P2) \ -FOR_EACH_2_86(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - -#define FOR_EACH_2_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(P1, P2) \ -FOR_EACH_2_88(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - -#define FOR_EACH_2_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(P1, P2) \ -FOR_EACH_2_90(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - -#define FOR_EACH_2_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(P1, P2) \ -FOR_EACH_2_92(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - -#define FOR_EACH_2_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(P1, P2) \ -FOR_EACH_2_94(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - -#define FOR_EACH_2_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(P1, P2) \ -FOR_EACH_2_96(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - -#define FOR_EACH_2_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(P1, P2) \ -FOR_EACH_2_98(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - -#define FOR_EACH_2_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(P1, P2) \ -FOR_EACH_2_100(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - -#define FOR_EACH_2_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(P1, P2) \ -FOR_EACH_2_102(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - -#define FOR_EACH_2_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(P1, P2) \ -FOR_EACH_2_104(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - -#define FOR_EACH_2_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(P1, P2) \ -FOR_EACH_2_106(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - -#define FOR_EACH_2_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(P1, P2) \ -FOR_EACH_2_108(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - -#define FOR_EACH_2_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(P1, P2) \ -FOR_EACH_2_110(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - -#define FOR_EACH_2_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(P1, P2) \ -FOR_EACH_2_112(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - -#define FOR_EACH_2_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(P1, P2) \ -FOR_EACH_2_114(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - -#define FOR_EACH_2_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(P1, P2) \ -FOR_EACH_2_116(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - -#define FOR_EACH_2_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(P1, P2) \ -FOR_EACH_2_118(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - -#define FOR_EACH_2_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(P1, P2) \ -FOR_EACH_2_120(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - -#define FOR_EACH_2_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(P1, P2) \ -FOR_EACH_2_122(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#define FOR_EACH_1_COUNTED_0(...) - -#define FOR_EACH_1_COUNTED_1(X, P1) \ - X(1, P1) - -#define FOR_EACH_1_COUNTED_2(X, P1, P2) \ -X(2, P1) \ -FOR_EACH_1_COUNTED_1(X, P2) - -#define FOR_EACH_1_COUNTED_3(X, P1, P2, P3) \ -X(3, P1) \ -FOR_EACH_1_COUNTED_2(X, P2, P3) - -#define FOR_EACH_1_COUNTED_4(X, P1, P2, P3, P4) \ -X(4, P1) \ -FOR_EACH_1_COUNTED_3(X, P2, P3, P4) - -#define FOR_EACH_1_COUNTED_5(X, P1, P2, P3, P4, P5) \ -X(5, P1) \ -FOR_EACH_1_COUNTED_4(X, P2, P3, P4, P5) - -#define FOR_EACH_1_COUNTED_6(X, P1, P2, P3, P4, P5, P6) \ -X(6, P1) \ -FOR_EACH_1_COUNTED_5(X, P2, P3, P4, P5, P6) - -#define FOR_EACH_1_COUNTED_7(X, P1, P2, P3, P4, P5, P6, P7) \ -X(7, P1) \ -FOR_EACH_1_COUNTED_6(X, P2, P3, P4, P5, P6, P7) - -#define FOR_EACH_1_COUNTED_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(8, P1) \ -FOR_EACH_1_COUNTED_7(X, P2, P3, P4, P5, P6, P7, P8) - -#define FOR_EACH_1_COUNTED_9(X, P1, P2, P3, P4, P5, P6, P7, P8, P9) \ -X(9, P1) \ -FOR_EACH_1_COUNTED_8(X, P2, P3, P4, P5, P6, P7, P8, P9) - -#define FOR_EACH_1_COUNTED_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(10, P1) \ -FOR_EACH_1_COUNTED_9(X, P2, P3, P4, P5, P6, P7, P8, P9, P10) - -#define FOR_EACH_1_COUNTED_11(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \ -X(11, P1) \ -FOR_EACH_1_COUNTED_10(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) - -#define FOR_EACH_1_COUNTED_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(12, P1) \ -FOR_EACH_1_COUNTED_11(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - -#define FOR_EACH_1_COUNTED_13(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \ -X(13, P1) \ -FOR_EACH_1_COUNTED_12(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) - -#define FOR_EACH_1_COUNTED_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(14, P1) \ -FOR_EACH_1_COUNTED_13(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - -#define FOR_EACH_1_COUNTED_15(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \ -X(15, P1) \ -FOR_EACH_1_COUNTED_14(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) - -#define FOR_EACH_1_COUNTED_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(16, P1) \ -FOR_EACH_1_COUNTED_15(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - -#define FOR_EACH_1_COUNTED_17(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \ -X(17, P1) \ -FOR_EACH_1_COUNTED_16(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) - -#define FOR_EACH_1_COUNTED_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(18, P1) \ -FOR_EACH_1_COUNTED_17(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - -#define FOR_EACH_1_COUNTED_19(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \ -X(19, P1) \ -FOR_EACH_1_COUNTED_18(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) - -#define FOR_EACH_1_COUNTED_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(20, P1) \ -FOR_EACH_1_COUNTED_19(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - -#define FOR_EACH_1_COUNTED_21(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \ -X(21, P1) \ -FOR_EACH_1_COUNTED_20(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) - -#define FOR_EACH_1_COUNTED_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(22, P1) \ -FOR_EACH_1_COUNTED_21(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - -#define FOR_EACH_1_COUNTED_23(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \ -X(23, P1) \ -FOR_EACH_1_COUNTED_22(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) - -#define FOR_EACH_1_COUNTED_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(24, P1) \ -FOR_EACH_1_COUNTED_23(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - -#define FOR_EACH_1_COUNTED_25(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \ -X(25, P1) \ -FOR_EACH_1_COUNTED_24(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) - -#define FOR_EACH_1_COUNTED_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(26, P1) \ -FOR_EACH_1_COUNTED_25(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - -#define FOR_EACH_1_COUNTED_27(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \ -X(27, P1) \ -FOR_EACH_1_COUNTED_26(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) - -#define FOR_EACH_1_COUNTED_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(28, P1) \ -FOR_EACH_1_COUNTED_27(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - -#define FOR_EACH_1_COUNTED_29(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \ -X(29, P1) \ -FOR_EACH_1_COUNTED_28(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) - -#define FOR_EACH_1_COUNTED_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(30, P1) \ -FOR_EACH_1_COUNTED_29(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - -#define FOR_EACH_1_COUNTED_31(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \ -X(31, P1) \ -FOR_EACH_1_COUNTED_30(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) - -#define FOR_EACH_1_COUNTED_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(32, P1) \ -FOR_EACH_1_COUNTED_31(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - -#define FOR_EACH_1_COUNTED_33(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \ -X(33, P1) \ -FOR_EACH_1_COUNTED_32(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) - -#define FOR_EACH_1_COUNTED_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(34, P1) \ -FOR_EACH_1_COUNTED_33(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - -#define FOR_EACH_1_COUNTED_35(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \ -X(35, P1) \ -FOR_EACH_1_COUNTED_34(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) - -#define FOR_EACH_1_COUNTED_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(36, P1) \ -FOR_EACH_1_COUNTED_35(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - -#define FOR_EACH_1_COUNTED_37(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \ -X(37, P1) \ -FOR_EACH_1_COUNTED_36(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) - -#define FOR_EACH_1_COUNTED_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(38, P1) \ -FOR_EACH_1_COUNTED_37(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - -#define FOR_EACH_1_COUNTED_39(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \ -X(39, P1) \ -FOR_EACH_1_COUNTED_38(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) - -#define FOR_EACH_1_COUNTED_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(40, P1) \ -FOR_EACH_1_COUNTED_39(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - -#define FOR_EACH_1_COUNTED_41(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \ -X(41, P1) \ -FOR_EACH_1_COUNTED_40(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) - -#define FOR_EACH_1_COUNTED_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(42, P1) \ -FOR_EACH_1_COUNTED_41(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - -#define FOR_EACH_1_COUNTED_43(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \ -X(43, P1) \ -FOR_EACH_1_COUNTED_42(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) - -#define FOR_EACH_1_COUNTED_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(44, P1) \ -FOR_EACH_1_COUNTED_43(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - -#define FOR_EACH_1_COUNTED_45(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \ -X(45, P1) \ -FOR_EACH_1_COUNTED_44(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) - -#define FOR_EACH_1_COUNTED_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(46, P1) \ -FOR_EACH_1_COUNTED_45(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - -#define FOR_EACH_1_COUNTED_47(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \ -X(47, P1) \ -FOR_EACH_1_COUNTED_46(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) - -#define FOR_EACH_1_COUNTED_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(48, P1) \ -FOR_EACH_1_COUNTED_47(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - -#define FOR_EACH_1_COUNTED_49(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \ -X(49, P1) \ -FOR_EACH_1_COUNTED_48(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) - -#define FOR_EACH_1_COUNTED_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(50, P1) \ -FOR_EACH_1_COUNTED_49(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - -#define FOR_EACH_1_COUNTED_51(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \ -X(51, P1) \ -FOR_EACH_1_COUNTED_50(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) - -#define FOR_EACH_1_COUNTED_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(52, P1) \ -FOR_EACH_1_COUNTED_51(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - -#define FOR_EACH_1_COUNTED_53(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \ -X(53, P1) \ -FOR_EACH_1_COUNTED_52(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) - -#define FOR_EACH_1_COUNTED_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(54, P1) \ -FOR_EACH_1_COUNTED_53(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - -#define FOR_EACH_1_COUNTED_55(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \ -X(55, P1) \ -FOR_EACH_1_COUNTED_54(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) - -#define FOR_EACH_1_COUNTED_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(56, P1) \ -FOR_EACH_1_COUNTED_55(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - -#define FOR_EACH_1_COUNTED_57(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \ -X(57, P1) \ -FOR_EACH_1_COUNTED_56(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) - -#define FOR_EACH_1_COUNTED_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(58, P1) \ -FOR_EACH_1_COUNTED_57(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - -#define FOR_EACH_1_COUNTED_59(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \ -X(59, P1) \ -FOR_EACH_1_COUNTED_58(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) - -#define FOR_EACH_1_COUNTED_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(60, P1) \ -FOR_EACH_1_COUNTED_59(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - -#define FOR_EACH_1_COUNTED_61(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \ -X(61, P1) \ -FOR_EACH_1_COUNTED_60(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) - -#define FOR_EACH_1_COUNTED_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(62, P1) \ -FOR_EACH_1_COUNTED_61(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - -#define FOR_EACH_1_COUNTED_63(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \ -X(63, P1) \ -FOR_EACH_1_COUNTED_62(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) - -#define FOR_EACH_1_COUNTED_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(64, P1) \ -FOR_EACH_1_COUNTED_63(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - -#define FOR_EACH_1_COUNTED_65(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \ -X(65, P1) \ -FOR_EACH_1_COUNTED_64(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) - -#define FOR_EACH_1_COUNTED_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(66, P1) \ -FOR_EACH_1_COUNTED_65(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - -#define FOR_EACH_1_COUNTED_67(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \ -X(67, P1) \ -FOR_EACH_1_COUNTED_66(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) - -#define FOR_EACH_1_COUNTED_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(68, P1) \ -FOR_EACH_1_COUNTED_67(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - -#define FOR_EACH_1_COUNTED_69(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \ -X(69, P1) \ -FOR_EACH_1_COUNTED_68(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) - -#define FOR_EACH_1_COUNTED_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(70, P1) \ -FOR_EACH_1_COUNTED_69(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - -#define FOR_EACH_1_COUNTED_71(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \ -X(71, P1) \ -FOR_EACH_1_COUNTED_70(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) - -#define FOR_EACH_1_COUNTED_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(72, P1) \ -FOR_EACH_1_COUNTED_71(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - -#define FOR_EACH_1_COUNTED_73(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \ -X(73, P1) \ -FOR_EACH_1_COUNTED_72(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) - -#define FOR_EACH_1_COUNTED_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(74, P1) \ -FOR_EACH_1_COUNTED_73(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - -#define FOR_EACH_1_COUNTED_75(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \ -X(75, P1) \ -FOR_EACH_1_COUNTED_74(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) - -#define FOR_EACH_1_COUNTED_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(76, P1) \ -FOR_EACH_1_COUNTED_75(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - -#define FOR_EACH_1_COUNTED_77(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \ -X(77, P1) \ -FOR_EACH_1_COUNTED_76(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) - -#define FOR_EACH_1_COUNTED_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(78, P1) \ -FOR_EACH_1_COUNTED_77(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - -#define FOR_EACH_1_COUNTED_79(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \ -X(79, P1) \ -FOR_EACH_1_COUNTED_78(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) - -#define FOR_EACH_1_COUNTED_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(80, P1) \ -FOR_EACH_1_COUNTED_79(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - -#define FOR_EACH_1_COUNTED_81(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \ -X(81, P1) \ -FOR_EACH_1_COUNTED_80(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) - -#define FOR_EACH_1_COUNTED_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(82, P1) \ -FOR_EACH_1_COUNTED_81(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - -#define FOR_EACH_1_COUNTED_83(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \ -X(83, P1) \ -FOR_EACH_1_COUNTED_82(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) - -#define FOR_EACH_1_COUNTED_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(84, P1) \ -FOR_EACH_1_COUNTED_83(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - -#define FOR_EACH_1_COUNTED_85(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \ -X(85, P1) \ -FOR_EACH_1_COUNTED_84(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) - -#define FOR_EACH_1_COUNTED_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(86, P1) \ -FOR_EACH_1_COUNTED_85(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - -#define FOR_EACH_1_COUNTED_87(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \ -X(87, P1) \ -FOR_EACH_1_COUNTED_86(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) - -#define FOR_EACH_1_COUNTED_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(88, P1) \ -FOR_EACH_1_COUNTED_87(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - -#define FOR_EACH_1_COUNTED_89(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \ -X(89, P1) \ -FOR_EACH_1_COUNTED_88(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) - -#define FOR_EACH_1_COUNTED_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(90, P1) \ -FOR_EACH_1_COUNTED_89(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - -#define FOR_EACH_1_COUNTED_91(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \ -X(91, P1) \ -FOR_EACH_1_COUNTED_90(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) - -#define FOR_EACH_1_COUNTED_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(92, P1) \ -FOR_EACH_1_COUNTED_91(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - -#define FOR_EACH_1_COUNTED_93(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \ -X(93, P1) \ -FOR_EACH_1_COUNTED_92(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) - -#define FOR_EACH_1_COUNTED_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(94, P1) \ -FOR_EACH_1_COUNTED_93(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - -#define FOR_EACH_1_COUNTED_95(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \ -X(95, P1) \ -FOR_EACH_1_COUNTED_94(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) - -#define FOR_EACH_1_COUNTED_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(96, P1) \ -FOR_EACH_1_COUNTED_95(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - -#define FOR_EACH_1_COUNTED_97(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \ -X(97, P1) \ -FOR_EACH_1_COUNTED_96(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) - -#define FOR_EACH_1_COUNTED_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(98, P1) \ -FOR_EACH_1_COUNTED_97(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - -#define FOR_EACH_1_COUNTED_99(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \ -X(99, P1) \ -FOR_EACH_1_COUNTED_98(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) - -#define FOR_EACH_1_COUNTED_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(100, P1) \ -FOR_EACH_1_COUNTED_99(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - -#define FOR_EACH_1_COUNTED_101(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \ -X(101, P1) \ -FOR_EACH_1_COUNTED_100(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) - -#define FOR_EACH_1_COUNTED_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(102, P1) \ -FOR_EACH_1_COUNTED_101(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - -#define FOR_EACH_1_COUNTED_103(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \ -X(103, P1) \ -FOR_EACH_1_COUNTED_102(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) - -#define FOR_EACH_1_COUNTED_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(104, P1) \ -FOR_EACH_1_COUNTED_103(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - -#define FOR_EACH_1_COUNTED_105(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \ -X(105, P1) \ -FOR_EACH_1_COUNTED_104(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) - -#define FOR_EACH_1_COUNTED_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(106, P1) \ -FOR_EACH_1_COUNTED_105(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - -#define FOR_EACH_1_COUNTED_107(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \ -X(107, P1) \ -FOR_EACH_1_COUNTED_106(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) - -#define FOR_EACH_1_COUNTED_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(108, P1) \ -FOR_EACH_1_COUNTED_107(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - -#define FOR_EACH_1_COUNTED_109(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \ -X(109, P1) \ -FOR_EACH_1_COUNTED_108(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) - -#define FOR_EACH_1_COUNTED_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(110, P1) \ -FOR_EACH_1_COUNTED_109(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - -#define FOR_EACH_1_COUNTED_111(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \ -X(111, P1) \ -FOR_EACH_1_COUNTED_110(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) - -#define FOR_EACH_1_COUNTED_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(112, P1) \ -FOR_EACH_1_COUNTED_111(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - -#define FOR_EACH_1_COUNTED_113(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \ -X(113, P1) \ -FOR_EACH_1_COUNTED_112(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) - -#define FOR_EACH_1_COUNTED_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(114, P1) \ -FOR_EACH_1_COUNTED_113(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - -#define FOR_EACH_1_COUNTED_115(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \ -X(115, P1) \ -FOR_EACH_1_COUNTED_114(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) - -#define FOR_EACH_1_COUNTED_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(116, P1) \ -FOR_EACH_1_COUNTED_115(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - -#define FOR_EACH_1_COUNTED_117(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \ -X(117, P1) \ -FOR_EACH_1_COUNTED_116(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) - -#define FOR_EACH_1_COUNTED_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(118, P1) \ -FOR_EACH_1_COUNTED_117(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - -#define FOR_EACH_1_COUNTED_119(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \ -X(119, P1) \ -FOR_EACH_1_COUNTED_118(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) - -#define FOR_EACH_1_COUNTED_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(120, P1) \ -FOR_EACH_1_COUNTED_119(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - -#define FOR_EACH_1_COUNTED_121(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \ -X(121, P1) \ -FOR_EACH_1_COUNTED_120(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) - -#define FOR_EACH_1_COUNTED_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(122, P1) \ -FOR_EACH_1_COUNTED_121(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - -#define FOR_EACH_1_COUNTED_123(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \ -X(123, P1) \ -FOR_EACH_1_COUNTED_122(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) - -#define FOR_EACH_1_COUNTED_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(124, P1) \ -FOR_EACH_1_COUNTED_123(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#define FOR_EACH_2_COUNTED_0(...) - -#define FOR_EACH_2_COUNTED_2(X, P1, P2) \ - X(2, P1, P2) - -#define FOR_EACH_2_COUNTED_4(X, P1, P2, P3, P4) \ -X(4, P1, P2) \ -FOR_EACH_2_COUNTED_2(X, P3, P4) - -#define FOR_EACH_2_COUNTED_6(X, P1, P2, P3, P4, P5, P6) \ -X(6, P1, P2) \ -FOR_EACH_2_COUNTED_4(X, P3, P4, P5, P6) - -#define FOR_EACH_2_COUNTED_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \ -X(8, P1, P2) \ -FOR_EACH_2_COUNTED_6(X, P3, P4, P5, P6, P7, P8) - -#define FOR_EACH_2_COUNTED_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ -X(10, P1, P2) \ -FOR_EACH_2_COUNTED_8(X, P3, P4, P5, P6, P7, P8, P9, P10) - -#define FOR_EACH_2_COUNTED_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ -X(12, P1, P2) \ -FOR_EACH_2_COUNTED_10(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) - -#define FOR_EACH_2_COUNTED_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \ -X(14, P1, P2) \ -FOR_EACH_2_COUNTED_12(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) - -#define FOR_EACH_2_COUNTED_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \ -X(16, P1, P2) \ -FOR_EACH_2_COUNTED_14(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) - -#define FOR_EACH_2_COUNTED_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \ -X(18, P1, P2) \ -FOR_EACH_2_COUNTED_16(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) - -#define FOR_EACH_2_COUNTED_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \ -X(20, P1, P2) \ -FOR_EACH_2_COUNTED_18(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) - -#define FOR_EACH_2_COUNTED_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \ -X(22, P1, P2) \ -FOR_EACH_2_COUNTED_20(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) - -#define FOR_EACH_2_COUNTED_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \ -X(24, P1, P2) \ -FOR_EACH_2_COUNTED_22(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) - -#define FOR_EACH_2_COUNTED_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \ -X(26, P1, P2) \ -FOR_EACH_2_COUNTED_24(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) - -#define FOR_EACH_2_COUNTED_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \ -X(28, P1, P2) \ -FOR_EACH_2_COUNTED_26(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) - -#define FOR_EACH_2_COUNTED_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \ -X(30, P1, P2) \ -FOR_EACH_2_COUNTED_28(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) - -#define FOR_EACH_2_COUNTED_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \ -X(32, P1, P2) \ -FOR_EACH_2_COUNTED_30(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) - -#define FOR_EACH_2_COUNTED_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \ -X(34, P1, P2) \ -FOR_EACH_2_COUNTED_32(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) - -#define FOR_EACH_2_COUNTED_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \ -X(36, P1, P2) \ -FOR_EACH_2_COUNTED_34(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) - -#define FOR_EACH_2_COUNTED_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \ -X(38, P1, P2) \ -FOR_EACH_2_COUNTED_36(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) - -#define FOR_EACH_2_COUNTED_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \ -X(40, P1, P2) \ -FOR_EACH_2_COUNTED_38(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) - -#define FOR_EACH_2_COUNTED_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \ -X(42, P1, P2) \ -FOR_EACH_2_COUNTED_40(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) - -#define FOR_EACH_2_COUNTED_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \ -X(44, P1, P2) \ -FOR_EACH_2_COUNTED_42(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) - -#define FOR_EACH_2_COUNTED_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \ -X(46, P1, P2) \ -FOR_EACH_2_COUNTED_44(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) - -#define FOR_EACH_2_COUNTED_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \ -X(48, P1, P2) \ -FOR_EACH_2_COUNTED_46(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) - -#define FOR_EACH_2_COUNTED_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \ -X(50, P1, P2) \ -FOR_EACH_2_COUNTED_48(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) - -#define FOR_EACH_2_COUNTED_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \ -X(52, P1, P2) \ -FOR_EACH_2_COUNTED_50(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) - -#define FOR_EACH_2_COUNTED_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \ -X(54, P1, P2) \ -FOR_EACH_2_COUNTED_52(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) - -#define FOR_EACH_2_COUNTED_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \ -X(56, P1, P2) \ -FOR_EACH_2_COUNTED_54(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) - -#define FOR_EACH_2_COUNTED_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \ -X(58, P1, P2) \ -FOR_EACH_2_COUNTED_56(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) - -#define FOR_EACH_2_COUNTED_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \ -X(60, P1, P2) \ -FOR_EACH_2_COUNTED_58(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) - -#define FOR_EACH_2_COUNTED_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \ -X(62, P1, P2) \ -FOR_EACH_2_COUNTED_60(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) - -#define FOR_EACH_2_COUNTED_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \ -X(64, P1, P2) \ -FOR_EACH_2_COUNTED_62(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) - -#define FOR_EACH_2_COUNTED_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \ -X(66, P1, P2) \ -FOR_EACH_2_COUNTED_64(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) - -#define FOR_EACH_2_COUNTED_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \ -X(68, P1, P2) \ -FOR_EACH_2_COUNTED_66(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) - -#define FOR_EACH_2_COUNTED_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \ -X(70, P1, P2) \ -FOR_EACH_2_COUNTED_68(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) - -#define FOR_EACH_2_COUNTED_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \ -X(72, P1, P2) \ -FOR_EACH_2_COUNTED_70(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) - -#define FOR_EACH_2_COUNTED_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \ -X(74, P1, P2) \ -FOR_EACH_2_COUNTED_72(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) - -#define FOR_EACH_2_COUNTED_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \ -X(76, P1, P2) \ -FOR_EACH_2_COUNTED_74(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) - -#define FOR_EACH_2_COUNTED_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \ -X(78, P1, P2) \ -FOR_EACH_2_COUNTED_76(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) - -#define FOR_EACH_2_COUNTED_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \ -X(80, P1, P2) \ -FOR_EACH_2_COUNTED_78(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) - -#define FOR_EACH_2_COUNTED_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \ -X(82, P1, P2) \ -FOR_EACH_2_COUNTED_80(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) - -#define FOR_EACH_2_COUNTED_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \ -X(84, P1, P2) \ -FOR_EACH_2_COUNTED_82(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) - -#define FOR_EACH_2_COUNTED_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \ -X(86, P1, P2) \ -FOR_EACH_2_COUNTED_84(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) - -#define FOR_EACH_2_COUNTED_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \ -X(88, P1, P2) \ -FOR_EACH_2_COUNTED_86(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) - -#define FOR_EACH_2_COUNTED_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \ -X(90, P1, P2) \ -FOR_EACH_2_COUNTED_88(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) - -#define FOR_EACH_2_COUNTED_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \ -X(92, P1, P2) \ -FOR_EACH_2_COUNTED_90(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) - -#define FOR_EACH_2_COUNTED_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \ -X(94, P1, P2) \ -FOR_EACH_2_COUNTED_92(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) - -#define FOR_EACH_2_COUNTED_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \ -X(96, P1, P2) \ -FOR_EACH_2_COUNTED_94(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) - -#define FOR_EACH_2_COUNTED_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \ -X(98, P1, P2) \ -FOR_EACH_2_COUNTED_96(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) - -#define FOR_EACH_2_COUNTED_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \ -X(100, P1, P2) \ -FOR_EACH_2_COUNTED_98(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) - -#define FOR_EACH_2_COUNTED_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \ -X(102, P1, P2) \ -FOR_EACH_2_COUNTED_100(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) - -#define FOR_EACH_2_COUNTED_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \ -X(104, P1, P2) \ -FOR_EACH_2_COUNTED_102(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) - -#define FOR_EACH_2_COUNTED_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \ -X(106, P1, P2) \ -FOR_EACH_2_COUNTED_104(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) - -#define FOR_EACH_2_COUNTED_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \ -X(108, P1, P2) \ -FOR_EACH_2_COUNTED_106(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) - -#define FOR_EACH_2_COUNTED_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \ -X(110, P1, P2) \ -FOR_EACH_2_COUNTED_108(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) - -#define FOR_EACH_2_COUNTED_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \ -X(112, P1, P2) \ -FOR_EACH_2_COUNTED_110(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) - -#define FOR_EACH_2_COUNTED_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \ -X(114, P1, P2) \ -FOR_EACH_2_COUNTED_112(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) - -#define FOR_EACH_2_COUNTED_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \ -X(116, P1, P2) \ -FOR_EACH_2_COUNTED_114(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) - -#define FOR_EACH_2_COUNTED_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \ -X(118, P1, P2) \ -FOR_EACH_2_COUNTED_116(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) - -#define FOR_EACH_2_COUNTED_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \ -X(120, P1, P2) \ -FOR_EACH_2_COUNTED_118(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) - -#define FOR_EACH_2_COUNTED_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \ -X(122, P1, P2) \ -FOR_EACH_2_COUNTED_120(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) - -#define FOR_EACH_2_COUNTED_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \ -X(124, P1, P2) \ -FOR_EACH_2_COUNTED_122(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) - - -#ifdef _MSC_VER -#define FOR_EACH_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_, C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -/*the COUNTED breed of FOR_EACH macro invokes a macro with 3 parameters: 1st being the count of invocation. For example. -FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in -MACRO(6, a,b) -MACRO(4, c,d) -MACRO(2, e,f) -This macro exists because we need a "stop condition" in outputting COMMA... when calling a function f(a,b,c,d) cannot be f(a,b,c,d,) <=doesn't compile (as opposed to enum definition) -*/ -#define FOR_EACH_2_COUNTED(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_COUNTED_, C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#define FOR_EACH_1_COUNTED(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_COUNTED_, C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) -#else -#define FOR_EACH_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_, C1(COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#define FOR_EACH_2_COUNTED(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_COUNTED_, C1(COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#define FOR_EACH_1_COUNTED(MACRO_TO_INVOKE, ...) C2(FOR_EACH_1_COUNTED_, C1(COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__) -#endif - -#ifdef _MSC_VER -#define EXPAND_OR_C1(x) x -#else -#define EXPAND_OR_C1(...) __VA_ARGS__ -#endif - -#define EXPAND_ARGS(...) __VA_ARGS__ -#define EXPAND_TWICE(...) EXPAND_ARGS(__VA_ARGS__) - -#define DO_0(MACRO, ...) \ -MACRO(0, __VA_ARGS__) - -#define DO_1(MACRO, ...) \ -MACRO(1, __VA_ARGS__) \ -DO_0(MACRO, __VA_ARGS__) - - -#define DO_2(MACRO, ...) \ -MACRO(2, __VA_ARGS__) \ -DO_1(MACRO, __VA_ARGS__) - - -#define DO_3(MACRO, ...) \ -MACRO(3, __VA_ARGS__) \ -DO_2(MACRO, __VA_ARGS__) - - -#define DO_4(MACRO, ...) \ -MACRO(4, __VA_ARGS__) \ -DO_3(MACRO, __VA_ARGS__) - - -#define DO_5(MACRO, ...) \ -MACRO(5, __VA_ARGS__) \ -DO_4(MACRO, __VA_ARGS__) - - -#define DO_6(MACRO, ...) \ -MACRO(6, __VA_ARGS__) \ -DO_5(MACRO, __VA_ARGS__) - - -#define DO_7(MACRO, ...) \ -MACRO(7, __VA_ARGS__) \ -DO_6(MACRO, __VA_ARGS__) - - -#define DO_8(MACRO, ...) \ -MACRO(8, __VA_ARGS__) \ -DO_7(MACRO, __VA_ARGS__) - - -#define DO_9(MACRO, ...) \ -MACRO(9, __VA_ARGS__) \ -DO_8(MACRO, __VA_ARGS__) - - -#define DO_10(MACRO, ...) \ -MACRO(10, __VA_ARGS__) \ -DO_9(MACRO, __VA_ARGS__) - - -#define DO_11(MACRO, ...) \ -MACRO(11, __VA_ARGS__) \ -DO_10(MACRO, __VA_ARGS__) - - -#define DO_12(MACRO, ...) \ -MACRO(12, __VA_ARGS__) \ -DO_11(MACRO, __VA_ARGS__) - - -#define DO_13(MACRO, ...) \ -MACRO(13, __VA_ARGS__) \ -DO_12(MACRO, __VA_ARGS__) - - -#define DO_14(MACRO, ...) \ -MACRO(14, __VA_ARGS__) \ -DO_13(MACRO, __VA_ARGS__) - - -#define DO_15(MACRO, ...) \ -MACRO(15, __VA_ARGS__) \ -DO_14(MACRO, __VA_ARGS__) - - -#define DO_16(MACRO, ...) \ -MACRO(16, __VA_ARGS__) \ -DO_15(MACRO, __VA_ARGS__) - - -#define DO_17(MACRO, ...) \ -MACRO(17, __VA_ARGS__) \ -DO_16(MACRO, __VA_ARGS__) - - -#define DO_18(MACRO, ...) \ -MACRO(18, __VA_ARGS__) \ -DO_17(MACRO, __VA_ARGS__) - - -#define DO_19(MACRO, ...) \ -MACRO(19, __VA_ARGS__) \ -DO_18(MACRO, __VA_ARGS__) - - -#define DO_20(MACRO, ...) \ -MACRO(20, __VA_ARGS__) \ -DO_19(MACRO, __VA_ARGS__) - - -#define DO_21(MACRO, ...) \ -MACRO(21, __VA_ARGS__) \ -DO_20(MACRO, __VA_ARGS__) - - -#define DO_22(MACRO, ...) \ -MACRO(22, __VA_ARGS__) \ -DO_21(MACRO, __VA_ARGS__) - - -#define DO_23(MACRO, ...) \ -MACRO(23, __VA_ARGS__) \ -DO_22(MACRO, __VA_ARGS__) - - -#define DO_24(MACRO, ...) \ -MACRO(24, __VA_ARGS__) \ -DO_23(MACRO, __VA_ARGS__) - - -#define DO_25(MACRO, ...) \ -MACRO(25, __VA_ARGS__) \ -DO_24(MACRO, __VA_ARGS__) - - -#define DO_26(MACRO, ...) \ -MACRO(26, __VA_ARGS__) \ -DO_25(MACRO, __VA_ARGS__) - - -#define DO_27(MACRO, ...) \ -MACRO(27, __VA_ARGS__) \ -DO_26(MACRO, __VA_ARGS__) - - -#define DO_28(MACRO, ...) \ -MACRO(28, __VA_ARGS__) \ -DO_27(MACRO, __VA_ARGS__) - - -#define DO_29(MACRO, ...) \ -MACRO(29, __VA_ARGS__) \ -DO_28(MACRO, __VA_ARGS__) - - -#define DO_30(MACRO, ...) \ -MACRO(30, __VA_ARGS__) \ -DO_29(MACRO, __VA_ARGS__) - - -#define DO_31(MACRO, ...) \ -MACRO(31, __VA_ARGS__) \ -DO_30(MACRO, __VA_ARGS__) - - -#define DO_32(MACRO, ...) \ -MACRO(32, __VA_ARGS__) \ -DO_31(MACRO, __VA_ARGS__) - - -#define DO_33(MACRO, ...) \ -MACRO(33, __VA_ARGS__) \ -DO_32(MACRO, __VA_ARGS__) - - -#define DO_34(MACRO, ...) \ -MACRO(34, __VA_ARGS__) \ -DO_33(MACRO, __VA_ARGS__) - - -#define DO_35(MACRO, ...) \ -MACRO(35, __VA_ARGS__) \ -DO_34(MACRO, __VA_ARGS__) - - -#define DO_36(MACRO, ...) \ -MACRO(36, __VA_ARGS__) \ -DO_35(MACRO, __VA_ARGS__) - - -#define DO_37(MACRO, ...) \ -MACRO(37, __VA_ARGS__) \ -DO_36(MACRO, __VA_ARGS__) - - -#define DO_38(MACRO, ...) \ -MACRO(38, __VA_ARGS__) \ -DO_37(MACRO, __VA_ARGS__) - - -#define DO_39(MACRO, ...) \ -MACRO(39, __VA_ARGS__) \ -DO_38(MACRO, __VA_ARGS__) - - -#define DO_40(MACRO, ...) \ -MACRO(40, __VA_ARGS__) \ -DO_39(MACRO, __VA_ARGS__) - - -#define DO_41(MACRO, ...) \ -MACRO(41, __VA_ARGS__) \ -DO_40(MACRO, __VA_ARGS__) - - -#define DO_42(MACRO, ...) \ -MACRO(42, __VA_ARGS__) \ -DO_41(MACRO, __VA_ARGS__) - - -#define DO_43(MACRO, ...) \ -MACRO(43, __VA_ARGS__) \ -DO_42(MACRO, __VA_ARGS__) - - -#define DO_44(MACRO, ...) \ -MACRO(44, __VA_ARGS__) \ -DO_43(MACRO, __VA_ARGS__) - - -#define DO_45(MACRO, ...) \ -MACRO(45, __VA_ARGS__) \ -DO_44(MACRO, __VA_ARGS__) - - -#define DO_46(MACRO, ...) \ -MACRO(46, __VA_ARGS__) \ -DO_45(MACRO, __VA_ARGS__) - - -#define DO_47(MACRO, ...) \ -MACRO(47, __VA_ARGS__) \ -DO_46(MACRO, __VA_ARGS__) - - -#define DO_48(MACRO, ...) \ -MACRO(48, __VA_ARGS__) \ -DO_47(MACRO, __VA_ARGS__) - - -#define DO_49(MACRO, ...) \ -MACRO(49, __VA_ARGS__) \ -DO_48(MACRO, __VA_ARGS__) - - -#define DO_50(MACRO, ...) \ -MACRO(50, __VA_ARGS__) \ -DO_49(MACRO, __VA_ARGS__) - - -#define DO_51(MACRO, ...) \ -MACRO(51, __VA_ARGS__) \ -DO_50(MACRO, __VA_ARGS__) - - -#define DO_52(MACRO, ...) \ -MACRO(52, __VA_ARGS__) \ -DO_51(MACRO, __VA_ARGS__) - - -#define DO_53(MACRO, ...) \ -MACRO(53, __VA_ARGS__) \ -DO_52(MACRO, __VA_ARGS__) - - -#define DO_54(MACRO, ...) \ -MACRO(54, __VA_ARGS__) \ -DO_53(MACRO, __VA_ARGS__) - - -#define DO_55(MACRO, ...) \ -MACRO(55, __VA_ARGS__) \ -DO_54(MACRO, __VA_ARGS__) - - -#define DO_56(MACRO, ...) \ -MACRO(56, __VA_ARGS__) \ -DO_55(MACRO, __VA_ARGS__) - - -#define DO_57(MACRO, ...) \ -MACRO(57, __VA_ARGS__) \ -DO_56(MACRO, __VA_ARGS__) - - -#define DO_58(MACRO, ...) \ -MACRO(58, __VA_ARGS__) \ -DO_57(MACRO, __VA_ARGS__) - - -#define DO_59(MACRO, ...) \ -MACRO(59, __VA_ARGS__) \ -DO_58(MACRO, __VA_ARGS__) - - -#define DO_60(MACRO, ...) \ -MACRO(60, __VA_ARGS__) \ -DO_59(MACRO, __VA_ARGS__) - - -#define DO_61(MACRO, ...) \ -MACRO(61, __VA_ARGS__) \ -DO_60(MACRO, __VA_ARGS__) - - -#define DO_62(MACRO, ...) \ -MACRO(62, __VA_ARGS__) \ -DO_61(MACRO, __VA_ARGS__) - - -#define DO_63(MACRO, ...) \ -MACRO(63, __VA_ARGS__) \ -DO_62(MACRO, __VA_ARGS__) - - -#define DO_64(MACRO, ...) \ -MACRO(64, __VA_ARGS__) \ -DO_63(MACRO, __VA_ARGS__) - - -#define DO_65(MACRO, ...) \ -MACRO(65, __VA_ARGS__) \ -DO_64(MACRO, __VA_ARGS__) - - -#define DO_66(MACRO, ...) \ -MACRO(66, __VA_ARGS__) \ -DO_65(MACRO, __VA_ARGS__) - - -#define DO_67(MACRO, ...) \ -MACRO(67, __VA_ARGS__) \ -DO_66(MACRO, __VA_ARGS__) - - -#define DO_68(MACRO, ...) \ -MACRO(68, __VA_ARGS__) \ -DO_67(MACRO, __VA_ARGS__) - - -#define DO_69(MACRO, ...) \ -MACRO(69, __VA_ARGS__) \ -DO_68(MACRO, __VA_ARGS__) - - -#define DO_70(MACRO, ...) \ -MACRO(70, __VA_ARGS__) \ -DO_69(MACRO, __VA_ARGS__) - - -#define DO_71(MACRO, ...) \ -MACRO(71, __VA_ARGS__) \ -DO_70(MACRO, __VA_ARGS__) - - -#define DO_72(MACRO, ...) \ -MACRO(72, __VA_ARGS__) \ -DO_71(MACRO, __VA_ARGS__) - - -#define DO_73(MACRO, ...) \ -MACRO(73, __VA_ARGS__) \ -DO_72(MACRO, __VA_ARGS__) - - -#define DO_74(MACRO, ...) \ -MACRO(74, __VA_ARGS__) \ -DO_73(MACRO, __VA_ARGS__) - - -#define DO_75(MACRO, ...) \ -MACRO(75, __VA_ARGS__) \ -DO_74(MACRO, __VA_ARGS__) - - -#define DO_76(MACRO, ...) \ -MACRO(76, __VA_ARGS__) \ -DO_75(MACRO, __VA_ARGS__) - - -#define DO_77(MACRO, ...) \ -MACRO(77, __VA_ARGS__) \ -DO_76(MACRO, __VA_ARGS__) - - -#define DO_78(MACRO, ...) \ -MACRO(78, __VA_ARGS__) \ -DO_77(MACRO, __VA_ARGS__) - - -#define DO_79(MACRO, ...) \ -MACRO(79, __VA_ARGS__) \ -DO_78(MACRO, __VA_ARGS__) - - -#define DO_80(MACRO, ...) \ -MACRO(80, __VA_ARGS__) \ -DO_79(MACRO, __VA_ARGS__) - - -#define DO_81(MACRO, ...) \ -MACRO(81, __VA_ARGS__) \ -DO_80(MACRO, __VA_ARGS__) - - -#define DO_82(MACRO, ...) \ -MACRO(82, __VA_ARGS__) \ -DO_81(MACRO, __VA_ARGS__) - - -#define DO_83(MACRO, ...) \ -MACRO(83, __VA_ARGS__) \ -DO_82(MACRO, __VA_ARGS__) - - -#define DO_84(MACRO, ...) \ -MACRO(84, __VA_ARGS__) \ -DO_83(MACRO, __VA_ARGS__) - - -#define DO_85(MACRO, ...) \ -MACRO(85, __VA_ARGS__) \ -DO_84(MACRO, __VA_ARGS__) - - -#define DO_86(MACRO, ...) \ -MACRO(86, __VA_ARGS__) \ -DO_85(MACRO, __VA_ARGS__) - - -#define DO_87(MACRO, ...) \ -MACRO(87, __VA_ARGS__) \ -DO_86(MACRO, __VA_ARGS__) - - -#define DO_88(MACRO, ...) \ -MACRO(88, __VA_ARGS__) \ -DO_87(MACRO, __VA_ARGS__) - - -#define DO_89(MACRO, ...) \ -MACRO(89, __VA_ARGS__) \ -DO_88(MACRO, __VA_ARGS__) - - -#define DO_90(MACRO, ...) \ -MACRO(90, __VA_ARGS__) \ -DO_89(MACRO, __VA_ARGS__) - - -#define DO_91(MACRO, ...) \ -MACRO(91, __VA_ARGS__) \ -DO_90(MACRO, __VA_ARGS__) - - -#define DO_92(MACRO, ...) \ -MACRO(92, __VA_ARGS__) \ -DO_91(MACRO, __VA_ARGS__) - - -#define DO_93(MACRO, ...) \ -MACRO(93, __VA_ARGS__) \ -DO_92(MACRO, __VA_ARGS__) - - -#define DO_94(MACRO, ...) \ -MACRO(94, __VA_ARGS__) \ -DO_93(MACRO, __VA_ARGS__) - - -#define DO_95(MACRO, ...) \ -MACRO(95, __VA_ARGS__) \ -DO_94(MACRO, __VA_ARGS__) - - -#define DO_96(MACRO, ...) \ -MACRO(96, __VA_ARGS__) \ -DO_95(MACRO, __VA_ARGS__) - - -#define DO_97(MACRO, ...) \ -MACRO(97, __VA_ARGS__) \ -DO_96(MACRO, __VA_ARGS__) - - -#define DO_98(MACRO, ...) \ -MACRO(98, __VA_ARGS__) \ -DO_97(MACRO, __VA_ARGS__) - - -#define DO_99(MACRO, ...) \ -MACRO(99, __VA_ARGS__) \ -DO_98(MACRO, __VA_ARGS__) - - -#define DO_100(MACRO, ...) \ -MACRO(100, __VA_ARGS__) \ -DO_99(MACRO, __VA_ARGS__) - - -#define DO_101(MACRO, ...) \ -MACRO(101, __VA_ARGS__) \ -DO_100(MACRO, __VA_ARGS__) - - -#define DO_102(MACRO, ...) \ -MACRO(102, __VA_ARGS__) \ -DO_101(MACRO, __VA_ARGS__) - - -#define DO_103(MACRO, ...) \ -MACRO(103, __VA_ARGS__) \ -DO_102(MACRO, __VA_ARGS__) - - -#define DO_104(MACRO, ...) \ -MACRO(104, __VA_ARGS__) \ -DO_103(MACRO, __VA_ARGS__) - - -#define DO_105(MACRO, ...) \ -MACRO(105, __VA_ARGS__) \ -DO_104(MACRO, __VA_ARGS__) - - -#define DO_106(MACRO, ...) \ -MACRO(106, __VA_ARGS__) \ -DO_105(MACRO, __VA_ARGS__) - - -#define DO_107(MACRO, ...) \ -MACRO(107, __VA_ARGS__) \ -DO_106(MACRO, __VA_ARGS__) - - -#define DO_108(MACRO, ...) \ -MACRO(108, __VA_ARGS__) \ -DO_107(MACRO, __VA_ARGS__) - - -#define DO_109(MACRO, ...) \ -MACRO(109, __VA_ARGS__) \ -DO_108(MACRO, __VA_ARGS__) - - -#define DO_110(MACRO, ...) \ -MACRO(110, __VA_ARGS__) \ -DO_109(MACRO, __VA_ARGS__) - - -#define DO_111(MACRO, ...) \ -MACRO(111, __VA_ARGS__) \ -DO_110(MACRO, __VA_ARGS__) - - -#define DO_112(MACRO, ...) \ -MACRO(112, __VA_ARGS__) \ -DO_111(MACRO, __VA_ARGS__) - - -#define DO_113(MACRO, ...) \ -MACRO(113, __VA_ARGS__) \ -DO_112(MACRO, __VA_ARGS__) - - -#define DO_114(MACRO, ...) \ -MACRO(114, __VA_ARGS__) \ -DO_113(MACRO, __VA_ARGS__) - - -#define DO_115(MACRO, ...) \ -MACRO(115, __VA_ARGS__) \ -DO_114(MACRO, __VA_ARGS__) - - -#define DO_116(MACRO, ...) \ -MACRO(116, __VA_ARGS__) \ -DO_115(MACRO, __VA_ARGS__) - - -#define DO_117(MACRO, ...) \ -MACRO(117, __VA_ARGS__) \ -DO_116(MACRO, __VA_ARGS__) - - -#define DO_118(MACRO, ...) \ -MACRO(118, __VA_ARGS__) \ -DO_117(MACRO, __VA_ARGS__) - - -#define DO_119(MACRO, ...) \ -MACRO(119, __VA_ARGS__) \ -DO_118(MACRO, __VA_ARGS__) - - -#define DO_120(MACRO, ...) \ -MACRO(120, __VA_ARGS__) \ -DO_119(MACRO, __VA_ARGS__) - - -#define DO_121(MACRO, ...) \ -MACRO(121, __VA_ARGS__) \ -DO_120(MACRO, __VA_ARGS__) - - -#define DO_122(MACRO, ...) \ -MACRO(122, __VA_ARGS__) \ -DO_121(MACRO, __VA_ARGS__) - - -#define DO_123(MACRO, ...) \ -MACRO(123, __VA_ARGS__) \ -DO_122(MACRO, __VA_ARGS__) - - -#define DO_124(MACRO, ...) \ -MACRO(124, __VA_ARGS__) \ -DO_123(MACRO, __VA_ARGS__) - - -#define DO_125(MACRO, ...) \ -MACRO(125, __VA_ARGS__) \ -DO_124(MACRO, __VA_ARGS__) - - -#define DO_126(MACRO, ...) \ -MACRO(126, __VA_ARGS__) \ -DO_125(MACRO, __VA_ARGS__) - - -#define DO_127(MACRO, ...) \ -MACRO(127, __VA_ARGS__) \ -DO_126(MACRO, __VA_ARGS__) - - -#define DO_128(MACRO, ...) \ -MACRO(128, __VA_ARGS__) \ -DO_127(MACRO, __VA_ARGS__) - - -#define DO_129(MACRO, ...) \ -MACRO(129, __VA_ARGS__) \ -DO_128(MACRO, __VA_ARGS__) - - -#define DO_130(MACRO, ...) \ -MACRO(130, __VA_ARGS__) \ -DO_129(MACRO, __VA_ARGS__) - - -#define DO_131(MACRO, ...) \ -MACRO(131, __VA_ARGS__) \ -DO_130(MACRO, __VA_ARGS__) - - -#define DO_132(MACRO, ...) \ -MACRO(132, __VA_ARGS__) \ -DO_131(MACRO, __VA_ARGS__) - - -#define DO_133(MACRO, ...) \ -MACRO(133, __VA_ARGS__) \ -DO_132(MACRO, __VA_ARGS__) - - -#define DO_134(MACRO, ...) \ -MACRO(134, __VA_ARGS__) \ -DO_133(MACRO, __VA_ARGS__) - - -#define DO_135(MACRO, ...) \ -MACRO(135, __VA_ARGS__) \ -DO_134(MACRO, __VA_ARGS__) - - -#define DO_136(MACRO, ...) \ -MACRO(136, __VA_ARGS__) \ -DO_135(MACRO, __VA_ARGS__) - - -#define DO_137(MACRO, ...) \ -MACRO(137, __VA_ARGS__) \ -DO_136(MACRO, __VA_ARGS__) - - -#define DO_138(MACRO, ...) \ -MACRO(138, __VA_ARGS__) \ -DO_137(MACRO, __VA_ARGS__) - - -#define DO_139(MACRO, ...) \ -MACRO(139, __VA_ARGS__) \ -DO_138(MACRO, __VA_ARGS__) - - -#define DO_140(MACRO, ...) \ -MACRO(140, __VA_ARGS__) \ -DO_139(MACRO, __VA_ARGS__) - - -#define DO_141(MACRO, ...) \ -MACRO(141, __VA_ARGS__) \ -DO_140(MACRO, __VA_ARGS__) - - -#define DO_142(MACRO, ...) \ -MACRO(142, __VA_ARGS__) \ -DO_141(MACRO, __VA_ARGS__) - - -#define DO_143(MACRO, ...) \ -MACRO(143, __VA_ARGS__) \ -DO_142(MACRO, __VA_ARGS__) - - -#define DO_144(MACRO, ...) \ -MACRO(144, __VA_ARGS__) \ -DO_143(MACRO, __VA_ARGS__) - - -#define DO_145(MACRO, ...) \ -MACRO(145, __VA_ARGS__) \ -DO_144(MACRO, __VA_ARGS__) - - -#define DO_146(MACRO, ...) \ -MACRO(146, __VA_ARGS__) \ -DO_145(MACRO, __VA_ARGS__) - - -#define DO_147(MACRO, ...) \ -MACRO(147, __VA_ARGS__) \ -DO_146(MACRO, __VA_ARGS__) - - -#define DO_148(MACRO, ...) \ -MACRO(148, __VA_ARGS__) \ -DO_147(MACRO, __VA_ARGS__) - - -#define DO_149(MACRO, ...) \ -MACRO(149, __VA_ARGS__) \ -DO_148(MACRO, __VA_ARGS__) - - -#define DO_150(MACRO, ...) \ -MACRO(150, __VA_ARGS__) \ -DO_149(MACRO, __VA_ARGS__) - - -#define DO_151(MACRO, ...) \ -MACRO(151, __VA_ARGS__) \ -DO_150(MACRO, __VA_ARGS__) - - -#define DO_152(MACRO, ...) \ -MACRO(152, __VA_ARGS__) \ -DO_151(MACRO, __VA_ARGS__) - - -#define DO_153(MACRO, ...) \ -MACRO(153, __VA_ARGS__) \ -DO_152(MACRO, __VA_ARGS__) - - -#define DO_154(MACRO, ...) \ -MACRO(154, __VA_ARGS__) \ -DO_153(MACRO, __VA_ARGS__) - - -#define DO_155(MACRO, ...) \ -MACRO(155, __VA_ARGS__) \ -DO_154(MACRO, __VA_ARGS__) - - -#define DO_156(MACRO, ...) \ -MACRO(156, __VA_ARGS__) \ -DO_155(MACRO, __VA_ARGS__) - - -#define DO_157(MACRO, ...) \ -MACRO(157, __VA_ARGS__) \ -DO_156(MACRO, __VA_ARGS__) - - -#define DO_158(MACRO, ...) \ -MACRO(158, __VA_ARGS__) \ -DO_157(MACRO, __VA_ARGS__) - - -#define DO_159(MACRO, ...) \ -MACRO(159, __VA_ARGS__) \ -DO_158(MACRO, __VA_ARGS__) - - -#define DO_160(MACRO, ...) \ -MACRO(160, __VA_ARGS__) \ -DO_159(MACRO, __VA_ARGS__) - - -#define DO_161(MACRO, ...) \ -MACRO(161, __VA_ARGS__) \ -DO_160(MACRO, __VA_ARGS__) - - -#define DO_162(MACRO, ...) \ -MACRO(162, __VA_ARGS__) \ -DO_161(MACRO, __VA_ARGS__) - - -#define DO_163(MACRO, ...) \ -MACRO(163, __VA_ARGS__) \ -DO_162(MACRO, __VA_ARGS__) - - -#define DO_164(MACRO, ...) \ -MACRO(164, __VA_ARGS__) \ -DO_163(MACRO, __VA_ARGS__) - - -#define DO_165(MACRO, ...) \ -MACRO(165, __VA_ARGS__) \ -DO_164(MACRO, __VA_ARGS__) - - -#define DO_166(MACRO, ...) \ -MACRO(166, __VA_ARGS__) \ -DO_165(MACRO, __VA_ARGS__) - - -#define DO_167(MACRO, ...) \ -MACRO(167, __VA_ARGS__) \ -DO_166(MACRO, __VA_ARGS__) - - -#define DO_168(MACRO, ...) \ -MACRO(168, __VA_ARGS__) \ -DO_167(MACRO, __VA_ARGS__) - - -#define DO_169(MACRO, ...) \ -MACRO(169, __VA_ARGS__) \ -DO_168(MACRO, __VA_ARGS__) - - -#define DO_170(MACRO, ...) \ -MACRO(170, __VA_ARGS__) \ -DO_169(MACRO, __VA_ARGS__) - - -#define DO_171(MACRO, ...) \ -MACRO(171, __VA_ARGS__) \ -DO_170(MACRO, __VA_ARGS__) - - -#define DO_172(MACRO, ...) \ -MACRO(172, __VA_ARGS__) \ -DO_171(MACRO, __VA_ARGS__) - - -#define DO_173(MACRO, ...) \ -MACRO(173, __VA_ARGS__) \ -DO_172(MACRO, __VA_ARGS__) - - -#define DO_174(MACRO, ...) \ -MACRO(174, __VA_ARGS__) \ -DO_173(MACRO, __VA_ARGS__) - - -#define DO_175(MACRO, ...) \ -MACRO(175, __VA_ARGS__) \ -DO_174(MACRO, __VA_ARGS__) - - -#define DO_176(MACRO, ...) \ -MACRO(176, __VA_ARGS__) \ -DO_175(MACRO, __VA_ARGS__) - - -#define DO_177(MACRO, ...) \ -MACRO(177, __VA_ARGS__) \ -DO_176(MACRO, __VA_ARGS__) - - -#define DO_178(MACRO, ...) \ -MACRO(178, __VA_ARGS__) \ -DO_177(MACRO, __VA_ARGS__) - - -#define DO_179(MACRO, ...) \ -MACRO(179, __VA_ARGS__) \ -DO_178(MACRO, __VA_ARGS__) - - -#define DO_180(MACRO, ...) \ -MACRO(180, __VA_ARGS__) \ -DO_179(MACRO, __VA_ARGS__) - - -#define DO_181(MACRO, ...) \ -MACRO(181, __VA_ARGS__) \ -DO_180(MACRO, __VA_ARGS__) - - -#define DO_182(MACRO, ...) \ -MACRO(182, __VA_ARGS__) \ -DO_181(MACRO, __VA_ARGS__) - - -#define DO_183(MACRO, ...) \ -MACRO(183, __VA_ARGS__) \ -DO_182(MACRO, __VA_ARGS__) - - -#define DO_184(MACRO, ...) \ -MACRO(184, __VA_ARGS__) \ -DO_183(MACRO, __VA_ARGS__) - - -#define DO_185(MACRO, ...) \ -MACRO(185, __VA_ARGS__) \ -DO_184(MACRO, __VA_ARGS__) - - -#define DO_186(MACRO, ...) \ -MACRO(186, __VA_ARGS__) \ -DO_185(MACRO, __VA_ARGS__) - - -#define DO_187(MACRO, ...) \ -MACRO(187, __VA_ARGS__) \ -DO_186(MACRO, __VA_ARGS__) - - -#define DO_188(MACRO, ...) \ -MACRO(188, __VA_ARGS__) \ -DO_187(MACRO, __VA_ARGS__) - - -#define DO_189(MACRO, ...) \ -MACRO(189, __VA_ARGS__) \ -DO_188(MACRO, __VA_ARGS__) - - -#define DO_190(MACRO, ...) \ -MACRO(190, __VA_ARGS__) \ -DO_189(MACRO, __VA_ARGS__) - - -#define DO_191(MACRO, ...) \ -MACRO(191, __VA_ARGS__) \ -DO_190(MACRO, __VA_ARGS__) - - -#define DO_192(MACRO, ...) \ -MACRO(192, __VA_ARGS__) \ -DO_191(MACRO, __VA_ARGS__) - - -#define DO_193(MACRO, ...) \ -MACRO(193, __VA_ARGS__) \ -DO_192(MACRO, __VA_ARGS__) - - -#define DO_194(MACRO, ...) \ -MACRO(194, __VA_ARGS__) \ -DO_193(MACRO, __VA_ARGS__) - - -#define DO_195(MACRO, ...) \ -MACRO(195, __VA_ARGS__) \ -DO_194(MACRO, __VA_ARGS__) - - -#define DO_196(MACRO, ...) \ -MACRO(196, __VA_ARGS__) \ -DO_195(MACRO, __VA_ARGS__) - - -#define DO_197(MACRO, ...) \ -MACRO(197, __VA_ARGS__) \ -DO_196(MACRO, __VA_ARGS__) - - -#define DO_198(MACRO, ...) \ -MACRO(198, __VA_ARGS__) \ -DO_197(MACRO, __VA_ARGS__) - - -#define DO_199(MACRO, ...) \ -MACRO(199, __VA_ARGS__) \ -DO_198(MACRO, __VA_ARGS__) - - -#define DO_200(MACRO, ...) \ -MACRO(200, __VA_ARGS__) \ -DO_199(MACRO, __VA_ARGS__) - - -#define DO_201(MACRO, ...) \ -MACRO(201, __VA_ARGS__) \ -DO_200(MACRO, __VA_ARGS__) - - -#define DO_202(MACRO, ...) \ -MACRO(202, __VA_ARGS__) \ -DO_201(MACRO, __VA_ARGS__) - - -#define DO_203(MACRO, ...) \ -MACRO(203, __VA_ARGS__) \ -DO_202(MACRO, __VA_ARGS__) - - -#define DO_204(MACRO, ...) \ -MACRO(204, __VA_ARGS__) \ -DO_203(MACRO, __VA_ARGS__) - - -#define DO_205(MACRO, ...) \ -MACRO(205, __VA_ARGS__) \ -DO_204(MACRO, __VA_ARGS__) - - -#define DO_206(MACRO, ...) \ -MACRO(206, __VA_ARGS__) \ -DO_205(MACRO, __VA_ARGS__) - - -#define DO_207(MACRO, ...) \ -MACRO(207, __VA_ARGS__) \ -DO_206(MACRO, __VA_ARGS__) - - -#define DO_208(MACRO, ...) \ -MACRO(208, __VA_ARGS__) \ -DO_207(MACRO, __VA_ARGS__) - - -#define DO_209(MACRO, ...) \ -MACRO(209, __VA_ARGS__) \ -DO_208(MACRO, __VA_ARGS__) - - -#define DO_210(MACRO, ...) \ -MACRO(210, __VA_ARGS__) \ -DO_209(MACRO, __VA_ARGS__) - - -#define DO_211(MACRO, ...) \ -MACRO(211, __VA_ARGS__) \ -DO_210(MACRO, __VA_ARGS__) - - -#define DO_212(MACRO, ...) \ -MACRO(212, __VA_ARGS__) \ -DO_211(MACRO, __VA_ARGS__) - - -#define DO_213(MACRO, ...) \ -MACRO(213, __VA_ARGS__) \ -DO_212(MACRO, __VA_ARGS__) - - -#define DO_214(MACRO, ...) \ -MACRO(214, __VA_ARGS__) \ -DO_213(MACRO, __VA_ARGS__) - - -#define DO_215(MACRO, ...) \ -MACRO(215, __VA_ARGS__) \ -DO_214(MACRO, __VA_ARGS__) - - -#define DO_216(MACRO, ...) \ -MACRO(216, __VA_ARGS__) \ -DO_215(MACRO, __VA_ARGS__) - - -#define DO_217(MACRO, ...) \ -MACRO(217, __VA_ARGS__) \ -DO_216(MACRO, __VA_ARGS__) - - -#define DO_218(MACRO, ...) \ -MACRO(218, __VA_ARGS__) \ -DO_217(MACRO, __VA_ARGS__) - - -#define DO_219(MACRO, ...) \ -MACRO(219, __VA_ARGS__) \ -DO_218(MACRO, __VA_ARGS__) - - -#define DO_220(MACRO, ...) \ -MACRO(220, __VA_ARGS__) \ -DO_219(MACRO, __VA_ARGS__) - - -#define DO_221(MACRO, ...) \ -MACRO(221, __VA_ARGS__) \ -DO_220(MACRO, __VA_ARGS__) - - -#define DO_222(MACRO, ...) \ -MACRO(222, __VA_ARGS__) \ -DO_221(MACRO, __VA_ARGS__) - - -#define DO_223(MACRO, ...) \ -MACRO(223, __VA_ARGS__) \ -DO_222(MACRO, __VA_ARGS__) - - -#define DO_224(MACRO, ...) \ -MACRO(224, __VA_ARGS__) \ -DO_223(MACRO, __VA_ARGS__) - - -#define DO_225(MACRO, ...) \ -MACRO(225, __VA_ARGS__) \ -DO_224(MACRO, __VA_ARGS__) - - -#define DO_226(MACRO, ...) \ -MACRO(226, __VA_ARGS__) \ -DO_225(MACRO, __VA_ARGS__) - - -#define DO_227(MACRO, ...) \ -MACRO(227, __VA_ARGS__) \ -DO_226(MACRO, __VA_ARGS__) - - -#define DO_228(MACRO, ...) \ -MACRO(228, __VA_ARGS__) \ -DO_227(MACRO, __VA_ARGS__) - - -#define DO_229(MACRO, ...) \ -MACRO(229, __VA_ARGS__) \ -DO_228(MACRO, __VA_ARGS__) - - -#define DO_230(MACRO, ...) \ -MACRO(230, __VA_ARGS__) \ -DO_229(MACRO, __VA_ARGS__) - - -#define DO_231(MACRO, ...) \ -MACRO(231, __VA_ARGS__) \ -DO_230(MACRO, __VA_ARGS__) - - -#define DO_232(MACRO, ...) \ -MACRO(232, __VA_ARGS__) \ -DO_231(MACRO, __VA_ARGS__) - - -#define DO_233(MACRO, ...) \ -MACRO(233, __VA_ARGS__) \ -DO_232(MACRO, __VA_ARGS__) - - -#define DO_234(MACRO, ...) \ -MACRO(234, __VA_ARGS__) \ -DO_233(MACRO, __VA_ARGS__) - - -#define DO_235(MACRO, ...) \ -MACRO(235, __VA_ARGS__) \ -DO_234(MACRO, __VA_ARGS__) - - -#define DO_236(MACRO, ...) \ -MACRO(236, __VA_ARGS__) \ -DO_235(MACRO, __VA_ARGS__) - - -#define DO_237(MACRO, ...) \ -MACRO(237, __VA_ARGS__) \ -DO_236(MACRO, __VA_ARGS__) - - -#define DO_238(MACRO, ...) \ -MACRO(238, __VA_ARGS__) \ -DO_237(MACRO, __VA_ARGS__) - - -#define DO_239(MACRO, ...) \ -MACRO(239, __VA_ARGS__) \ -DO_238(MACRO, __VA_ARGS__) - - -#define DO_240(MACRO, ...) \ -MACRO(240, __VA_ARGS__) \ -DO_239(MACRO, __VA_ARGS__) - - -#define DO_241(MACRO, ...) \ -MACRO(241, __VA_ARGS__) \ -DO_240(MACRO, __VA_ARGS__) - - -#define DO_242(MACRO, ...) \ -MACRO(242, __VA_ARGS__) \ -DO_241(MACRO, __VA_ARGS__) - - -#define DO_243(MACRO, ...) \ -MACRO(243, __VA_ARGS__) \ -DO_242(MACRO, __VA_ARGS__) - - -#define DO_244(MACRO, ...) \ -MACRO(244, __VA_ARGS__) \ -DO_243(MACRO, __VA_ARGS__) - - -#define DO_245(MACRO, ...) \ -MACRO(245, __VA_ARGS__) \ -DO_244(MACRO, __VA_ARGS__) - - -#define DO_246(MACRO, ...) \ -MACRO(246, __VA_ARGS__) \ -DO_245(MACRO, __VA_ARGS__) - - -#define DO_247(MACRO, ...) \ -MACRO(247, __VA_ARGS__) \ -DO_246(MACRO, __VA_ARGS__) - - -#define DO_248(MACRO, ...) \ -MACRO(248, __VA_ARGS__) \ -DO_247(MACRO, __VA_ARGS__) - - -#define DO_249(MACRO, ...) \ -MACRO(249, __VA_ARGS__) \ -DO_248(MACRO, __VA_ARGS__) - - -#define DO_250(MACRO, ...) \ -MACRO(250, __VA_ARGS__) \ -DO_249(MACRO, __VA_ARGS__) - - -#define DO_251(MACRO, ...) \ -MACRO(251, __VA_ARGS__) \ -DO_250(MACRO, __VA_ARGS__) - - -#define DO_252(MACRO, ...) \ -MACRO(252, __VA_ARGS__) \ -DO_251(MACRO, __VA_ARGS__) - - -#define DO_253(MACRO, ...) \ -MACRO(253, __VA_ARGS__) \ -DO_252(MACRO, __VA_ARGS__) - - -#define DO_254(MACRO, ...) \ -MACRO(254, __VA_ARGS__) \ -DO_253(MACRO, __VA_ARGS__) - - -#define DO_255(MACRO, ...) \ -MACRO(255, __VA_ARGS__) \ -DO_254(MACRO, __VA_ARGS__) - - -#define DO_256(MACRO, ...) \ -MACRO(256, __VA_ARGS__) \ -DO_255(MACRO, __VA_ARGS__) - - -#define DO_257(MACRO, ...) \ -MACRO(257, __VA_ARGS__) \ -DO_256(MACRO, __VA_ARGS__) - - -#define DO_258(MACRO, ...) \ -MACRO(258, __VA_ARGS__) \ -DO_257(MACRO, __VA_ARGS__) - - -#define DO_259(MACRO, ...) \ -MACRO(259, __VA_ARGS__) \ -DO_258(MACRO, __VA_ARGS__) - - -#define DO_260(MACRO, ...) \ -MACRO(260, __VA_ARGS__) \ -DO_259(MACRO, __VA_ARGS__) - - -#define DO_261(MACRO, ...) \ -MACRO(261, __VA_ARGS__) \ -DO_260(MACRO, __VA_ARGS__) - - -#define DO_262(MACRO, ...) \ -MACRO(262, __VA_ARGS__) \ -DO_261(MACRO, __VA_ARGS__) - - -#define DO_263(MACRO, ...) \ -MACRO(263, __VA_ARGS__) \ -DO_262(MACRO, __VA_ARGS__) - - -#define DO_264(MACRO, ...) \ -MACRO(264, __VA_ARGS__) \ -DO_263(MACRO, __VA_ARGS__) - - -#define DO_265(MACRO, ...) \ -MACRO(265, __VA_ARGS__) \ -DO_264(MACRO, __VA_ARGS__) - - -#define DO_266(MACRO, ...) \ -MACRO(266, __VA_ARGS__) \ -DO_265(MACRO, __VA_ARGS__) - - -#define DO_267(MACRO, ...) \ -MACRO(267, __VA_ARGS__) \ -DO_266(MACRO, __VA_ARGS__) - - -#define DO_268(MACRO, ...) \ -MACRO(268, __VA_ARGS__) \ -DO_267(MACRO, __VA_ARGS__) - - -#define DO_269(MACRO, ...) \ -MACRO(269, __VA_ARGS__) \ -DO_268(MACRO, __VA_ARGS__) - - -#define DO_270(MACRO, ...) \ -MACRO(270, __VA_ARGS__) \ -DO_269(MACRO, __VA_ARGS__) - - -#define DO_271(MACRO, ...) \ -MACRO(271, __VA_ARGS__) \ -DO_270(MACRO, __VA_ARGS__) - - -#define DO_272(MACRO, ...) \ -MACRO(272, __VA_ARGS__) \ -DO_271(MACRO, __VA_ARGS__) - - -#define DO_273(MACRO, ...) \ -MACRO(273, __VA_ARGS__) \ -DO_272(MACRO, __VA_ARGS__) - - -#define DO_274(MACRO, ...) \ -MACRO(274, __VA_ARGS__) \ -DO_273(MACRO, __VA_ARGS__) - - -#define DO_275(MACRO, ...) \ -MACRO(275, __VA_ARGS__) \ -DO_274(MACRO, __VA_ARGS__) - - -#define DO_276(MACRO, ...) \ -MACRO(276, __VA_ARGS__) \ -DO_275(MACRO, __VA_ARGS__) - - -#define DO_277(MACRO, ...) \ -MACRO(277, __VA_ARGS__) \ -DO_276(MACRO, __VA_ARGS__) - - -#define DO_278(MACRO, ...) \ -MACRO(278, __VA_ARGS__) \ -DO_277(MACRO, __VA_ARGS__) - - -#define DO_279(MACRO, ...) \ -MACRO(279, __VA_ARGS__) \ -DO_278(MACRO, __VA_ARGS__) - - -#define DO_280(MACRO, ...) \ -MACRO(280, __VA_ARGS__) \ -DO_279(MACRO, __VA_ARGS__) - - -#define DO_281(MACRO, ...) \ -MACRO(281, __VA_ARGS__) \ -DO_280(MACRO, __VA_ARGS__) - - -#define DO_282(MACRO, ...) \ -MACRO(282, __VA_ARGS__) \ -DO_281(MACRO, __VA_ARGS__) - - -#define DO_283(MACRO, ...) \ -MACRO(283, __VA_ARGS__) \ -DO_282(MACRO, __VA_ARGS__) - - -#define DO_284(MACRO, ...) \ -MACRO(284, __VA_ARGS__) \ -DO_283(MACRO, __VA_ARGS__) - - -#define DO_285(MACRO, ...) \ -MACRO(285, __VA_ARGS__) \ -DO_284(MACRO, __VA_ARGS__) - - -#define DO_286(MACRO, ...) \ -MACRO(286, __VA_ARGS__) \ -DO_285(MACRO, __VA_ARGS__) - - -#define DO_287(MACRO, ...) \ -MACRO(287, __VA_ARGS__) \ -DO_286(MACRO, __VA_ARGS__) - - -#define DO_288(MACRO, ...) \ -MACRO(288, __VA_ARGS__) \ -DO_287(MACRO, __VA_ARGS__) - - -#define DO_289(MACRO, ...) \ -MACRO(289, __VA_ARGS__) \ -DO_288(MACRO, __VA_ARGS__) - - -#define DO_290(MACRO, ...) \ -MACRO(290, __VA_ARGS__) \ -DO_289(MACRO, __VA_ARGS__) - - -#define DO_291(MACRO, ...) \ -MACRO(291, __VA_ARGS__) \ -DO_290(MACRO, __VA_ARGS__) - - -#define DO_292(MACRO, ...) \ -MACRO(292, __VA_ARGS__) \ -DO_291(MACRO, __VA_ARGS__) - - -#define DO_293(MACRO, ...) \ -MACRO(293, __VA_ARGS__) \ -DO_292(MACRO, __VA_ARGS__) - - -#define DO_294(MACRO, ...) \ -MACRO(294, __VA_ARGS__) \ -DO_293(MACRO, __VA_ARGS__) - - -#define DO_295(MACRO, ...) \ -MACRO(295, __VA_ARGS__) \ -DO_294(MACRO, __VA_ARGS__) - - -#define DO_296(MACRO, ...) \ -MACRO(296, __VA_ARGS__) \ -DO_295(MACRO, __VA_ARGS__) - - -#define DO_297(MACRO, ...) \ -MACRO(297, __VA_ARGS__) \ -DO_296(MACRO, __VA_ARGS__) - - -#define DO_298(MACRO, ...) \ -MACRO(298, __VA_ARGS__) \ -DO_297(MACRO, __VA_ARGS__) - - -#define DO_299(MACRO, ...) \ -MACRO(299, __VA_ARGS__) \ -DO_298(MACRO, __VA_ARGS__) - - -#define DO_300(MACRO, ...) \ -MACRO(300, __VA_ARGS__) \ -DO_299(MACRO, __VA_ARGS__) - - -#define DO_301(MACRO, ...) \ -MACRO(301, __VA_ARGS__) \ -DO_300(MACRO, __VA_ARGS__) - - -#define DO_302(MACRO, ...) \ -MACRO(302, __VA_ARGS__) \ -DO_301(MACRO, __VA_ARGS__) - - -#define DO_303(MACRO, ...) \ -MACRO(303, __VA_ARGS__) \ -DO_302(MACRO, __VA_ARGS__) - - -#define DO_304(MACRO, ...) \ -MACRO(304, __VA_ARGS__) \ -DO_303(MACRO, __VA_ARGS__) - - -#define DO_305(MACRO, ...) \ -MACRO(305, __VA_ARGS__) \ -DO_304(MACRO, __VA_ARGS__) - - -#define DO_306(MACRO, ...) \ -MACRO(306, __VA_ARGS__) \ -DO_305(MACRO, __VA_ARGS__) - - -#define DO_307(MACRO, ...) \ -MACRO(307, __VA_ARGS__) \ -DO_306(MACRO, __VA_ARGS__) - - -#define DO_308(MACRO, ...) \ -MACRO(308, __VA_ARGS__) \ -DO_307(MACRO, __VA_ARGS__) - - -#define DO_309(MACRO, ...) \ -MACRO(309, __VA_ARGS__) \ -DO_308(MACRO, __VA_ARGS__) - - -#define DO_310(MACRO, ...) \ -MACRO(310, __VA_ARGS__) \ -DO_309(MACRO, __VA_ARGS__) - - -#define DO_311(MACRO, ...) \ -MACRO(311, __VA_ARGS__) \ -DO_310(MACRO, __VA_ARGS__) - - -#define DO_312(MACRO, ...) \ -MACRO(312, __VA_ARGS__) \ -DO_311(MACRO, __VA_ARGS__) - - -#define DO_313(MACRO, ...) \ -MACRO(313, __VA_ARGS__) \ -DO_312(MACRO, __VA_ARGS__) - - -#define DO_314(MACRO, ...) \ -MACRO(314, __VA_ARGS__) \ -DO_313(MACRO, __VA_ARGS__) - - -#define DO_315(MACRO, ...) \ -MACRO(315, __VA_ARGS__) \ -DO_314(MACRO, __VA_ARGS__) - - -#define DO_316(MACRO, ...) \ -MACRO(316, __VA_ARGS__) \ -DO_315(MACRO, __VA_ARGS__) - - -#define DO_317(MACRO, ...) \ -MACRO(317, __VA_ARGS__) \ -DO_316(MACRO, __VA_ARGS__) - - -#define DO_318(MACRO, ...) \ -MACRO(318, __VA_ARGS__) \ -DO_317(MACRO, __VA_ARGS__) - - -#define DO_319(MACRO, ...) \ -MACRO(319, __VA_ARGS__) \ -DO_318(MACRO, __VA_ARGS__) - - -#define DO_320(MACRO, ...) \ -MACRO(320, __VA_ARGS__) \ -DO_319(MACRO, __VA_ARGS__) - - -#define DO_321(MACRO, ...) \ -MACRO(321, __VA_ARGS__) \ -DO_320(MACRO, __VA_ARGS__) - - -#define DO_322(MACRO, ...) \ -MACRO(322, __VA_ARGS__) \ -DO_321(MACRO, __VA_ARGS__) - - -#define DO_323(MACRO, ...) \ -MACRO(323, __VA_ARGS__) \ -DO_322(MACRO, __VA_ARGS__) - - -#define DO_324(MACRO, ...) \ -MACRO(324, __VA_ARGS__) \ -DO_323(MACRO, __VA_ARGS__) - - -#define DO_325(MACRO, ...) \ -MACRO(325, __VA_ARGS__) \ -DO_324(MACRO, __VA_ARGS__) - - -#define DO_326(MACRO, ...) \ -MACRO(326, __VA_ARGS__) \ -DO_325(MACRO, __VA_ARGS__) - - -#define DO_327(MACRO, ...) \ -MACRO(327, __VA_ARGS__) \ -DO_326(MACRO, __VA_ARGS__) - - -#define DO_328(MACRO, ...) \ -MACRO(328, __VA_ARGS__) \ -DO_327(MACRO, __VA_ARGS__) - - -#define DO_329(MACRO, ...) \ -MACRO(329, __VA_ARGS__) \ -DO_328(MACRO, __VA_ARGS__) - - -#define DO_330(MACRO, ...) \ -MACRO(330, __VA_ARGS__) \ -DO_329(MACRO, __VA_ARGS__) - - -#define DO_331(MACRO, ...) \ -MACRO(331, __VA_ARGS__) \ -DO_330(MACRO, __VA_ARGS__) - - -#define DO_332(MACRO, ...) \ -MACRO(332, __VA_ARGS__) \ -DO_331(MACRO, __VA_ARGS__) - - -#define DO_333(MACRO, ...) \ -MACRO(333, __VA_ARGS__) \ -DO_332(MACRO, __VA_ARGS__) - - -#define DO_334(MACRO, ...) \ -MACRO(334, __VA_ARGS__) \ -DO_333(MACRO, __VA_ARGS__) - - -#define DO_335(MACRO, ...) \ -MACRO(335, __VA_ARGS__) \ -DO_334(MACRO, __VA_ARGS__) - - -#define DO_336(MACRO, ...) \ -MACRO(336, __VA_ARGS__) \ -DO_335(MACRO, __VA_ARGS__) - - -#define DO_337(MACRO, ...) \ -MACRO(337, __VA_ARGS__) \ -DO_336(MACRO, __VA_ARGS__) - - -#define DO_338(MACRO, ...) \ -MACRO(338, __VA_ARGS__) \ -DO_337(MACRO, __VA_ARGS__) - - -#define DO_339(MACRO, ...) \ -MACRO(339, __VA_ARGS__) \ -DO_338(MACRO, __VA_ARGS__) - - -#define DO_340(MACRO, ...) \ -MACRO(340, __VA_ARGS__) \ -DO_339(MACRO, __VA_ARGS__) - - -#define DO_341(MACRO, ...) \ -MACRO(341, __VA_ARGS__) \ -DO_340(MACRO, __VA_ARGS__) - - -#define DO_342(MACRO, ...) \ -MACRO(342, __VA_ARGS__) \ -DO_341(MACRO, __VA_ARGS__) - - -#define DO_343(MACRO, ...) \ -MACRO(343, __VA_ARGS__) \ -DO_342(MACRO, __VA_ARGS__) - - -#define DO_344(MACRO, ...) \ -MACRO(344, __VA_ARGS__) \ -DO_343(MACRO, __VA_ARGS__) - - -#define DO_345(MACRO, ...) \ -MACRO(345, __VA_ARGS__) \ -DO_344(MACRO, __VA_ARGS__) - - -#define DO_346(MACRO, ...) \ -MACRO(346, __VA_ARGS__) \ -DO_345(MACRO, __VA_ARGS__) - - -#define DO_347(MACRO, ...) \ -MACRO(347, __VA_ARGS__) \ -DO_346(MACRO, __VA_ARGS__) - - -#define DO_348(MACRO, ...) \ -MACRO(348, __VA_ARGS__) \ -DO_347(MACRO, __VA_ARGS__) - - -#define DO_349(MACRO, ...) \ -MACRO(349, __VA_ARGS__) \ -DO_348(MACRO, __VA_ARGS__) - - -#define DO_350(MACRO, ...) \ -MACRO(350, __VA_ARGS__) \ -DO_349(MACRO, __VA_ARGS__) - - -#define DO_351(MACRO, ...) \ -MACRO(351, __VA_ARGS__) \ -DO_350(MACRO, __VA_ARGS__) - - -#define DO_352(MACRO, ...) \ -MACRO(352, __VA_ARGS__) \ -DO_351(MACRO, __VA_ARGS__) - - -#define DO_353(MACRO, ...) \ -MACRO(353, __VA_ARGS__) \ -DO_352(MACRO, __VA_ARGS__) - - -#define DO_354(MACRO, ...) \ -MACRO(354, __VA_ARGS__) \ -DO_353(MACRO, __VA_ARGS__) - - -#define DO_355(MACRO, ...) \ -MACRO(355, __VA_ARGS__) \ -DO_354(MACRO, __VA_ARGS__) - - -#define DO_356(MACRO, ...) \ -MACRO(356, __VA_ARGS__) \ -DO_355(MACRO, __VA_ARGS__) - - -#define DO_357(MACRO, ...) \ -MACRO(357, __VA_ARGS__) \ -DO_356(MACRO, __VA_ARGS__) - - -#define DO_358(MACRO, ...) \ -MACRO(358, __VA_ARGS__) \ -DO_357(MACRO, __VA_ARGS__) - - -#define DO_359(MACRO, ...) \ -MACRO(359, __VA_ARGS__) \ -DO_358(MACRO, __VA_ARGS__) - - -#define DO_360(MACRO, ...) \ -MACRO(360, __VA_ARGS__) \ -DO_359(MACRO, __VA_ARGS__) - - -#define DO_361(MACRO, ...) \ -MACRO(361, __VA_ARGS__) \ -DO_360(MACRO, __VA_ARGS__) - - -#define DO_362(MACRO, ...) \ -MACRO(362, __VA_ARGS__) \ -DO_361(MACRO, __VA_ARGS__) - - -#define DO_363(MACRO, ...) \ -MACRO(363, __VA_ARGS__) \ -DO_362(MACRO, __VA_ARGS__) - - -#define DO_364(MACRO, ...) \ -MACRO(364, __VA_ARGS__) \ -DO_363(MACRO, __VA_ARGS__) - - -#define DO_365(MACRO, ...) \ -MACRO(365, __VA_ARGS__) \ -DO_364(MACRO, __VA_ARGS__) - - -#define DO_366(MACRO, ...) \ -MACRO(366, __VA_ARGS__) \ -DO_365(MACRO, __VA_ARGS__) - - -#define DO_367(MACRO, ...) \ -MACRO(367, __VA_ARGS__) \ -DO_366(MACRO, __VA_ARGS__) - - -#define DO_368(MACRO, ...) \ -MACRO(368, __VA_ARGS__) \ -DO_367(MACRO, __VA_ARGS__) - - -#define DO_369(MACRO, ...) \ -MACRO(369, __VA_ARGS__) \ -DO_368(MACRO, __VA_ARGS__) - - -#define DO_370(MACRO, ...) \ -MACRO(370, __VA_ARGS__) \ -DO_369(MACRO, __VA_ARGS__) - - -#define DO_371(MACRO, ...) \ -MACRO(371, __VA_ARGS__) \ -DO_370(MACRO, __VA_ARGS__) - - -#define DO_372(MACRO, ...) \ -MACRO(372, __VA_ARGS__) \ -DO_371(MACRO, __VA_ARGS__) - - -#define DO_373(MACRO, ...) \ -MACRO(373, __VA_ARGS__) \ -DO_372(MACRO, __VA_ARGS__) - - -#define DO_374(MACRO, ...) \ -MACRO(374, __VA_ARGS__) \ -DO_373(MACRO, __VA_ARGS__) - - -#define DO_375(MACRO, ...) \ -MACRO(375, __VA_ARGS__) \ -DO_374(MACRO, __VA_ARGS__) - - -#define DO_376(MACRO, ...) \ -MACRO(376, __VA_ARGS__) \ -DO_375(MACRO, __VA_ARGS__) - - -#define DO_377(MACRO, ...) \ -MACRO(377, __VA_ARGS__) \ -DO_376(MACRO, __VA_ARGS__) - - -#define DO_378(MACRO, ...) \ -MACRO(378, __VA_ARGS__) \ -DO_377(MACRO, __VA_ARGS__) - - -#define DO_379(MACRO, ...) \ -MACRO(379, __VA_ARGS__) \ -DO_378(MACRO, __VA_ARGS__) - - -#define DO_380(MACRO, ...) \ -MACRO(380, __VA_ARGS__) \ -DO_379(MACRO, __VA_ARGS__) - - -#define DO_381(MACRO, ...) \ -MACRO(381, __VA_ARGS__) \ -DO_380(MACRO, __VA_ARGS__) - - -#define DO_382(MACRO, ...) \ -MACRO(382, __VA_ARGS__) \ -DO_381(MACRO, __VA_ARGS__) - - -#define DO_383(MACRO, ...) \ -MACRO(383, __VA_ARGS__) \ -DO_382(MACRO, __VA_ARGS__) - - -#define DO_384(MACRO, ...) \ -MACRO(384, __VA_ARGS__) \ -DO_383(MACRO, __VA_ARGS__) - - -#define DO_385(MACRO, ...) \ -MACRO(385, __VA_ARGS__) \ -DO_384(MACRO, __VA_ARGS__) - - -#define DO_386(MACRO, ...) \ -MACRO(386, __VA_ARGS__) \ -DO_385(MACRO, __VA_ARGS__) - - -#define DO_387(MACRO, ...) \ -MACRO(387, __VA_ARGS__) \ -DO_386(MACRO, __VA_ARGS__) - - -#define DO_388(MACRO, ...) \ -MACRO(388, __VA_ARGS__) \ -DO_387(MACRO, __VA_ARGS__) - - -#define DO_389(MACRO, ...) \ -MACRO(389, __VA_ARGS__) \ -DO_388(MACRO, __VA_ARGS__) - - -#define DO_390(MACRO, ...) \ -MACRO(390, __VA_ARGS__) \ -DO_389(MACRO, __VA_ARGS__) - - -#define DO_391(MACRO, ...) \ -MACRO(391, __VA_ARGS__) \ -DO_390(MACRO, __VA_ARGS__) - - -#define DO_392(MACRO, ...) \ -MACRO(392, __VA_ARGS__) \ -DO_391(MACRO, __VA_ARGS__) - - -#define DO_393(MACRO, ...) \ -MACRO(393, __VA_ARGS__) \ -DO_392(MACRO, __VA_ARGS__) - - -#define DO_394(MACRO, ...) \ -MACRO(394, __VA_ARGS__) \ -DO_393(MACRO, __VA_ARGS__) - - -#define DO_395(MACRO, ...) \ -MACRO(395, __VA_ARGS__) \ -DO_394(MACRO, __VA_ARGS__) - - -#define DO_396(MACRO, ...) \ -MACRO(396, __VA_ARGS__) \ -DO_395(MACRO, __VA_ARGS__) - - -#define DO_397(MACRO, ...) \ -MACRO(397, __VA_ARGS__) \ -DO_396(MACRO, __VA_ARGS__) - - -#define DO_398(MACRO, ...) \ -MACRO(398, __VA_ARGS__) \ -DO_397(MACRO, __VA_ARGS__) - - -#define DO_399(MACRO, ...) \ -MACRO(399, __VA_ARGS__) \ -DO_398(MACRO, __VA_ARGS__) - - -#define DO_400(MACRO, ...) \ -MACRO(400, __VA_ARGS__) \ -DO_399(MACRO, __VA_ARGS__) - - -#define DO_401(MACRO, ...) \ -MACRO(401, __VA_ARGS__) \ -DO_400(MACRO, __VA_ARGS__) - - -#define DO_402(MACRO, ...) \ -MACRO(402, __VA_ARGS__) \ -DO_401(MACRO, __VA_ARGS__) - - -#define DO_403(MACRO, ...) \ -MACRO(403, __VA_ARGS__) \ -DO_402(MACRO, __VA_ARGS__) - - -#define DO_404(MACRO, ...) \ -MACRO(404, __VA_ARGS__) \ -DO_403(MACRO, __VA_ARGS__) - - -#define DO_405(MACRO, ...) \ -MACRO(405, __VA_ARGS__) \ -DO_404(MACRO, __VA_ARGS__) - - -#define DO_406(MACRO, ...) \ -MACRO(406, __VA_ARGS__) \ -DO_405(MACRO, __VA_ARGS__) - - -#define DO_407(MACRO, ...) \ -MACRO(407, __VA_ARGS__) \ -DO_406(MACRO, __VA_ARGS__) - - -#define DO_408(MACRO, ...) \ -MACRO(408, __VA_ARGS__) \ -DO_407(MACRO, __VA_ARGS__) - - -#define DO_409(MACRO, ...) \ -MACRO(409, __VA_ARGS__) \ -DO_408(MACRO, __VA_ARGS__) - - -#define DO_410(MACRO, ...) \ -MACRO(410, __VA_ARGS__) \ -DO_409(MACRO, __VA_ARGS__) - - -#define DO_411(MACRO, ...) \ -MACRO(411, __VA_ARGS__) \ -DO_410(MACRO, __VA_ARGS__) - - -#define DO_412(MACRO, ...) \ -MACRO(412, __VA_ARGS__) \ -DO_411(MACRO, __VA_ARGS__) - - -#define DO_413(MACRO, ...) \ -MACRO(413, __VA_ARGS__) \ -DO_412(MACRO, __VA_ARGS__) - - -#define DO_414(MACRO, ...) \ -MACRO(414, __VA_ARGS__) \ -DO_413(MACRO, __VA_ARGS__) - - -#define DO_415(MACRO, ...) \ -MACRO(415, __VA_ARGS__) \ -DO_414(MACRO, __VA_ARGS__) - - -#define DO_416(MACRO, ...) \ -MACRO(416, __VA_ARGS__) \ -DO_415(MACRO, __VA_ARGS__) - - -#define DO_417(MACRO, ...) \ -MACRO(417, __VA_ARGS__) \ -DO_416(MACRO, __VA_ARGS__) - - -#define DO_418(MACRO, ...) \ -MACRO(418, __VA_ARGS__) \ -DO_417(MACRO, __VA_ARGS__) - - -#define DO_419(MACRO, ...) \ -MACRO(419, __VA_ARGS__) \ -DO_418(MACRO, __VA_ARGS__) - - -#define DO_420(MACRO, ...) \ -MACRO(420, __VA_ARGS__) \ -DO_419(MACRO, __VA_ARGS__) - - -#define DO_421(MACRO, ...) \ -MACRO(421, __VA_ARGS__) \ -DO_420(MACRO, __VA_ARGS__) - - -#define DO_422(MACRO, ...) \ -MACRO(422, __VA_ARGS__) \ -DO_421(MACRO, __VA_ARGS__) - - -#define DO_423(MACRO, ...) \ -MACRO(423, __VA_ARGS__) \ -DO_422(MACRO, __VA_ARGS__) - - -#define DO_424(MACRO, ...) \ -MACRO(424, __VA_ARGS__) \ -DO_423(MACRO, __VA_ARGS__) - - -#define DO_425(MACRO, ...) \ -MACRO(425, __VA_ARGS__) \ -DO_424(MACRO, __VA_ARGS__) - - -#define DO_426(MACRO, ...) \ -MACRO(426, __VA_ARGS__) \ -DO_425(MACRO, __VA_ARGS__) - - -#define DO_427(MACRO, ...) \ -MACRO(427, __VA_ARGS__) \ -DO_426(MACRO, __VA_ARGS__) - - -#define DO_428(MACRO, ...) \ -MACRO(428, __VA_ARGS__) \ -DO_427(MACRO, __VA_ARGS__) - - -#define DO_429(MACRO, ...) \ -MACRO(429, __VA_ARGS__) \ -DO_428(MACRO, __VA_ARGS__) - - -#define DO_430(MACRO, ...) \ -MACRO(430, __VA_ARGS__) \ -DO_429(MACRO, __VA_ARGS__) - - -#define DO_431(MACRO, ...) \ -MACRO(431, __VA_ARGS__) \ -DO_430(MACRO, __VA_ARGS__) - - -#define DO_432(MACRO, ...) \ -MACRO(432, __VA_ARGS__) \ -DO_431(MACRO, __VA_ARGS__) - - -#define DO_433(MACRO, ...) \ -MACRO(433, __VA_ARGS__) \ -DO_432(MACRO, __VA_ARGS__) - - -#define DO_434(MACRO, ...) \ -MACRO(434, __VA_ARGS__) \ -DO_433(MACRO, __VA_ARGS__) - - -#define DO_435(MACRO, ...) \ -MACRO(435, __VA_ARGS__) \ -DO_434(MACRO, __VA_ARGS__) - - -#define DO_436(MACRO, ...) \ -MACRO(436, __VA_ARGS__) \ -DO_435(MACRO, __VA_ARGS__) - - -#define DO_437(MACRO, ...) \ -MACRO(437, __VA_ARGS__) \ -DO_436(MACRO, __VA_ARGS__) - - -#define DO_438(MACRO, ...) \ -MACRO(438, __VA_ARGS__) \ -DO_437(MACRO, __VA_ARGS__) - - -#define DO_439(MACRO, ...) \ -MACRO(439, __VA_ARGS__) \ -DO_438(MACRO, __VA_ARGS__) - - -#define DO_440(MACRO, ...) \ -MACRO(440, __VA_ARGS__) \ -DO_439(MACRO, __VA_ARGS__) - - -#define DO_441(MACRO, ...) \ -MACRO(441, __VA_ARGS__) \ -DO_440(MACRO, __VA_ARGS__) - - -#define DO_442(MACRO, ...) \ -MACRO(442, __VA_ARGS__) \ -DO_441(MACRO, __VA_ARGS__) - - -#define DO_443(MACRO, ...) \ -MACRO(443, __VA_ARGS__) \ -DO_442(MACRO, __VA_ARGS__) - - -#define DO_444(MACRO, ...) \ -MACRO(444, __VA_ARGS__) \ -DO_443(MACRO, __VA_ARGS__) - - -#define DO_445(MACRO, ...) \ -MACRO(445, __VA_ARGS__) \ -DO_444(MACRO, __VA_ARGS__) - - -#define DO_446(MACRO, ...) \ -MACRO(446, __VA_ARGS__) \ -DO_445(MACRO, __VA_ARGS__) - - -#define DO_447(MACRO, ...) \ -MACRO(447, __VA_ARGS__) \ -DO_446(MACRO, __VA_ARGS__) - - -#define DO_448(MACRO, ...) \ -MACRO(448, __VA_ARGS__) \ -DO_447(MACRO, __VA_ARGS__) - - -#define DO_449(MACRO, ...) \ -MACRO(449, __VA_ARGS__) \ -DO_448(MACRO, __VA_ARGS__) - - -#define DO_450(MACRO, ...) \ -MACRO(450, __VA_ARGS__) \ -DO_449(MACRO, __VA_ARGS__) - - -#define DO_451(MACRO, ...) \ -MACRO(451, __VA_ARGS__) \ -DO_450(MACRO, __VA_ARGS__) - - -#define DO_452(MACRO, ...) \ -MACRO(452, __VA_ARGS__) \ -DO_451(MACRO, __VA_ARGS__) - - -#define DO_453(MACRO, ...) \ -MACRO(453, __VA_ARGS__) \ -DO_452(MACRO, __VA_ARGS__) - - -#define DO_454(MACRO, ...) \ -MACRO(454, __VA_ARGS__) \ -DO_453(MACRO, __VA_ARGS__) - - -#define DO_455(MACRO, ...) \ -MACRO(455, __VA_ARGS__) \ -DO_454(MACRO, __VA_ARGS__) - - -#define DO_456(MACRO, ...) \ -MACRO(456, __VA_ARGS__) \ -DO_455(MACRO, __VA_ARGS__) - - -#define DO_457(MACRO, ...) \ -MACRO(457, __VA_ARGS__) \ -DO_456(MACRO, __VA_ARGS__) - - -#define DO_458(MACRO, ...) \ -MACRO(458, __VA_ARGS__) \ -DO_457(MACRO, __VA_ARGS__) - - -#define DO_459(MACRO, ...) \ -MACRO(459, __VA_ARGS__) \ -DO_458(MACRO, __VA_ARGS__) - - -#define DO_460(MACRO, ...) \ -MACRO(460, __VA_ARGS__) \ -DO_459(MACRO, __VA_ARGS__) - - -#define DO_461(MACRO, ...) \ -MACRO(461, __VA_ARGS__) \ -DO_460(MACRO, __VA_ARGS__) - - -#define DO_462(MACRO, ...) \ -MACRO(462, __VA_ARGS__) \ -DO_461(MACRO, __VA_ARGS__) - - -#define DO_463(MACRO, ...) \ -MACRO(463, __VA_ARGS__) \ -DO_462(MACRO, __VA_ARGS__) - - -#define DO_464(MACRO, ...) \ -MACRO(464, __VA_ARGS__) \ -DO_463(MACRO, __VA_ARGS__) - - -#define DO_465(MACRO, ...) \ -MACRO(465, __VA_ARGS__) \ -DO_464(MACRO, __VA_ARGS__) - - -#define DO_466(MACRO, ...) \ -MACRO(466, __VA_ARGS__) \ -DO_465(MACRO, __VA_ARGS__) - - -#define DO_467(MACRO, ...) \ -MACRO(467, __VA_ARGS__) \ -DO_466(MACRO, __VA_ARGS__) - - -#define DO_468(MACRO, ...) \ -MACRO(468, __VA_ARGS__) \ -DO_467(MACRO, __VA_ARGS__) - - -#define DO_469(MACRO, ...) \ -MACRO(469, __VA_ARGS__) \ -DO_468(MACRO, __VA_ARGS__) - - -#define DO_470(MACRO, ...) \ -MACRO(470, __VA_ARGS__) \ -DO_469(MACRO, __VA_ARGS__) - - -#define DO_471(MACRO, ...) \ -MACRO(471, __VA_ARGS__) \ -DO_470(MACRO, __VA_ARGS__) - - -#define DO_472(MACRO, ...) \ -MACRO(472, __VA_ARGS__) \ -DO_471(MACRO, __VA_ARGS__) - - -#define DO_473(MACRO, ...) \ -MACRO(473, __VA_ARGS__) \ -DO_472(MACRO, __VA_ARGS__) - - -#define DO_474(MACRO, ...) \ -MACRO(474, __VA_ARGS__) \ -DO_473(MACRO, __VA_ARGS__) - - -#define DO_475(MACRO, ...) \ -MACRO(475, __VA_ARGS__) \ -DO_474(MACRO, __VA_ARGS__) - - -#define DO_476(MACRO, ...) \ -MACRO(476, __VA_ARGS__) \ -DO_475(MACRO, __VA_ARGS__) - - -#define DO_477(MACRO, ...) \ -MACRO(477, __VA_ARGS__) \ -DO_476(MACRO, __VA_ARGS__) - - -#define DO_478(MACRO, ...) \ -MACRO(478, __VA_ARGS__) \ -DO_477(MACRO, __VA_ARGS__) - - -#define DO_479(MACRO, ...) \ -MACRO(479, __VA_ARGS__) \ -DO_478(MACRO, __VA_ARGS__) - - -#define DO_480(MACRO, ...) \ -MACRO(480, __VA_ARGS__) \ -DO_479(MACRO, __VA_ARGS__) - - -#define DO_481(MACRO, ...) \ -MACRO(481, __VA_ARGS__) \ -DO_480(MACRO, __VA_ARGS__) - - -#define DO_482(MACRO, ...) \ -MACRO(482, __VA_ARGS__) \ -DO_481(MACRO, __VA_ARGS__) - - -#define DO_483(MACRO, ...) \ -MACRO(483, __VA_ARGS__) \ -DO_482(MACRO, __VA_ARGS__) - - -#define DO_484(MACRO, ...) \ -MACRO(484, __VA_ARGS__) \ -DO_483(MACRO, __VA_ARGS__) - - -#define DO_485(MACRO, ...) \ -MACRO(485, __VA_ARGS__) \ -DO_484(MACRO, __VA_ARGS__) - - -#define DO_486(MACRO, ...) \ -MACRO(486, __VA_ARGS__) \ -DO_485(MACRO, __VA_ARGS__) - - -#define DO_487(MACRO, ...) \ -MACRO(487, __VA_ARGS__) \ -DO_486(MACRO, __VA_ARGS__) - - -#define DO_488(MACRO, ...) \ -MACRO(488, __VA_ARGS__) \ -DO_487(MACRO, __VA_ARGS__) - - -#define DO_489(MACRO, ...) \ -MACRO(489, __VA_ARGS__) \ -DO_488(MACRO, __VA_ARGS__) - - -#define DO_490(MACRO, ...) \ -MACRO(490, __VA_ARGS__) \ -DO_489(MACRO, __VA_ARGS__) - - -#define DO_491(MACRO, ...) \ -MACRO(491, __VA_ARGS__) \ -DO_490(MACRO, __VA_ARGS__) - - -#define DO_492(MACRO, ...) \ -MACRO(492, __VA_ARGS__) \ -DO_491(MACRO, __VA_ARGS__) - - -#define DO_493(MACRO, ...) \ -MACRO(493, __VA_ARGS__) \ -DO_492(MACRO, __VA_ARGS__) - - -#define DO_494(MACRO, ...) \ -MACRO(494, __VA_ARGS__) \ -DO_493(MACRO, __VA_ARGS__) - - -#define DO_495(MACRO, ...) \ -MACRO(495, __VA_ARGS__) \ -DO_494(MACRO, __VA_ARGS__) - - -#define DO_496(MACRO, ...) \ -MACRO(496, __VA_ARGS__) \ -DO_495(MACRO, __VA_ARGS__) - - -#define DO_497(MACRO, ...) \ -MACRO(497, __VA_ARGS__) \ -DO_496(MACRO, __VA_ARGS__) - - -#define DO_498(MACRO, ...) \ -MACRO(498, __VA_ARGS__) \ -DO_497(MACRO, __VA_ARGS__) - - -#define DO_499(MACRO, ...) \ -MACRO(499, __VA_ARGS__) \ -DO_498(MACRO, __VA_ARGS__) - - -#define DO_500(MACRO, ...) \ -MACRO(500, __VA_ARGS__) \ -DO_499(MACRO, __VA_ARGS__) - - -#define DO_501(MACRO, ...) \ -MACRO(501, __VA_ARGS__) \ -DO_500(MACRO, __VA_ARGS__) - - -#define DO_502(MACRO, ...) \ -MACRO(502, __VA_ARGS__) \ -DO_501(MACRO, __VA_ARGS__) - - -#define DO_503(MACRO, ...) \ -MACRO(503, __VA_ARGS__) \ -DO_502(MACRO, __VA_ARGS__) - - -#define DO_504(MACRO, ...) \ -MACRO(504, __VA_ARGS__) \ -DO_503(MACRO, __VA_ARGS__) - - -#define DO_505(MACRO, ...) \ -MACRO(505, __VA_ARGS__) \ -DO_504(MACRO, __VA_ARGS__) - - -#define DO_506(MACRO, ...) \ -MACRO(506, __VA_ARGS__) \ -DO_505(MACRO, __VA_ARGS__) - - -#define DO_507(MACRO, ...) \ -MACRO(507, __VA_ARGS__) \ -DO_506(MACRO, __VA_ARGS__) - - -#define DO_508(MACRO, ...) \ -MACRO(508, __VA_ARGS__) \ -DO_507(MACRO, __VA_ARGS__) - - -#define DO_509(MACRO, ...) \ -MACRO(509, __VA_ARGS__) \ -DO_508(MACRO, __VA_ARGS__) - - -#define DO_510(MACRO, ...) \ -MACRO(510, __VA_ARGS__) \ -DO_509(MACRO, __VA_ARGS__) - - -#define DO_511(MACRO, ...) \ -MACRO(511, __VA_ARGS__) \ -DO_510(MACRO, __VA_ARGS__) - - -#define DO_512(MACRO, ...) \ -MACRO(512, __VA_ARGS__) \ -DO_511(MACRO, __VA_ARGS__) - - -#define DO_513(MACRO, ...) \ -MACRO(513, __VA_ARGS__) \ -DO_512(MACRO, __VA_ARGS__) - - -#define DO_514(MACRO, ...) \ -MACRO(514, __VA_ARGS__) \ -DO_513(MACRO, __VA_ARGS__) - - -#define DO_515(MACRO, ...) \ -MACRO(515, __VA_ARGS__) \ -DO_514(MACRO, __VA_ARGS__) - - -#define DO_516(MACRO, ...) \ -MACRO(516, __VA_ARGS__) \ -DO_515(MACRO, __VA_ARGS__) - - -#define DO_517(MACRO, ...) \ -MACRO(517, __VA_ARGS__) \ -DO_516(MACRO, __VA_ARGS__) - - -#define DO_518(MACRO, ...) \ -MACRO(518, __VA_ARGS__) \ -DO_517(MACRO, __VA_ARGS__) - - -#define DO_519(MACRO, ...) \ -MACRO(519, __VA_ARGS__) \ -DO_518(MACRO, __VA_ARGS__) - - -#define DO_520(MACRO, ...) \ -MACRO(520, __VA_ARGS__) \ -DO_519(MACRO, __VA_ARGS__) - - -#define DO_521(MACRO, ...) \ -MACRO(521, __VA_ARGS__) \ -DO_520(MACRO, __VA_ARGS__) - - -#define DO_522(MACRO, ...) \ -MACRO(522, __VA_ARGS__) \ -DO_521(MACRO, __VA_ARGS__) - - -#define DO_523(MACRO, ...) \ -MACRO(523, __VA_ARGS__) \ -DO_522(MACRO, __VA_ARGS__) - - -#define DO_524(MACRO, ...) \ -MACRO(524, __VA_ARGS__) \ -DO_523(MACRO, __VA_ARGS__) - - -#define DO_525(MACRO, ...) \ -MACRO(525, __VA_ARGS__) \ -DO_524(MACRO, __VA_ARGS__) - - -#define DO_526(MACRO, ...) \ -MACRO(526, __VA_ARGS__) \ -DO_525(MACRO, __VA_ARGS__) - - -#define DO_527(MACRO, ...) \ -MACRO(527, __VA_ARGS__) \ -DO_526(MACRO, __VA_ARGS__) - - -#define DO_528(MACRO, ...) \ -MACRO(528, __VA_ARGS__) \ -DO_527(MACRO, __VA_ARGS__) - - -#define DO_529(MACRO, ...) \ -MACRO(529, __VA_ARGS__) \ -DO_528(MACRO, __VA_ARGS__) - - -#define DO_530(MACRO, ...) \ -MACRO(530, __VA_ARGS__) \ -DO_529(MACRO, __VA_ARGS__) - - -#define DO_531(MACRO, ...) \ -MACRO(531, __VA_ARGS__) \ -DO_530(MACRO, __VA_ARGS__) - - -#define DO_532(MACRO, ...) \ -MACRO(532, __VA_ARGS__) \ -DO_531(MACRO, __VA_ARGS__) - - -#define DO_533(MACRO, ...) \ -MACRO(533, __VA_ARGS__) \ -DO_532(MACRO, __VA_ARGS__) - - -#define DO_534(MACRO, ...) \ -MACRO(534, __VA_ARGS__) \ -DO_533(MACRO, __VA_ARGS__) - - -#define DO_535(MACRO, ...) \ -MACRO(535, __VA_ARGS__) \ -DO_534(MACRO, __VA_ARGS__) - - -#define DO_536(MACRO, ...) \ -MACRO(536, __VA_ARGS__) \ -DO_535(MACRO, __VA_ARGS__) - - -#define DO_537(MACRO, ...) \ -MACRO(537, __VA_ARGS__) \ -DO_536(MACRO, __VA_ARGS__) - - -#define DO_538(MACRO, ...) \ -MACRO(538, __VA_ARGS__) \ -DO_537(MACRO, __VA_ARGS__) - - -#define DO_539(MACRO, ...) \ -MACRO(539, __VA_ARGS__) \ -DO_538(MACRO, __VA_ARGS__) - - -#define DO_540(MACRO, ...) \ -MACRO(540, __VA_ARGS__) \ -DO_539(MACRO, __VA_ARGS__) - - -#define DO_541(MACRO, ...) \ -MACRO(541, __VA_ARGS__) \ -DO_540(MACRO, __VA_ARGS__) - - -#define DO_542(MACRO, ...) \ -MACRO(542, __VA_ARGS__) \ -DO_541(MACRO, __VA_ARGS__) - - -#define DO_543(MACRO, ...) \ -MACRO(543, __VA_ARGS__) \ -DO_542(MACRO, __VA_ARGS__) - - -#define DO_544(MACRO, ...) \ -MACRO(544, __VA_ARGS__) \ -DO_543(MACRO, __VA_ARGS__) - - -#define DO_545(MACRO, ...) \ -MACRO(545, __VA_ARGS__) \ -DO_544(MACRO, __VA_ARGS__) - - -#define DO_546(MACRO, ...) \ -MACRO(546, __VA_ARGS__) \ -DO_545(MACRO, __VA_ARGS__) - - -#define DO_547(MACRO, ...) \ -MACRO(547, __VA_ARGS__) \ -DO_546(MACRO, __VA_ARGS__) - - -#define DO_548(MACRO, ...) \ -MACRO(548, __VA_ARGS__) \ -DO_547(MACRO, __VA_ARGS__) - - -#define DO_549(MACRO, ...) \ -MACRO(549, __VA_ARGS__) \ -DO_548(MACRO, __VA_ARGS__) - - -#define DO_550(MACRO, ...) \ -MACRO(550, __VA_ARGS__) \ -DO_549(MACRO, __VA_ARGS__) - - -#define DO_551(MACRO, ...) \ -MACRO(551, __VA_ARGS__) \ -DO_550(MACRO, __VA_ARGS__) - - -#define DO_552(MACRO, ...) \ -MACRO(552, __VA_ARGS__) \ -DO_551(MACRO, __VA_ARGS__) - - -#define DO_553(MACRO, ...) \ -MACRO(553, __VA_ARGS__) \ -DO_552(MACRO, __VA_ARGS__) - - -#define DO_554(MACRO, ...) \ -MACRO(554, __VA_ARGS__) \ -DO_553(MACRO, __VA_ARGS__) - - -#define DO_555(MACRO, ...) \ -MACRO(555, __VA_ARGS__) \ -DO_554(MACRO, __VA_ARGS__) - - -#define DO_556(MACRO, ...) \ -MACRO(556, __VA_ARGS__) \ -DO_555(MACRO, __VA_ARGS__) - - -#define DO_557(MACRO, ...) \ -MACRO(557, __VA_ARGS__) \ -DO_556(MACRO, __VA_ARGS__) - - -#define DO_558(MACRO, ...) \ -MACRO(558, __VA_ARGS__) \ -DO_557(MACRO, __VA_ARGS__) - - -#define DO_559(MACRO, ...) \ -MACRO(559, __VA_ARGS__) \ -DO_558(MACRO, __VA_ARGS__) - - -#define DO_560(MACRO, ...) \ -MACRO(560, __VA_ARGS__) \ -DO_559(MACRO, __VA_ARGS__) - - -#define DO_561(MACRO, ...) \ -MACRO(561, __VA_ARGS__) \ -DO_560(MACRO, __VA_ARGS__) - - -#define DO_562(MACRO, ...) \ -MACRO(562, __VA_ARGS__) \ -DO_561(MACRO, __VA_ARGS__) - - -#define DO_563(MACRO, ...) \ -MACRO(563, __VA_ARGS__) \ -DO_562(MACRO, __VA_ARGS__) - - -#define DO_564(MACRO, ...) \ -MACRO(564, __VA_ARGS__) \ -DO_563(MACRO, __VA_ARGS__) - - -#define DO_565(MACRO, ...) \ -MACRO(565, __VA_ARGS__) \ -DO_564(MACRO, __VA_ARGS__) - - -#define DO_566(MACRO, ...) \ -MACRO(566, __VA_ARGS__) \ -DO_565(MACRO, __VA_ARGS__) - - -#define DO_567(MACRO, ...) \ -MACRO(567, __VA_ARGS__) \ -DO_566(MACRO, __VA_ARGS__) - - -#define DO_568(MACRO, ...) \ -MACRO(568, __VA_ARGS__) \ -DO_567(MACRO, __VA_ARGS__) - - -#define DO_569(MACRO, ...) \ -MACRO(569, __VA_ARGS__) \ -DO_568(MACRO, __VA_ARGS__) - - -#define DO_570(MACRO, ...) \ -MACRO(570, __VA_ARGS__) \ -DO_569(MACRO, __VA_ARGS__) - - -#define DO_571(MACRO, ...) \ -MACRO(571, __VA_ARGS__) \ -DO_570(MACRO, __VA_ARGS__) - - -#define DO_572(MACRO, ...) \ -MACRO(572, __VA_ARGS__) \ -DO_571(MACRO, __VA_ARGS__) - - -#define DO_573(MACRO, ...) \ -MACRO(573, __VA_ARGS__) \ -DO_572(MACRO, __VA_ARGS__) - - -#define DO_574(MACRO, ...) \ -MACRO(574, __VA_ARGS__) \ -DO_573(MACRO, __VA_ARGS__) - - -#define DO_575(MACRO, ...) \ -MACRO(575, __VA_ARGS__) \ -DO_574(MACRO, __VA_ARGS__) - - -#define DO_576(MACRO, ...) \ -MACRO(576, __VA_ARGS__) \ -DO_575(MACRO, __VA_ARGS__) - - -#define DO_577(MACRO, ...) \ -MACRO(577, __VA_ARGS__) \ -DO_576(MACRO, __VA_ARGS__) - - -#define DO_578(MACRO, ...) \ -MACRO(578, __VA_ARGS__) \ -DO_577(MACRO, __VA_ARGS__) - - -#define DO_579(MACRO, ...) \ -MACRO(579, __VA_ARGS__) \ -DO_578(MACRO, __VA_ARGS__) - - -#define DO_580(MACRO, ...) \ -MACRO(580, __VA_ARGS__) \ -DO_579(MACRO, __VA_ARGS__) - - -#define DO_581(MACRO, ...) \ -MACRO(581, __VA_ARGS__) \ -DO_580(MACRO, __VA_ARGS__) - - -#define DO_582(MACRO, ...) \ -MACRO(582, __VA_ARGS__) \ -DO_581(MACRO, __VA_ARGS__) - - -#define DO_583(MACRO, ...) \ -MACRO(583, __VA_ARGS__) \ -DO_582(MACRO, __VA_ARGS__) - - -#define DO_584(MACRO, ...) \ -MACRO(584, __VA_ARGS__) \ -DO_583(MACRO, __VA_ARGS__) - - -#define DO_585(MACRO, ...) \ -MACRO(585, __VA_ARGS__) \ -DO_584(MACRO, __VA_ARGS__) - - -#define DO_586(MACRO, ...) \ -MACRO(586, __VA_ARGS__) \ -DO_585(MACRO, __VA_ARGS__) - - -#define DO_587(MACRO, ...) \ -MACRO(587, __VA_ARGS__) \ -DO_586(MACRO, __VA_ARGS__) - - -#define DO_588(MACRO, ...) \ -MACRO(588, __VA_ARGS__) \ -DO_587(MACRO, __VA_ARGS__) - - -#define DO_589(MACRO, ...) \ -MACRO(589, __VA_ARGS__) \ -DO_588(MACRO, __VA_ARGS__) - - -#define DO_590(MACRO, ...) \ -MACRO(590, __VA_ARGS__) \ -DO_589(MACRO, __VA_ARGS__) - - -#define DO_591(MACRO, ...) \ -MACRO(591, __VA_ARGS__) \ -DO_590(MACRO, __VA_ARGS__) - - -#define DO_592(MACRO, ...) \ -MACRO(592, __VA_ARGS__) \ -DO_591(MACRO, __VA_ARGS__) - - -#define DO_593(MACRO, ...) \ -MACRO(593, __VA_ARGS__) \ -DO_592(MACRO, __VA_ARGS__) - - -#define DO_594(MACRO, ...) \ -MACRO(594, __VA_ARGS__) \ -DO_593(MACRO, __VA_ARGS__) - - -#define DO_595(MACRO, ...) \ -MACRO(595, __VA_ARGS__) \ -DO_594(MACRO, __VA_ARGS__) - - -#define DO_596(MACRO, ...) \ -MACRO(596, __VA_ARGS__) \ -DO_595(MACRO, __VA_ARGS__) - - -#define DO_597(MACRO, ...) \ -MACRO(597, __VA_ARGS__) \ -DO_596(MACRO, __VA_ARGS__) - - -#define DO_598(MACRO, ...) \ -MACRO(598, __VA_ARGS__) \ -DO_597(MACRO, __VA_ARGS__) - - -#define DO_599(MACRO, ...) \ -MACRO(599, __VA_ARGS__) \ -DO_598(MACRO, __VA_ARGS__) - - -#define DO_600(MACRO, ...) \ -MACRO(600, __VA_ARGS__) \ -DO_599(MACRO, __VA_ARGS__) - - -#define DO_601(MACRO, ...) \ -MACRO(601, __VA_ARGS__) \ -DO_600(MACRO, __VA_ARGS__) - - -#define DO_602(MACRO, ...) \ -MACRO(602, __VA_ARGS__) \ -DO_601(MACRO, __VA_ARGS__) - - -#define DO_603(MACRO, ...) \ -MACRO(603, __VA_ARGS__) \ -DO_602(MACRO, __VA_ARGS__) - - -#define DO_604(MACRO, ...) \ -MACRO(604, __VA_ARGS__) \ -DO_603(MACRO, __VA_ARGS__) - - -#define DO_605(MACRO, ...) \ -MACRO(605, __VA_ARGS__) \ -DO_604(MACRO, __VA_ARGS__) - - -#define DO_606(MACRO, ...) \ -MACRO(606, __VA_ARGS__) \ -DO_605(MACRO, __VA_ARGS__) - - -#define DO_607(MACRO, ...) \ -MACRO(607, __VA_ARGS__) \ -DO_606(MACRO, __VA_ARGS__) - - -#define DO_608(MACRO, ...) \ -MACRO(608, __VA_ARGS__) \ -DO_607(MACRO, __VA_ARGS__) - - -#define DO_609(MACRO, ...) \ -MACRO(609, __VA_ARGS__) \ -DO_608(MACRO, __VA_ARGS__) - - -#define DO_610(MACRO, ...) \ -MACRO(610, __VA_ARGS__) \ -DO_609(MACRO, __VA_ARGS__) - - -#define DO_611(MACRO, ...) \ -MACRO(611, __VA_ARGS__) \ -DO_610(MACRO, __VA_ARGS__) - - -#define DO_612(MACRO, ...) \ -MACRO(612, __VA_ARGS__) \ -DO_611(MACRO, __VA_ARGS__) - - -#define DO_613(MACRO, ...) \ -MACRO(613, __VA_ARGS__) \ -DO_612(MACRO, __VA_ARGS__) - - -#define DO_614(MACRO, ...) \ -MACRO(614, __VA_ARGS__) \ -DO_613(MACRO, __VA_ARGS__) - - -#define DO_615(MACRO, ...) \ -MACRO(615, __VA_ARGS__) \ -DO_614(MACRO, __VA_ARGS__) - - -#define DO_616(MACRO, ...) \ -MACRO(616, __VA_ARGS__) \ -DO_615(MACRO, __VA_ARGS__) - - -#define DO_617(MACRO, ...) \ -MACRO(617, __VA_ARGS__) \ -DO_616(MACRO, __VA_ARGS__) - - -#define DO_618(MACRO, ...) \ -MACRO(618, __VA_ARGS__) \ -DO_617(MACRO, __VA_ARGS__) - - -#define DO_619(MACRO, ...) \ -MACRO(619, __VA_ARGS__) \ -DO_618(MACRO, __VA_ARGS__) - - -#define DO_620(MACRO, ...) \ -MACRO(620, __VA_ARGS__) \ -DO_619(MACRO, __VA_ARGS__) - - -#define DO_621(MACRO, ...) \ -MACRO(621, __VA_ARGS__) \ -DO_620(MACRO, __VA_ARGS__) - - -#define DO_622(MACRO, ...) \ -MACRO(622, __VA_ARGS__) \ -DO_621(MACRO, __VA_ARGS__) - - -#define DO_623(MACRO, ...) \ -MACRO(623, __VA_ARGS__) \ -DO_622(MACRO, __VA_ARGS__) - - -#define DO_624(MACRO, ...) \ -MACRO(624, __VA_ARGS__) \ -DO_623(MACRO, __VA_ARGS__) - - -#define DO_625(MACRO, ...) \ -MACRO(625, __VA_ARGS__) \ -DO_624(MACRO, __VA_ARGS__) - - -#define DO_626(MACRO, ...) \ -MACRO(626, __VA_ARGS__) \ -DO_625(MACRO, __VA_ARGS__) - - -#define DO_627(MACRO, ...) \ -MACRO(627, __VA_ARGS__) \ -DO_626(MACRO, __VA_ARGS__) - - -#define DO_628(MACRO, ...) \ -MACRO(628, __VA_ARGS__) \ -DO_627(MACRO, __VA_ARGS__) - - -#define DO_629(MACRO, ...) \ -MACRO(629, __VA_ARGS__) \ -DO_628(MACRO, __VA_ARGS__) - - -#define DO_630(MACRO, ...) \ -MACRO(630, __VA_ARGS__) \ -DO_629(MACRO, __VA_ARGS__) - - -#define DO_631(MACRO, ...) \ -MACRO(631, __VA_ARGS__) \ -DO_630(MACRO, __VA_ARGS__) - - -#define DO_632(MACRO, ...) \ -MACRO(632, __VA_ARGS__) \ -DO_631(MACRO, __VA_ARGS__) - - -#define DO_633(MACRO, ...) \ -MACRO(633, __VA_ARGS__) \ -DO_632(MACRO, __VA_ARGS__) - - -#define DO_634(MACRO, ...) \ -MACRO(634, __VA_ARGS__) \ -DO_633(MACRO, __VA_ARGS__) - - -#define DO_635(MACRO, ...) \ -MACRO(635, __VA_ARGS__) \ -DO_634(MACRO, __VA_ARGS__) - - -#define DO_636(MACRO, ...) \ -MACRO(636, __VA_ARGS__) \ -DO_635(MACRO, __VA_ARGS__) - - -#define DO_637(MACRO, ...) \ -MACRO(637, __VA_ARGS__) \ -DO_636(MACRO, __VA_ARGS__) - - -#define DO_638(MACRO, ...) \ -MACRO(638, __VA_ARGS__) \ -DO_637(MACRO, __VA_ARGS__) - - -#define DO_639(MACRO, ...) \ -MACRO(639, __VA_ARGS__) \ -DO_638(MACRO, __VA_ARGS__) - - -#define DO_640(MACRO, ...) \ -MACRO(640, __VA_ARGS__) \ -DO_639(MACRO, __VA_ARGS__) - - -#define DO_641(MACRO, ...) \ -MACRO(641, __VA_ARGS__) \ -DO_640(MACRO, __VA_ARGS__) - - -#define DO_642(MACRO, ...) \ -MACRO(642, __VA_ARGS__) \ -DO_641(MACRO, __VA_ARGS__) - - -#define DO_643(MACRO, ...) \ -MACRO(643, __VA_ARGS__) \ -DO_642(MACRO, __VA_ARGS__) - - -#define DO_644(MACRO, ...) \ -MACRO(644, __VA_ARGS__) \ -DO_643(MACRO, __VA_ARGS__) - - -#define DO_645(MACRO, ...) \ -MACRO(645, __VA_ARGS__) \ -DO_644(MACRO, __VA_ARGS__) - - -#define DO_646(MACRO, ...) \ -MACRO(646, __VA_ARGS__) \ -DO_645(MACRO, __VA_ARGS__) - - -#define DO_647(MACRO, ...) \ -MACRO(647, __VA_ARGS__) \ -DO_646(MACRO, __VA_ARGS__) - - -#define DO_648(MACRO, ...) \ -MACRO(648, __VA_ARGS__) \ -DO_647(MACRO, __VA_ARGS__) - - -#define DO_649(MACRO, ...) \ -MACRO(649, __VA_ARGS__) \ -DO_648(MACRO, __VA_ARGS__) - - -#define DO_650(MACRO, ...) \ -MACRO(650, __VA_ARGS__) \ -DO_649(MACRO, __VA_ARGS__) - - -#define DO_651(MACRO, ...) \ -MACRO(651, __VA_ARGS__) \ -DO_650(MACRO, __VA_ARGS__) - - -#define DO_652(MACRO, ...) \ -MACRO(652, __VA_ARGS__) \ -DO_651(MACRO, __VA_ARGS__) - - -#define DO_653(MACRO, ...) \ -MACRO(653, __VA_ARGS__) \ -DO_652(MACRO, __VA_ARGS__) - - -#define DO_654(MACRO, ...) \ -MACRO(654, __VA_ARGS__) \ -DO_653(MACRO, __VA_ARGS__) - - -#define DO_655(MACRO, ...) \ -MACRO(655, __VA_ARGS__) \ -DO_654(MACRO, __VA_ARGS__) - - -#define DO_656(MACRO, ...) \ -MACRO(656, __VA_ARGS__) \ -DO_655(MACRO, __VA_ARGS__) - - -#define DO_657(MACRO, ...) \ -MACRO(657, __VA_ARGS__) \ -DO_656(MACRO, __VA_ARGS__) - - -#define DO_658(MACRO, ...) \ -MACRO(658, __VA_ARGS__) \ -DO_657(MACRO, __VA_ARGS__) - - -#define DO_659(MACRO, ...) \ -MACRO(659, __VA_ARGS__) \ -DO_658(MACRO, __VA_ARGS__) - - -#define DO_660(MACRO, ...) \ -MACRO(660, __VA_ARGS__) \ -DO_659(MACRO, __VA_ARGS__) - - -#define DO_661(MACRO, ...) \ -MACRO(661, __VA_ARGS__) \ -DO_660(MACRO, __VA_ARGS__) - - -#define DO_662(MACRO, ...) \ -MACRO(662, __VA_ARGS__) \ -DO_661(MACRO, __VA_ARGS__) - - -#define DO_663(MACRO, ...) \ -MACRO(663, __VA_ARGS__) \ -DO_662(MACRO, __VA_ARGS__) - - -#define DO_664(MACRO, ...) \ -MACRO(664, __VA_ARGS__) \ -DO_663(MACRO, __VA_ARGS__) - - -#define DO_665(MACRO, ...) \ -MACRO(665, __VA_ARGS__) \ -DO_664(MACRO, __VA_ARGS__) - - -#define DO_666(MACRO, ...) \ -MACRO(666, __VA_ARGS__) \ -DO_665(MACRO, __VA_ARGS__) - - -#define DO_667(MACRO, ...) \ -MACRO(667, __VA_ARGS__) \ -DO_666(MACRO, __VA_ARGS__) - - -#define DO_668(MACRO, ...) \ -MACRO(668, __VA_ARGS__) \ -DO_667(MACRO, __VA_ARGS__) - - -#define DO_669(MACRO, ...) \ -MACRO(669, __VA_ARGS__) \ -DO_668(MACRO, __VA_ARGS__) - - -#define DO_670(MACRO, ...) \ -MACRO(670, __VA_ARGS__) \ -DO_669(MACRO, __VA_ARGS__) - - -#define DO_671(MACRO, ...) \ -MACRO(671, __VA_ARGS__) \ -DO_670(MACRO, __VA_ARGS__) - - -#define DO_672(MACRO, ...) \ -MACRO(672, __VA_ARGS__) \ -DO_671(MACRO, __VA_ARGS__) - - -#define DO_673(MACRO, ...) \ -MACRO(673, __VA_ARGS__) \ -DO_672(MACRO, __VA_ARGS__) - - -#define DO_674(MACRO, ...) \ -MACRO(674, __VA_ARGS__) \ -DO_673(MACRO, __VA_ARGS__) - - -#define DO_675(MACRO, ...) \ -MACRO(675, __VA_ARGS__) \ -DO_674(MACRO, __VA_ARGS__) - - -#define DO_676(MACRO, ...) \ -MACRO(676, __VA_ARGS__) \ -DO_675(MACRO, __VA_ARGS__) - - -#define DO_677(MACRO, ...) \ -MACRO(677, __VA_ARGS__) \ -DO_676(MACRO, __VA_ARGS__) - - -#define DO_678(MACRO, ...) \ -MACRO(678, __VA_ARGS__) \ -DO_677(MACRO, __VA_ARGS__) - - -#define DO_679(MACRO, ...) \ -MACRO(679, __VA_ARGS__) \ -DO_678(MACRO, __VA_ARGS__) - - -#define DO_680(MACRO, ...) \ -MACRO(680, __VA_ARGS__) \ -DO_679(MACRO, __VA_ARGS__) - - -#define DO_681(MACRO, ...) \ -MACRO(681, __VA_ARGS__) \ -DO_680(MACRO, __VA_ARGS__) - - -#define DO_682(MACRO, ...) \ -MACRO(682, __VA_ARGS__) \ -DO_681(MACRO, __VA_ARGS__) - - -#define DO_683(MACRO, ...) \ -MACRO(683, __VA_ARGS__) \ -DO_682(MACRO, __VA_ARGS__) - - -#define DO_684(MACRO, ...) \ -MACRO(684, __VA_ARGS__) \ -DO_683(MACRO, __VA_ARGS__) - - -#define DO_685(MACRO, ...) \ -MACRO(685, __VA_ARGS__) \ -DO_684(MACRO, __VA_ARGS__) - - -#define DO_686(MACRO, ...) \ -MACRO(686, __VA_ARGS__) \ -DO_685(MACRO, __VA_ARGS__) - - -#define DO_687(MACRO, ...) \ -MACRO(687, __VA_ARGS__) \ -DO_686(MACRO, __VA_ARGS__) - - -#define DO_688(MACRO, ...) \ -MACRO(688, __VA_ARGS__) \ -DO_687(MACRO, __VA_ARGS__) - - -#define DO_689(MACRO, ...) \ -MACRO(689, __VA_ARGS__) \ -DO_688(MACRO, __VA_ARGS__) - - -#define DO_690(MACRO, ...) \ -MACRO(690, __VA_ARGS__) \ -DO_689(MACRO, __VA_ARGS__) - - -#define DO_691(MACRO, ...) \ -MACRO(691, __VA_ARGS__) \ -DO_690(MACRO, __VA_ARGS__) - - -#define DO_692(MACRO, ...) \ -MACRO(692, __VA_ARGS__) \ -DO_691(MACRO, __VA_ARGS__) - - -#define DO_693(MACRO, ...) \ -MACRO(693, __VA_ARGS__) \ -DO_692(MACRO, __VA_ARGS__) - - -#define DO_694(MACRO, ...) \ -MACRO(694, __VA_ARGS__) \ -DO_693(MACRO, __VA_ARGS__) - - -#define DO_695(MACRO, ...) \ -MACRO(695, __VA_ARGS__) \ -DO_694(MACRO, __VA_ARGS__) - - -#define DO_696(MACRO, ...) \ -MACRO(696, __VA_ARGS__) \ -DO_695(MACRO, __VA_ARGS__) - - -#define DO_697(MACRO, ...) \ -MACRO(697, __VA_ARGS__) \ -DO_696(MACRO, __VA_ARGS__) - - -#define DO_698(MACRO, ...) \ -MACRO(698, __VA_ARGS__) \ -DO_697(MACRO, __VA_ARGS__) - - -#define DO_699(MACRO, ...) \ -MACRO(699, __VA_ARGS__) \ -DO_698(MACRO, __VA_ARGS__) - - -#define DO_700(MACRO, ...) \ -MACRO(700, __VA_ARGS__) \ -DO_699(MACRO, __VA_ARGS__) - - -#define DO_701(MACRO, ...) \ -MACRO(701, __VA_ARGS__) \ -DO_700(MACRO, __VA_ARGS__) - - -#define DO_702(MACRO, ...) \ -MACRO(702, __VA_ARGS__) \ -DO_701(MACRO, __VA_ARGS__) - - -#define DO_703(MACRO, ...) \ -MACRO(703, __VA_ARGS__) \ -DO_702(MACRO, __VA_ARGS__) - - -#define DO_704(MACRO, ...) \ -MACRO(704, __VA_ARGS__) \ -DO_703(MACRO, __VA_ARGS__) - - -#define DO_705(MACRO, ...) \ -MACRO(705, __VA_ARGS__) \ -DO_704(MACRO, __VA_ARGS__) - - -#define DO_706(MACRO, ...) \ -MACRO(706, __VA_ARGS__) \ -DO_705(MACRO, __VA_ARGS__) - - -#define DO_707(MACRO, ...) \ -MACRO(707, __VA_ARGS__) \ -DO_706(MACRO, __VA_ARGS__) - - -#define DO_708(MACRO, ...) \ -MACRO(708, __VA_ARGS__) \ -DO_707(MACRO, __VA_ARGS__) - - -#define DO_709(MACRO, ...) \ -MACRO(709, __VA_ARGS__) \ -DO_708(MACRO, __VA_ARGS__) - - -#define DO_710(MACRO, ...) \ -MACRO(710, __VA_ARGS__) \ -DO_709(MACRO, __VA_ARGS__) - - -#define DO_711(MACRO, ...) \ -MACRO(711, __VA_ARGS__) \ -DO_710(MACRO, __VA_ARGS__) - - -#define DO_712(MACRO, ...) \ -MACRO(712, __VA_ARGS__) \ -DO_711(MACRO, __VA_ARGS__) - - -#define DO_713(MACRO, ...) \ -MACRO(713, __VA_ARGS__) \ -DO_712(MACRO, __VA_ARGS__) - - -#define DO_714(MACRO, ...) \ -MACRO(714, __VA_ARGS__) \ -DO_713(MACRO, __VA_ARGS__) - - -#define DO_715(MACRO, ...) \ -MACRO(715, __VA_ARGS__) \ -DO_714(MACRO, __VA_ARGS__) - - -#define DO_716(MACRO, ...) \ -MACRO(716, __VA_ARGS__) \ -DO_715(MACRO, __VA_ARGS__) - - -#define DO_717(MACRO, ...) \ -MACRO(717, __VA_ARGS__) \ -DO_716(MACRO, __VA_ARGS__) - - -#define DO_718(MACRO, ...) \ -MACRO(718, __VA_ARGS__) \ -DO_717(MACRO, __VA_ARGS__) - - -#define DO_719(MACRO, ...) \ -MACRO(719, __VA_ARGS__) \ -DO_718(MACRO, __VA_ARGS__) - - -#define DO_720(MACRO, ...) \ -MACRO(720, __VA_ARGS__) \ -DO_719(MACRO, __VA_ARGS__) - - -#define DO_721(MACRO, ...) \ -MACRO(721, __VA_ARGS__) \ -DO_720(MACRO, __VA_ARGS__) - - -#define DO_722(MACRO, ...) \ -MACRO(722, __VA_ARGS__) \ -DO_721(MACRO, __VA_ARGS__) - - -#define DO_723(MACRO, ...) \ -MACRO(723, __VA_ARGS__) \ -DO_722(MACRO, __VA_ARGS__) - - -#define DO_724(MACRO, ...) \ -MACRO(724, __VA_ARGS__) \ -DO_723(MACRO, __VA_ARGS__) - - -#define DO_725(MACRO, ...) \ -MACRO(725, __VA_ARGS__) \ -DO_724(MACRO, __VA_ARGS__) - - -#define DO_726(MACRO, ...) \ -MACRO(726, __VA_ARGS__) \ -DO_725(MACRO, __VA_ARGS__) - - -#define DO_727(MACRO, ...) \ -MACRO(727, __VA_ARGS__) \ -DO_726(MACRO, __VA_ARGS__) - - -#define DO_728(MACRO, ...) \ -MACRO(728, __VA_ARGS__) \ -DO_727(MACRO, __VA_ARGS__) - - -#define DO_729(MACRO, ...) \ -MACRO(729, __VA_ARGS__) \ -DO_728(MACRO, __VA_ARGS__) - - -#define DO_730(MACRO, ...) \ -MACRO(730, __VA_ARGS__) \ -DO_729(MACRO, __VA_ARGS__) - - -#define DO_731(MACRO, ...) \ -MACRO(731, __VA_ARGS__) \ -DO_730(MACRO, __VA_ARGS__) - - -#define DO_732(MACRO, ...) \ -MACRO(732, __VA_ARGS__) \ -DO_731(MACRO, __VA_ARGS__) - - -#define DO_733(MACRO, ...) \ -MACRO(733, __VA_ARGS__) \ -DO_732(MACRO, __VA_ARGS__) - - -#define DO_734(MACRO, ...) \ -MACRO(734, __VA_ARGS__) \ -DO_733(MACRO, __VA_ARGS__) - - -#define DO_735(MACRO, ...) \ -MACRO(735, __VA_ARGS__) \ -DO_734(MACRO, __VA_ARGS__) - - -#define DO_736(MACRO, ...) \ -MACRO(736, __VA_ARGS__) \ -DO_735(MACRO, __VA_ARGS__) - - -#define DO_737(MACRO, ...) \ -MACRO(737, __VA_ARGS__) \ -DO_736(MACRO, __VA_ARGS__) - - -#define DO_738(MACRO, ...) \ -MACRO(738, __VA_ARGS__) \ -DO_737(MACRO, __VA_ARGS__) - - -#define DO_739(MACRO, ...) \ -MACRO(739, __VA_ARGS__) \ -DO_738(MACRO, __VA_ARGS__) - - -#define DO_740(MACRO, ...) \ -MACRO(740, __VA_ARGS__) \ -DO_739(MACRO, __VA_ARGS__) - - -#define DO_741(MACRO, ...) \ -MACRO(741, __VA_ARGS__) \ -DO_740(MACRO, __VA_ARGS__) - - -#define DO_742(MACRO, ...) \ -MACRO(742, __VA_ARGS__) \ -DO_741(MACRO, __VA_ARGS__) - - -#define DO_743(MACRO, ...) \ -MACRO(743, __VA_ARGS__) \ -DO_742(MACRO, __VA_ARGS__) - - -#define DO_744(MACRO, ...) \ -MACRO(744, __VA_ARGS__) \ -DO_743(MACRO, __VA_ARGS__) - - -#define DO_745(MACRO, ...) \ -MACRO(745, __VA_ARGS__) \ -DO_744(MACRO, __VA_ARGS__) - - -#define DO_746(MACRO, ...) \ -MACRO(746, __VA_ARGS__) \ -DO_745(MACRO, __VA_ARGS__) - - -#define DO_747(MACRO, ...) \ -MACRO(747, __VA_ARGS__) \ -DO_746(MACRO, __VA_ARGS__) - - -#define DO_748(MACRO, ...) \ -MACRO(748, __VA_ARGS__) \ -DO_747(MACRO, __VA_ARGS__) - - -#define DO_749(MACRO, ...) \ -MACRO(749, __VA_ARGS__) \ -DO_748(MACRO, __VA_ARGS__) - - -#define DO_750(MACRO, ...) \ -MACRO(750, __VA_ARGS__) \ -DO_749(MACRO, __VA_ARGS__) - - -#define DO_751(MACRO, ...) \ -MACRO(751, __VA_ARGS__) \ -DO_750(MACRO, __VA_ARGS__) - - -#define DO_752(MACRO, ...) \ -MACRO(752, __VA_ARGS__) \ -DO_751(MACRO, __VA_ARGS__) - - -#define DO_753(MACRO, ...) \ -MACRO(753, __VA_ARGS__) \ -DO_752(MACRO, __VA_ARGS__) - - -#define DO_754(MACRO, ...) \ -MACRO(754, __VA_ARGS__) \ -DO_753(MACRO, __VA_ARGS__) - - -#define DO_755(MACRO, ...) \ -MACRO(755, __VA_ARGS__) \ -DO_754(MACRO, __VA_ARGS__) - - -#define DO_756(MACRO, ...) \ -MACRO(756, __VA_ARGS__) \ -DO_755(MACRO, __VA_ARGS__) - - -#define DO_757(MACRO, ...) \ -MACRO(757, __VA_ARGS__) \ -DO_756(MACRO, __VA_ARGS__) - - -#define DO_758(MACRO, ...) \ -MACRO(758, __VA_ARGS__) \ -DO_757(MACRO, __VA_ARGS__) - - -#define DO_759(MACRO, ...) \ -MACRO(759, __VA_ARGS__) \ -DO_758(MACRO, __VA_ARGS__) - - -#define DO_760(MACRO, ...) \ -MACRO(760, __VA_ARGS__) \ -DO_759(MACRO, __VA_ARGS__) - - -#define DO_761(MACRO, ...) \ -MACRO(761, __VA_ARGS__) \ -DO_760(MACRO, __VA_ARGS__) - - -#define DO_762(MACRO, ...) \ -MACRO(762, __VA_ARGS__) \ -DO_761(MACRO, __VA_ARGS__) - - -#define DO_763(MACRO, ...) \ -MACRO(763, __VA_ARGS__) \ -DO_762(MACRO, __VA_ARGS__) - - -#define DO_764(MACRO, ...) \ -MACRO(764, __VA_ARGS__) \ -DO_763(MACRO, __VA_ARGS__) - - -#define DO_765(MACRO, ...) \ -MACRO(765, __VA_ARGS__) \ -DO_764(MACRO, __VA_ARGS__) - - -#define DO_766(MACRO, ...) \ -MACRO(766, __VA_ARGS__) \ -DO_765(MACRO, __VA_ARGS__) - - -#define DO_767(MACRO, ...) \ -MACRO(767, __VA_ARGS__) \ -DO_766(MACRO, __VA_ARGS__) - - -#define DO_768(MACRO, ...) \ -MACRO(768, __VA_ARGS__) \ -DO_767(MACRO, __VA_ARGS__) - - -#define DO_769(MACRO, ...) \ -MACRO(769, __VA_ARGS__) \ -DO_768(MACRO, __VA_ARGS__) - - -#define DO_770(MACRO, ...) \ -MACRO(770, __VA_ARGS__) \ -DO_769(MACRO, __VA_ARGS__) - - -#define DO_771(MACRO, ...) \ -MACRO(771, __VA_ARGS__) \ -DO_770(MACRO, __VA_ARGS__) - - -#define DO_772(MACRO, ...) \ -MACRO(772, __VA_ARGS__) \ -DO_771(MACRO, __VA_ARGS__) - - -#define DO_773(MACRO, ...) \ -MACRO(773, __VA_ARGS__) \ -DO_772(MACRO, __VA_ARGS__) - - -#define DO_774(MACRO, ...) \ -MACRO(774, __VA_ARGS__) \ -DO_773(MACRO, __VA_ARGS__) - - -#define DO_775(MACRO, ...) \ -MACRO(775, __VA_ARGS__) \ -DO_774(MACRO, __VA_ARGS__) - - -#define DO_776(MACRO, ...) \ -MACRO(776, __VA_ARGS__) \ -DO_775(MACRO, __VA_ARGS__) - - -#define DO_777(MACRO, ...) \ -MACRO(777, __VA_ARGS__) \ -DO_776(MACRO, __VA_ARGS__) - - -#define DO_778(MACRO, ...) \ -MACRO(778, __VA_ARGS__) \ -DO_777(MACRO, __VA_ARGS__) - - -#define DO_779(MACRO, ...) \ -MACRO(779, __VA_ARGS__) \ -DO_778(MACRO, __VA_ARGS__) - - -#define DO_780(MACRO, ...) \ -MACRO(780, __VA_ARGS__) \ -DO_779(MACRO, __VA_ARGS__) - - -#define DO_781(MACRO, ...) \ -MACRO(781, __VA_ARGS__) \ -DO_780(MACRO, __VA_ARGS__) - - -#define DO_782(MACRO, ...) \ -MACRO(782, __VA_ARGS__) \ -DO_781(MACRO, __VA_ARGS__) - - -#define DO_783(MACRO, ...) \ -MACRO(783, __VA_ARGS__) \ -DO_782(MACRO, __VA_ARGS__) - - -#define DO_784(MACRO, ...) \ -MACRO(784, __VA_ARGS__) \ -DO_783(MACRO, __VA_ARGS__) - - -#define DO_785(MACRO, ...) \ -MACRO(785, __VA_ARGS__) \ -DO_784(MACRO, __VA_ARGS__) - - -#define DO_786(MACRO, ...) \ -MACRO(786, __VA_ARGS__) \ -DO_785(MACRO, __VA_ARGS__) - - -#define DO_787(MACRO, ...) \ -MACRO(787, __VA_ARGS__) \ -DO_786(MACRO, __VA_ARGS__) - - -#define DO_788(MACRO, ...) \ -MACRO(788, __VA_ARGS__) \ -DO_787(MACRO, __VA_ARGS__) - - -#define DO_789(MACRO, ...) \ -MACRO(789, __VA_ARGS__) \ -DO_788(MACRO, __VA_ARGS__) - - -#define DO_790(MACRO, ...) \ -MACRO(790, __VA_ARGS__) \ -DO_789(MACRO, __VA_ARGS__) - - -#define DO_791(MACRO, ...) \ -MACRO(791, __VA_ARGS__) \ -DO_790(MACRO, __VA_ARGS__) - - -#define DO_792(MACRO, ...) \ -MACRO(792, __VA_ARGS__) \ -DO_791(MACRO, __VA_ARGS__) - - -#define DO_793(MACRO, ...) \ -MACRO(793, __VA_ARGS__) \ -DO_792(MACRO, __VA_ARGS__) - - -#define DO_794(MACRO, ...) \ -MACRO(794, __VA_ARGS__) \ -DO_793(MACRO, __VA_ARGS__) - - -#define DO_795(MACRO, ...) \ -MACRO(795, __VA_ARGS__) \ -DO_794(MACRO, __VA_ARGS__) - - -#define DO_796(MACRO, ...) \ -MACRO(796, __VA_ARGS__) \ -DO_795(MACRO, __VA_ARGS__) - - -#define DO_797(MACRO, ...) \ -MACRO(797, __VA_ARGS__) \ -DO_796(MACRO, __VA_ARGS__) - - -#define DO_798(MACRO, ...) \ -MACRO(798, __VA_ARGS__) \ -DO_797(MACRO, __VA_ARGS__) - - -#define DO_799(MACRO, ...) \ -MACRO(799, __VA_ARGS__) \ -DO_798(MACRO, __VA_ARGS__) - - -#define DO_800(MACRO, ...) \ -MACRO(800, __VA_ARGS__) \ -DO_799(MACRO, __VA_ARGS__) - - -#define DO_801(MACRO, ...) \ -MACRO(801, __VA_ARGS__) \ -DO_800(MACRO, __VA_ARGS__) - - -#define DO_802(MACRO, ...) \ -MACRO(802, __VA_ARGS__) \ -DO_801(MACRO, __VA_ARGS__) - - -#define DO_803(MACRO, ...) \ -MACRO(803, __VA_ARGS__) \ -DO_802(MACRO, __VA_ARGS__) - - -#define DO_804(MACRO, ...) \ -MACRO(804, __VA_ARGS__) \ -DO_803(MACRO, __VA_ARGS__) - - -#define DO_805(MACRO, ...) \ -MACRO(805, __VA_ARGS__) \ -DO_804(MACRO, __VA_ARGS__) - - -#define DO_806(MACRO, ...) \ -MACRO(806, __VA_ARGS__) \ -DO_805(MACRO, __VA_ARGS__) - - -#define DO_807(MACRO, ...) \ -MACRO(807, __VA_ARGS__) \ -DO_806(MACRO, __VA_ARGS__) - - -#define DO_808(MACRO, ...) \ -MACRO(808, __VA_ARGS__) \ -DO_807(MACRO, __VA_ARGS__) - - -#define DO_809(MACRO, ...) \ -MACRO(809, __VA_ARGS__) \ -DO_808(MACRO, __VA_ARGS__) - - -#define DO_810(MACRO, ...) \ -MACRO(810, __VA_ARGS__) \ -DO_809(MACRO, __VA_ARGS__) - - -#define DO_811(MACRO, ...) \ -MACRO(811, __VA_ARGS__) \ -DO_810(MACRO, __VA_ARGS__) - - -#define DO_812(MACRO, ...) \ -MACRO(812, __VA_ARGS__) \ -DO_811(MACRO, __VA_ARGS__) - - -#define DO_813(MACRO, ...) \ -MACRO(813, __VA_ARGS__) \ -DO_812(MACRO, __VA_ARGS__) - - -#define DO_814(MACRO, ...) \ -MACRO(814, __VA_ARGS__) \ -DO_813(MACRO, __VA_ARGS__) - - -#define DO_815(MACRO, ...) \ -MACRO(815, __VA_ARGS__) \ -DO_814(MACRO, __VA_ARGS__) - - -#define DO_816(MACRO, ...) \ -MACRO(816, __VA_ARGS__) \ -DO_815(MACRO, __VA_ARGS__) - - -#define DO_817(MACRO, ...) \ -MACRO(817, __VA_ARGS__) \ -DO_816(MACRO, __VA_ARGS__) - - -#define DO_818(MACRO, ...) \ -MACRO(818, __VA_ARGS__) \ -DO_817(MACRO, __VA_ARGS__) - - -#define DO_819(MACRO, ...) \ -MACRO(819, __VA_ARGS__) \ -DO_818(MACRO, __VA_ARGS__) - - -#define DO_820(MACRO, ...) \ -MACRO(820, __VA_ARGS__) \ -DO_819(MACRO, __VA_ARGS__) - - -#define DO_821(MACRO, ...) \ -MACRO(821, __VA_ARGS__) \ -DO_820(MACRO, __VA_ARGS__) - - -#define DO_822(MACRO, ...) \ -MACRO(822, __VA_ARGS__) \ -DO_821(MACRO, __VA_ARGS__) - - -#define DO_823(MACRO, ...) \ -MACRO(823, __VA_ARGS__) \ -DO_822(MACRO, __VA_ARGS__) - - -#define DO_824(MACRO, ...) \ -MACRO(824, __VA_ARGS__) \ -DO_823(MACRO, __VA_ARGS__) - - -#define DO_825(MACRO, ...) \ -MACRO(825, __VA_ARGS__) \ -DO_824(MACRO, __VA_ARGS__) - - -#define DO_826(MACRO, ...) \ -MACRO(826, __VA_ARGS__) \ -DO_825(MACRO, __VA_ARGS__) - - -#define DO_827(MACRO, ...) \ -MACRO(827, __VA_ARGS__) \ -DO_826(MACRO, __VA_ARGS__) - - -#define DO_828(MACRO, ...) \ -MACRO(828, __VA_ARGS__) \ -DO_827(MACRO, __VA_ARGS__) - - -#define DO_829(MACRO, ...) \ -MACRO(829, __VA_ARGS__) \ -DO_828(MACRO, __VA_ARGS__) - - -#define DO_830(MACRO, ...) \ -MACRO(830, __VA_ARGS__) \ -DO_829(MACRO, __VA_ARGS__) - - -#define DO_831(MACRO, ...) \ -MACRO(831, __VA_ARGS__) \ -DO_830(MACRO, __VA_ARGS__) - - -#define DO_832(MACRO, ...) \ -MACRO(832, __VA_ARGS__) \ -DO_831(MACRO, __VA_ARGS__) - - -#define DO_833(MACRO, ...) \ -MACRO(833, __VA_ARGS__) \ -DO_832(MACRO, __VA_ARGS__) - - -#define DO_834(MACRO, ...) \ -MACRO(834, __VA_ARGS__) \ -DO_833(MACRO, __VA_ARGS__) - - -#define DO_835(MACRO, ...) \ -MACRO(835, __VA_ARGS__) \ -DO_834(MACRO, __VA_ARGS__) - - -#define DO_836(MACRO, ...) \ -MACRO(836, __VA_ARGS__) \ -DO_835(MACRO, __VA_ARGS__) - - -#define DO_837(MACRO, ...) \ -MACRO(837, __VA_ARGS__) \ -DO_836(MACRO, __VA_ARGS__) - - -#define DO_838(MACRO, ...) \ -MACRO(838, __VA_ARGS__) \ -DO_837(MACRO, __VA_ARGS__) - - -#define DO_839(MACRO, ...) \ -MACRO(839, __VA_ARGS__) \ -DO_838(MACRO, __VA_ARGS__) - - -#define DO_840(MACRO, ...) \ -MACRO(840, __VA_ARGS__) \ -DO_839(MACRO, __VA_ARGS__) - - -#define DO_841(MACRO, ...) \ -MACRO(841, __VA_ARGS__) \ -DO_840(MACRO, __VA_ARGS__) - - -#define DO_842(MACRO, ...) \ -MACRO(842, __VA_ARGS__) \ -DO_841(MACRO, __VA_ARGS__) - - -#define DO_843(MACRO, ...) \ -MACRO(843, __VA_ARGS__) \ -DO_842(MACRO, __VA_ARGS__) - - -#define DO_844(MACRO, ...) \ -MACRO(844, __VA_ARGS__) \ -DO_843(MACRO, __VA_ARGS__) - - -#define DO_845(MACRO, ...) \ -MACRO(845, __VA_ARGS__) \ -DO_844(MACRO, __VA_ARGS__) - - -#define DO_846(MACRO, ...) \ -MACRO(846, __VA_ARGS__) \ -DO_845(MACRO, __VA_ARGS__) - - -#define DO_847(MACRO, ...) \ -MACRO(847, __VA_ARGS__) \ -DO_846(MACRO, __VA_ARGS__) - - -#define DO_848(MACRO, ...) \ -MACRO(848, __VA_ARGS__) \ -DO_847(MACRO, __VA_ARGS__) - - -#define DO_849(MACRO, ...) \ -MACRO(849, __VA_ARGS__) \ -DO_848(MACRO, __VA_ARGS__) - - -#define DO_850(MACRO, ...) \ -MACRO(850, __VA_ARGS__) \ -DO_849(MACRO, __VA_ARGS__) - - -#define DO_851(MACRO, ...) \ -MACRO(851, __VA_ARGS__) \ -DO_850(MACRO, __VA_ARGS__) - - -#define DO_852(MACRO, ...) \ -MACRO(852, __VA_ARGS__) \ -DO_851(MACRO, __VA_ARGS__) - - -#define DO_853(MACRO, ...) \ -MACRO(853, __VA_ARGS__) \ -DO_852(MACRO, __VA_ARGS__) - - -#define DO_854(MACRO, ...) \ -MACRO(854, __VA_ARGS__) \ -DO_853(MACRO, __VA_ARGS__) - - -#define DO_855(MACRO, ...) \ -MACRO(855, __VA_ARGS__) \ -DO_854(MACRO, __VA_ARGS__) - - -#define DO_856(MACRO, ...) \ -MACRO(856, __VA_ARGS__) \ -DO_855(MACRO, __VA_ARGS__) - - -#define DO_857(MACRO, ...) \ -MACRO(857, __VA_ARGS__) \ -DO_856(MACRO, __VA_ARGS__) - - -#define DO_858(MACRO, ...) \ -MACRO(858, __VA_ARGS__) \ -DO_857(MACRO, __VA_ARGS__) - - -#define DO_859(MACRO, ...) \ -MACRO(859, __VA_ARGS__) \ -DO_858(MACRO, __VA_ARGS__) - - -#define DO_860(MACRO, ...) \ -MACRO(860, __VA_ARGS__) \ -DO_859(MACRO, __VA_ARGS__) - - -#define DO_861(MACRO, ...) \ -MACRO(861, __VA_ARGS__) \ -DO_860(MACRO, __VA_ARGS__) - - -#define DO_862(MACRO, ...) \ -MACRO(862, __VA_ARGS__) \ -DO_861(MACRO, __VA_ARGS__) - - -#define DO_863(MACRO, ...) \ -MACRO(863, __VA_ARGS__) \ -DO_862(MACRO, __VA_ARGS__) - - -#define DO_864(MACRO, ...) \ -MACRO(864, __VA_ARGS__) \ -DO_863(MACRO, __VA_ARGS__) - - -#define DO_865(MACRO, ...) \ -MACRO(865, __VA_ARGS__) \ -DO_864(MACRO, __VA_ARGS__) - - -#define DO_866(MACRO, ...) \ -MACRO(866, __VA_ARGS__) \ -DO_865(MACRO, __VA_ARGS__) - - -#define DO_867(MACRO, ...) \ -MACRO(867, __VA_ARGS__) \ -DO_866(MACRO, __VA_ARGS__) - - -#define DO_868(MACRO, ...) \ -MACRO(868, __VA_ARGS__) \ -DO_867(MACRO, __VA_ARGS__) - - -#define DO_869(MACRO, ...) \ -MACRO(869, __VA_ARGS__) \ -DO_868(MACRO, __VA_ARGS__) - - -#define DO_870(MACRO, ...) \ -MACRO(870, __VA_ARGS__) \ -DO_869(MACRO, __VA_ARGS__) - - -#define DO_871(MACRO, ...) \ -MACRO(871, __VA_ARGS__) \ -DO_870(MACRO, __VA_ARGS__) - - -#define DO_872(MACRO, ...) \ -MACRO(872, __VA_ARGS__) \ -DO_871(MACRO, __VA_ARGS__) - - -#define DO_873(MACRO, ...) \ -MACRO(873, __VA_ARGS__) \ -DO_872(MACRO, __VA_ARGS__) - - -#define DO_874(MACRO, ...) \ -MACRO(874, __VA_ARGS__) \ -DO_873(MACRO, __VA_ARGS__) - - -#define DO_875(MACRO, ...) \ -MACRO(875, __VA_ARGS__) \ -DO_874(MACRO, __VA_ARGS__) - - -#define DO_876(MACRO, ...) \ -MACRO(876, __VA_ARGS__) \ -DO_875(MACRO, __VA_ARGS__) - - -#define DO_877(MACRO, ...) \ -MACRO(877, __VA_ARGS__) \ -DO_876(MACRO, __VA_ARGS__) - - -#define DO_878(MACRO, ...) \ -MACRO(878, __VA_ARGS__) \ -DO_877(MACRO, __VA_ARGS__) - - -#define DO_879(MACRO, ...) \ -MACRO(879, __VA_ARGS__) \ -DO_878(MACRO, __VA_ARGS__) - - -#define DO_880(MACRO, ...) \ -MACRO(880, __VA_ARGS__) \ -DO_879(MACRO, __VA_ARGS__) - - -#define DO_881(MACRO, ...) \ -MACRO(881, __VA_ARGS__) \ -DO_880(MACRO, __VA_ARGS__) - - -#define DO_882(MACRO, ...) \ -MACRO(882, __VA_ARGS__) \ -DO_881(MACRO, __VA_ARGS__) - - -#define DO_883(MACRO, ...) \ -MACRO(883, __VA_ARGS__) \ -DO_882(MACRO, __VA_ARGS__) - - -#define DO_884(MACRO, ...) \ -MACRO(884, __VA_ARGS__) \ -DO_883(MACRO, __VA_ARGS__) - - -#define DO_885(MACRO, ...) \ -MACRO(885, __VA_ARGS__) \ -DO_884(MACRO, __VA_ARGS__) - - -#define DO_886(MACRO, ...) \ -MACRO(886, __VA_ARGS__) \ -DO_885(MACRO, __VA_ARGS__) - - -#define DO_887(MACRO, ...) \ -MACRO(887, __VA_ARGS__) \ -DO_886(MACRO, __VA_ARGS__) - - -#define DO_888(MACRO, ...) \ -MACRO(888, __VA_ARGS__) \ -DO_887(MACRO, __VA_ARGS__) - - -#define DO_889(MACRO, ...) \ -MACRO(889, __VA_ARGS__) \ -DO_888(MACRO, __VA_ARGS__) - - -#define DO_890(MACRO, ...) \ -MACRO(890, __VA_ARGS__) \ -DO_889(MACRO, __VA_ARGS__) - - -#define DO_891(MACRO, ...) \ -MACRO(891, __VA_ARGS__) \ -DO_890(MACRO, __VA_ARGS__) - - -#define DO_892(MACRO, ...) \ -MACRO(892, __VA_ARGS__) \ -DO_891(MACRO, __VA_ARGS__) - - -#define DO_893(MACRO, ...) \ -MACRO(893, __VA_ARGS__) \ -DO_892(MACRO, __VA_ARGS__) - - -#define DO_894(MACRO, ...) \ -MACRO(894, __VA_ARGS__) \ -DO_893(MACRO, __VA_ARGS__) - - -#define DO_895(MACRO, ...) \ -MACRO(895, __VA_ARGS__) \ -DO_894(MACRO, __VA_ARGS__) - - -#define DO_896(MACRO, ...) \ -MACRO(896, __VA_ARGS__) \ -DO_895(MACRO, __VA_ARGS__) - - -#define DO_897(MACRO, ...) \ -MACRO(897, __VA_ARGS__) \ -DO_896(MACRO, __VA_ARGS__) - - -#define DO_898(MACRO, ...) \ -MACRO(898, __VA_ARGS__) \ -DO_897(MACRO, __VA_ARGS__) - - -#define DO_899(MACRO, ...) \ -MACRO(899, __VA_ARGS__) \ -DO_898(MACRO, __VA_ARGS__) - - -#define DO_900(MACRO, ...) \ -MACRO(900, __VA_ARGS__) \ -DO_899(MACRO, __VA_ARGS__) - - -#define DO_901(MACRO, ...) \ -MACRO(901, __VA_ARGS__) \ -DO_900(MACRO, __VA_ARGS__) - - -#define DO_902(MACRO, ...) \ -MACRO(902, __VA_ARGS__) \ -DO_901(MACRO, __VA_ARGS__) - - -#define DO_903(MACRO, ...) \ -MACRO(903, __VA_ARGS__) \ -DO_902(MACRO, __VA_ARGS__) - - -#define DO_904(MACRO, ...) \ -MACRO(904, __VA_ARGS__) \ -DO_903(MACRO, __VA_ARGS__) - - -#define DO_905(MACRO, ...) \ -MACRO(905, __VA_ARGS__) \ -DO_904(MACRO, __VA_ARGS__) - - -#define DO_906(MACRO, ...) \ -MACRO(906, __VA_ARGS__) \ -DO_905(MACRO, __VA_ARGS__) - - -#define DO_907(MACRO, ...) \ -MACRO(907, __VA_ARGS__) \ -DO_906(MACRO, __VA_ARGS__) - - -#define DO_908(MACRO, ...) \ -MACRO(908, __VA_ARGS__) \ -DO_907(MACRO, __VA_ARGS__) - - -#define DO_909(MACRO, ...) \ -MACRO(909, __VA_ARGS__) \ -DO_908(MACRO, __VA_ARGS__) - - -#define DO_910(MACRO, ...) \ -MACRO(910, __VA_ARGS__) \ -DO_909(MACRO, __VA_ARGS__) - - -#define DO_911(MACRO, ...) \ -MACRO(911, __VA_ARGS__) \ -DO_910(MACRO, __VA_ARGS__) - - -#define DO_912(MACRO, ...) \ -MACRO(912, __VA_ARGS__) \ -DO_911(MACRO, __VA_ARGS__) - - -#define DO_913(MACRO, ...) \ -MACRO(913, __VA_ARGS__) \ -DO_912(MACRO, __VA_ARGS__) - - -#define DO_914(MACRO, ...) \ -MACRO(914, __VA_ARGS__) \ -DO_913(MACRO, __VA_ARGS__) - - -#define DO_915(MACRO, ...) \ -MACRO(915, __VA_ARGS__) \ -DO_914(MACRO, __VA_ARGS__) - - -#define DO_916(MACRO, ...) \ -MACRO(916, __VA_ARGS__) \ -DO_915(MACRO, __VA_ARGS__) - - -#define DO_917(MACRO, ...) \ -MACRO(917, __VA_ARGS__) \ -DO_916(MACRO, __VA_ARGS__) - - -#define DO_918(MACRO, ...) \ -MACRO(918, __VA_ARGS__) \ -DO_917(MACRO, __VA_ARGS__) - - -#define DO_919(MACRO, ...) \ -MACRO(919, __VA_ARGS__) \ -DO_918(MACRO, __VA_ARGS__) - - -#define DO_920(MACRO, ...) \ -MACRO(920, __VA_ARGS__) \ -DO_919(MACRO, __VA_ARGS__) - - -#define DO_921(MACRO, ...) \ -MACRO(921, __VA_ARGS__) \ -DO_920(MACRO, __VA_ARGS__) - - -#define DO_922(MACRO, ...) \ -MACRO(922, __VA_ARGS__) \ -DO_921(MACRO, __VA_ARGS__) - - -#define DO_923(MACRO, ...) \ -MACRO(923, __VA_ARGS__) \ -DO_922(MACRO, __VA_ARGS__) - - -#define DO_924(MACRO, ...) \ -MACRO(924, __VA_ARGS__) \ -DO_923(MACRO, __VA_ARGS__) - - -#define DO_925(MACRO, ...) \ -MACRO(925, __VA_ARGS__) \ -DO_924(MACRO, __VA_ARGS__) - - -#define DO_926(MACRO, ...) \ -MACRO(926, __VA_ARGS__) \ -DO_925(MACRO, __VA_ARGS__) - - -#define DO_927(MACRO, ...) \ -MACRO(927, __VA_ARGS__) \ -DO_926(MACRO, __VA_ARGS__) - - -#define DO_928(MACRO, ...) \ -MACRO(928, __VA_ARGS__) \ -DO_927(MACRO, __VA_ARGS__) - - -#define DO_929(MACRO, ...) \ -MACRO(929, __VA_ARGS__) \ -DO_928(MACRO, __VA_ARGS__) - - -#define DO_930(MACRO, ...) \ -MACRO(930, __VA_ARGS__) \ -DO_929(MACRO, __VA_ARGS__) - - -#define DO_931(MACRO, ...) \ -MACRO(931, __VA_ARGS__) \ -DO_930(MACRO, __VA_ARGS__) - - -#define DO_932(MACRO, ...) \ -MACRO(932, __VA_ARGS__) \ -DO_931(MACRO, __VA_ARGS__) - - -#define DO_933(MACRO, ...) \ -MACRO(933, __VA_ARGS__) \ -DO_932(MACRO, __VA_ARGS__) - - -#define DO_934(MACRO, ...) \ -MACRO(934, __VA_ARGS__) \ -DO_933(MACRO, __VA_ARGS__) - - -#define DO_935(MACRO, ...) \ -MACRO(935, __VA_ARGS__) \ -DO_934(MACRO, __VA_ARGS__) - - -#define DO_936(MACRO, ...) \ -MACRO(936, __VA_ARGS__) \ -DO_935(MACRO, __VA_ARGS__) - - -#define DO_937(MACRO, ...) \ -MACRO(937, __VA_ARGS__) \ -DO_936(MACRO, __VA_ARGS__) - - -#define DO_938(MACRO, ...) \ -MACRO(938, __VA_ARGS__) \ -DO_937(MACRO, __VA_ARGS__) - - -#define DO_939(MACRO, ...) \ -MACRO(939, __VA_ARGS__) \ -DO_938(MACRO, __VA_ARGS__) - - -#define DO_940(MACRO, ...) \ -MACRO(940, __VA_ARGS__) \ -DO_939(MACRO, __VA_ARGS__) - - -#define DO_941(MACRO, ...) \ -MACRO(941, __VA_ARGS__) \ -DO_940(MACRO, __VA_ARGS__) - - -#define DO_942(MACRO, ...) \ -MACRO(942, __VA_ARGS__) \ -DO_941(MACRO, __VA_ARGS__) - - -#define DO_943(MACRO, ...) \ -MACRO(943, __VA_ARGS__) \ -DO_942(MACRO, __VA_ARGS__) - - -#define DO_944(MACRO, ...) \ -MACRO(944, __VA_ARGS__) \ -DO_943(MACRO, __VA_ARGS__) - - -#define DO_945(MACRO, ...) \ -MACRO(945, __VA_ARGS__) \ -DO_944(MACRO, __VA_ARGS__) - - -#define DO_946(MACRO, ...) \ -MACRO(946, __VA_ARGS__) \ -DO_945(MACRO, __VA_ARGS__) - - -#define DO_947(MACRO, ...) \ -MACRO(947, __VA_ARGS__) \ -DO_946(MACRO, __VA_ARGS__) - - -#define DO_948(MACRO, ...) \ -MACRO(948, __VA_ARGS__) \ -DO_947(MACRO, __VA_ARGS__) - - -#define DO_949(MACRO, ...) \ -MACRO(949, __VA_ARGS__) \ -DO_948(MACRO, __VA_ARGS__) - - -#define DO_950(MACRO, ...) \ -MACRO(950, __VA_ARGS__) \ -DO_949(MACRO, __VA_ARGS__) - - -#define DO_951(MACRO, ...) \ -MACRO(951, __VA_ARGS__) \ -DO_950(MACRO, __VA_ARGS__) - - -#define DO_952(MACRO, ...) \ -MACRO(952, __VA_ARGS__) \ -DO_951(MACRO, __VA_ARGS__) - - -#define DO_953(MACRO, ...) \ -MACRO(953, __VA_ARGS__) \ -DO_952(MACRO, __VA_ARGS__) - - -#define DO_954(MACRO, ...) \ -MACRO(954, __VA_ARGS__) \ -DO_953(MACRO, __VA_ARGS__) - - -#define DO_955(MACRO, ...) \ -MACRO(955, __VA_ARGS__) \ -DO_954(MACRO, __VA_ARGS__) - - -#define DO_956(MACRO, ...) \ -MACRO(956, __VA_ARGS__) \ -DO_955(MACRO, __VA_ARGS__) - - -#define DO_957(MACRO, ...) \ -MACRO(957, __VA_ARGS__) \ -DO_956(MACRO, __VA_ARGS__) - - -#define DO_958(MACRO, ...) \ -MACRO(958, __VA_ARGS__) \ -DO_957(MACRO, __VA_ARGS__) - - -#define DO_959(MACRO, ...) \ -MACRO(959, __VA_ARGS__) \ -DO_958(MACRO, __VA_ARGS__) - - -#define DO_960(MACRO, ...) \ -MACRO(960, __VA_ARGS__) \ -DO_959(MACRO, __VA_ARGS__) - - -#define DO_961(MACRO, ...) \ -MACRO(961, __VA_ARGS__) \ -DO_960(MACRO, __VA_ARGS__) - - -#define DO_962(MACRO, ...) \ -MACRO(962, __VA_ARGS__) \ -DO_961(MACRO, __VA_ARGS__) - - -#define DO_963(MACRO, ...) \ -MACRO(963, __VA_ARGS__) \ -DO_962(MACRO, __VA_ARGS__) - - -#define DO_964(MACRO, ...) \ -MACRO(964, __VA_ARGS__) \ -DO_963(MACRO, __VA_ARGS__) - - -#define DO_965(MACRO, ...) \ -MACRO(965, __VA_ARGS__) \ -DO_964(MACRO, __VA_ARGS__) - - -#define DO_966(MACRO, ...) \ -MACRO(966, __VA_ARGS__) \ -DO_965(MACRO, __VA_ARGS__) - - -#define DO_967(MACRO, ...) \ -MACRO(967, __VA_ARGS__) \ -DO_966(MACRO, __VA_ARGS__) - - -#define DO_968(MACRO, ...) \ -MACRO(968, __VA_ARGS__) \ -DO_967(MACRO, __VA_ARGS__) - - -#define DO_969(MACRO, ...) \ -MACRO(969, __VA_ARGS__) \ -DO_968(MACRO, __VA_ARGS__) - - -#define DO_970(MACRO, ...) \ -MACRO(970, __VA_ARGS__) \ -DO_969(MACRO, __VA_ARGS__) - - -#define DO_971(MACRO, ...) \ -MACRO(971, __VA_ARGS__) \ -DO_970(MACRO, __VA_ARGS__) - - -#define DO_972(MACRO, ...) \ -MACRO(972, __VA_ARGS__) \ -DO_971(MACRO, __VA_ARGS__) - - -#define DO_973(MACRO, ...) \ -MACRO(973, __VA_ARGS__) \ -DO_972(MACRO, __VA_ARGS__) - - -#define DO_974(MACRO, ...) \ -MACRO(974, __VA_ARGS__) \ -DO_973(MACRO, __VA_ARGS__) - - -#define DO_975(MACRO, ...) \ -MACRO(975, __VA_ARGS__) \ -DO_974(MACRO, __VA_ARGS__) - - -#define DO_976(MACRO, ...) \ -MACRO(976, __VA_ARGS__) \ -DO_975(MACRO, __VA_ARGS__) - - -#define DO_977(MACRO, ...) \ -MACRO(977, __VA_ARGS__) \ -DO_976(MACRO, __VA_ARGS__) - - -#define DO_978(MACRO, ...) \ -MACRO(978, __VA_ARGS__) \ -DO_977(MACRO, __VA_ARGS__) - - -#define DO_979(MACRO, ...) \ -MACRO(979, __VA_ARGS__) \ -DO_978(MACRO, __VA_ARGS__) - - -#define DO_980(MACRO, ...) \ -MACRO(980, __VA_ARGS__) \ -DO_979(MACRO, __VA_ARGS__) - - -#define DO_981(MACRO, ...) \ -MACRO(981, __VA_ARGS__) \ -DO_980(MACRO, __VA_ARGS__) - - -#define DO_982(MACRO, ...) \ -MACRO(982, __VA_ARGS__) \ -DO_981(MACRO, __VA_ARGS__) - - -#define DO_983(MACRO, ...) \ -MACRO(983, __VA_ARGS__) \ -DO_982(MACRO, __VA_ARGS__) - - -#define DO_984(MACRO, ...) \ -MACRO(984, __VA_ARGS__) \ -DO_983(MACRO, __VA_ARGS__) - - -#define DO_985(MACRO, ...) \ -MACRO(985, __VA_ARGS__) \ -DO_984(MACRO, __VA_ARGS__) - - -#define DO_986(MACRO, ...) \ -MACRO(986, __VA_ARGS__) \ -DO_985(MACRO, __VA_ARGS__) - - -#define DO_987(MACRO, ...) \ -MACRO(987, __VA_ARGS__) \ -DO_986(MACRO, __VA_ARGS__) - - -#define DO_988(MACRO, ...) \ -MACRO(988, __VA_ARGS__) \ -DO_987(MACRO, __VA_ARGS__) - - -#define DO_989(MACRO, ...) \ -MACRO(989, __VA_ARGS__) \ -DO_988(MACRO, __VA_ARGS__) - - -#define DO_990(MACRO, ...) \ -MACRO(990, __VA_ARGS__) \ -DO_989(MACRO, __VA_ARGS__) - - -#define DO_991(MACRO, ...) \ -MACRO(991, __VA_ARGS__) \ -DO_990(MACRO, __VA_ARGS__) - - -#define DO_992(MACRO, ...) \ -MACRO(992, __VA_ARGS__) \ -DO_991(MACRO, __VA_ARGS__) - - -#define DO_993(MACRO, ...) \ -MACRO(993, __VA_ARGS__) \ -DO_992(MACRO, __VA_ARGS__) - - -#define DO_994(MACRO, ...) \ -MACRO(994, __VA_ARGS__) \ -DO_993(MACRO, __VA_ARGS__) - - -#define DO_995(MACRO, ...) \ -MACRO(995, __VA_ARGS__) \ -DO_994(MACRO, __VA_ARGS__) - - -#define DO_996(MACRO, ...) \ -MACRO(996, __VA_ARGS__) \ -DO_995(MACRO, __VA_ARGS__) - - -#define DO_997(MACRO, ...) \ -MACRO(997, __VA_ARGS__) \ -DO_996(MACRO, __VA_ARGS__) - - -#define DO_998(MACRO, ...) \ -MACRO(998, __VA_ARGS__) \ -DO_997(MACRO, __VA_ARGS__) - - -#define DO_999(MACRO, ...) \ -MACRO(999, __VA_ARGS__) \ -DO_998(MACRO, __VA_ARGS__) - - -#define DO_1000(MACRO, ...) \ -MACRO(1000, __VA_ARGS__) \ -DO_999(MACRO, __VA_ARGS__) - - -#define DO_1001(MACRO, ...) \ -MACRO(1001, __VA_ARGS__) \ -DO_1000(MACRO, __VA_ARGS__) - - -#define DO_1002(MACRO, ...) \ -MACRO(1002, __VA_ARGS__) \ -DO_1001(MACRO, __VA_ARGS__) - - -#define DO_1003(MACRO, ...) \ -MACRO(1003, __VA_ARGS__) \ -DO_1002(MACRO, __VA_ARGS__) - - -#define DO_1004(MACRO, ...) \ -MACRO(1004, __VA_ARGS__) \ -DO_1003(MACRO, __VA_ARGS__) - - -#define DO_1005(MACRO, ...) \ -MACRO(1005, __VA_ARGS__) \ -DO_1004(MACRO, __VA_ARGS__) - - -#define DO_1006(MACRO, ...) \ -MACRO(1006, __VA_ARGS__) \ -DO_1005(MACRO, __VA_ARGS__) - - -#define DO_1007(MACRO, ...) \ -MACRO(1007, __VA_ARGS__) \ -DO_1006(MACRO, __VA_ARGS__) - - -#define DO_1008(MACRO, ...) \ -MACRO(1008, __VA_ARGS__) \ -DO_1007(MACRO, __VA_ARGS__) - - -#define DO_1009(MACRO, ...) \ -MACRO(1009, __VA_ARGS__) \ -DO_1008(MACRO, __VA_ARGS__) - - -#define DO_1010(MACRO, ...) \ -MACRO(1010, __VA_ARGS__) \ -DO_1009(MACRO, __VA_ARGS__) - - -#define DO_1011(MACRO, ...) \ -MACRO(1011, __VA_ARGS__) \ -DO_1010(MACRO, __VA_ARGS__) - - -#define DO_1012(MACRO, ...) \ -MACRO(1012, __VA_ARGS__) \ -DO_1011(MACRO, __VA_ARGS__) - - -#define DO_1013(MACRO, ...) \ -MACRO(1013, __VA_ARGS__) \ -DO_1012(MACRO, __VA_ARGS__) - - -#define DO_1014(MACRO, ...) \ -MACRO(1014, __VA_ARGS__) \ -DO_1013(MACRO, __VA_ARGS__) - - -#define DO_1015(MACRO, ...) \ -MACRO(1015, __VA_ARGS__) \ -DO_1014(MACRO, __VA_ARGS__) - - -#define DO_1016(MACRO, ...) \ -MACRO(1016, __VA_ARGS__) \ -DO_1015(MACRO, __VA_ARGS__) - - -#define DO_1017(MACRO, ...) \ -MACRO(1017, __VA_ARGS__) \ -DO_1016(MACRO, __VA_ARGS__) - - -#define DO_1018(MACRO, ...) \ -MACRO(1018, __VA_ARGS__) \ -DO_1017(MACRO, __VA_ARGS__) - - -#define DO_1019(MACRO, ...) \ -MACRO(1019, __VA_ARGS__) \ -DO_1018(MACRO, __VA_ARGS__) - - -#define DO_1020(MACRO, ...) \ -MACRO(1020, __VA_ARGS__) \ -DO_1019(MACRO, __VA_ARGS__) - - -#define DO_1021(MACRO, ...) \ -MACRO(1021, __VA_ARGS__) \ -DO_1020(MACRO, __VA_ARGS__) - - -#define DO_1022(MACRO, ...) \ -MACRO(1022, __VA_ARGS__) \ -DO_1021(MACRO, __VA_ARGS__) - - -#define DO_1023(MACRO, ...) \ -MACRO(1023, __VA_ARGS__) \ -DO_1022(MACRO, __VA_ARGS__) - - -#define DO_1024(MACRO, ...) \ -MACRO(1024, __VA_ARGS__) \ -DO_1023(MACRO, __VA_ARGS__) - - - -#define DO(TIMES, MACRO, ...) C2(DO_, TIMES)(MACRO, __VA_ARGS__) - - -/* we need some sort of macro that does: -IF(0, "true", "false") => "false" -IF(1, "true", "false") => "true" -IF(X, "true", "false") => "true" -*/ - -#define INTERNALIF(x) INTERNALIF##x -#define INTERNALIF0 - -#define ISZERO(x) COUNT_ARG(INTERNALIF(x)) - -#define IF(condition, trueBranch, falseBranch) C2(IF,ISZERO(condition))(trueBranch, falseBranch) -#define IF0(trueBranch, falseBranch) falseBranch -#define IF1(trueBranch, falseBranch) trueBranch - - - -#define DEFINE_ENUMERATION_CONSTANT(x) x, -/*DEFINE_ENUM goes to header*/ -#define DEFINE_ENUM(enumName, ...) typedef enum C2(enumName, _TAG) { FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; \ - extern const char* C2(enumName,Strings)(enumName value); \ - extern int C2(enumName, _FromString)(const char* enumAsString, enumName* destination); - - -#define DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) C2(L, TOSTRING(x)) , -#define DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) TOSTRING(x) , -/*DEFINE_ENUM_STRINGS goes to .c*/ -#define DEFINE_ENUM_STRINGS(enumName, ...) const char* C2(enumName, StringStorage)[COUNT_ARG(__VA_ARGS__)] = {FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \ -const char* C2(enumName,Strings)(enumName value) \ -{ \ - if(value>=COUNT_ARG(__VA_ARGS__)) \ - { \ - /*this is an error case*/ \ - return NULL; \ - } \ - else \ - { \ - return C2(enumName, StringStorage)[value]; \ - } \ -} \ -int C2(enumName, _FromString)(const char* enumAsString, enumName* destination) \ -{ \ - if( \ - (enumAsString==NULL) || (destination==NULL) \ - ) \ - { \ - return __LINE__; \ - } \ - else \ - { \ - size_t i; \ - for(i=0;i -extern "C" -{ -#else -#include -#endif - -#define MAP_RESULT_VALUES \ - MAP_OK, \ - MAP_ERROR, \ - MAP_INVALIDARG, \ - MAP_KEYEXISTS, \ - MAP_KEYNOTFOUND, \ - MAP_FILTER_REJECT - -/** @brief Enumeration specifying the status of calls to various APIs in this - * module. - */ -DEFINE_ENUM(MAP_RESULT, MAP_RESULT_VALUES); - -typedef struct MAP_HANDLE_DATA_TAG* MAP_HANDLE; - -typedef int (*MAP_FILTER_CALLBACK)(const char* mapProperty, const char* mapValue); - -/** - * @brief Creates a new, empty map. - * - * @param mapFilterFunc A callback function supplied by the caller that is - * invoked during calls to ::Map_Add and - * ::Map_AddOrUpdate to provide the caller an - * opportunity to indicate whether the new entry or - * the update to an existing entry can be made or not. - * The callback function can request that the operation - * be canceled by returning a non-zero value from the - * callback. - * - * @return A valid @c MAP_HANDLE or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Create, MAP_FILTER_CALLBACK, mapFilterFunc); - -/** - * @brief Release all resources associated with the map. - * - * @param handle The handle to an existing map. - */ -MOCKABLE_FUNCTION(, void, Map_Destroy, MAP_HANDLE, handle); - -/** - * @brief Creates a copy of the map indicated by @p handle and returns a - * handle to it. - * - * @param handle The handle to an existing map. - * - * @return A valid @c MAP_HANDLE to the cloned copy of the map or @c NULL - * in case an error occurs. - */ -MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Clone, MAP_HANDLE, handle); - -/** - * @brief Adds a key/value pair to the map. - * - * @param handle The handle to an existing map. - * @param key The @c key to be used for this map entry. - * @param value The @c value to be associated with @p key. - * - * If a non-NULL pointer to a callback function was supplied - * via the @c mapFilterFunc parameter when ::Map_Create was - * called then that callback is invoked when a new entry is - * added and if the callback returns a non-zero value then - * the function cancels the add operation and returns - * @c MAP_FILTER_REJECT. - * - * @return If any of the input parameters are @c NULL then this function - * returns @c MAP_INVALID_ARG. If the key already exists in the - * map then @c MAP_KEYEXISTS is returned. If the filter function - * associated with the map rejects the entry then - * @c MAP_FILTER_REJECT is returned. In case an error occurs when - * the new key is added to the map the function returns @c MAP_ERROR. - * If everything goes well then @c MAP_OK is returned. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_Add, MAP_HANDLE, handle, const char*, key, const char*, value); - -/** - * @brief Adds/updates a key/value pair to the map. - * - * @param handle The handle to an existing map. - * @param key The @c key to be used for this map entry. - * @param value The @c value to be associated with @p key. - * - * This function behaves exactly like ::Map_Add except that if the key - * already exists in the map then it overwrites the value with the - * supplied value instead of returning an error. If a non-NULL pointer - * to a callback function was supplied via the @c mapFilterFunc parameter - * when ::Map_Create was called then that callback is invoked when a new - * entry is added or when an existing entry is updated and if the - * callback returns a non-zero value then the function cancels the - * add/update operation and returns @c MAP_FILTER_REJECT. - * - * @return If any of the input parameters are @c NULL then this function - * returns @c MAP_INVALID_ARG. If the filter function associated - * with the map rejects the entry then @c MAP_FILTER_REJECT is - * returned. In case an error occurs when the new key is - * added/updated in the map the function returns @c MAP_ERROR. If - * everything goes well then @c MAP_OK is returned. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_AddOrUpdate, MAP_HANDLE, handle, const char*, key, const char*, value); - -/** - * @brief Removes a key and its associated value from the map. - * - * @param handle The handle to an existing map. - * @param key The @c key of the item to be deleted. - * - * @return Returns @c MAP_OK if the key was deleted successfully or an - * error code otherwise. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_Delete, MAP_HANDLE, handle, const char*, key); - -/** - * @brief This function returns a boolean value in @p keyExists if the map - * contains a key with the same value the parameter @p key. - * - * @param handle The handle to an existing map. - * @param key The key that the caller wants checked. - * @param keyExists The function writes @c true at the address pointed at - * by this parameter if the key exists in the map and - * @c false otherwise. - * - * @return Returns @c MAP_OK if the check was performed successfully or an - * error code otherwise. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsKey, MAP_HANDLE, handle, const char*, key, bool*, keyExists); - -/** - * @brief This function returns @c true in @p valueExists if at - * least one pair exists in the map where the entry's - * value is equal to the parameter @c value. - * - * @param handle The handle to an existing map. - * @param value The value that the caller wants checked. - * @param valueExists The function writes @c true at the address pointed at - * by this parameter if the value exists in the map and - * @c false otherwise. - * - * @return Returns @c MAP_OK if the check was performed successfully or an - * error code otherwise. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsValue, MAP_HANDLE, handle, const char*, value, bool*, valueExists); - -/** - * @brief Retrieves the value of a stored key. - * - * @param handle The handle to an existing map. - * @param key The key to be looked up in the map. - * - * @return Returns @c NULL in case the input arguments are @c NULL or if the - * requested key is not found in the map. Returns a pointer to the - * key's value otherwise. - */ -MOCKABLE_FUNCTION(, const char*, Map_GetValueFromKey, MAP_HANDLE, handle, const char*, key); - -/** - * @brief Retrieves the complete list of keys and values from the map - * in @p values and @p keys. Also writes the size of the list - * in @p count. - * - * @param handle The handle to an existing map. - * @param keys The location where the list of keys is to be written. - * @param values The location where the list of values is to be written. - * @param count The number of stored keys and values is written at the - * location indicated by this pointer. - * - * @return Returns @c MAP_OK if the keys and values are retrieved and written - * successfully or an error code otherwise. - */ -MOCKABLE_FUNCTION(, MAP_RESULT, Map_GetInternals, MAP_HANDLE, handle, const char*const**, keys, const char*const**, values, size_t*, count); - -/*this API creates a JSON object from the content of the map*/ -MOCKABLE_FUNCTION(, STRING_HANDLE, Map_ToJSON, MAP_HANDLE, handle); - -#ifdef __cplusplus -} -#endif - -#endif /* MAP_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/optionhandler.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/optionhandler.h deleted file mode 100644 index 2250a3e5..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/optionhandler.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef OPTIONHANDLER_H -#define OPTIONHANDLER_H - -#include "azure_c_shared_utility/macro_utils.h" - -#define OPTIONHANDLER_RESULT_VALUES \ -OPTIONHANDLER_OK, \ -OPTIONHANDLER_ERROR, \ -OPTIONHANDLER_INVALIDARG - -DEFINE_ENUM(OPTIONHANDLER_RESULT, OPTIONHANDLER_RESULT_VALUES) - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct OPTIONHANDLER_HANDLE_DATA_TAG* OPTIONHANDLER_HANDLE; - -/*the following function pointer points to a function that produces a clone of the option specified by name and value (that is, a clone of void* value)*/ -/*returns NULL if it failed to produce a clone, otherwise returns a non-NULL value*/ -/*to be implemented by every module*/ -typedef void* (*pfCloneOption)(const char* name, const void* value); - -/*the following function pointer points to a function that frees resources allocated for an option*/ -/*to be implemented by every module*/ -typedef void (*pfDestroyOption)(const char* name, const void* value); - -/*the following function pointer points to a function that sets an option for a module*/ -/*to be implemented by every module*/ -/*returns 0 if _SetOption succeeded, any other value is error, if the option is not intended for that module, returns 0*/ -typedef int (*pfSetOption)(void* handle, const char* name, const void* value); - -MOCKABLE_FUNCTION(,OPTIONHANDLER_HANDLE, OptionHandler_Create, pfCloneOption, cloneOption, pfDestroyOption, destroyOption, pfSetOption, setOption); -MOCKABLE_FUNCTION(,OPTIONHANDLER_RESULT, OptionHandler_AddOption, OPTIONHANDLER_HANDLE, handle, const char*, name, const void*, value); -MOCKABLE_FUNCTION(,OPTIONHANDLER_RESULT, OptionHandler_FeedOptions, OPTIONHANDLER_HANDLE, handle, void*, destinationHandle); -MOCKABLE_FUNCTION(,void, OptionHandler_Destroy, OPTIONHANDLER_HANDLE, handle); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /*OPTIONHANDLER*/ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/platform.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/platform.h deleted file mode 100644 index 91da79b0..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/platform.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef PLATFORM_H -#define PLATFORM_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/umock_c_prod.h" - - MOCKABLE_FUNCTION(, int, platform_init); - MOCKABLE_FUNCTION(, void, platform_deinit); - MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, platform_get_default_tlsio); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* PLATFORM_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/refcount.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/refcount.h deleted file mode 100644 index e2c31843..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/refcount.h +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - - -/*this header contains macros for ref_counting a variable. - -There are no upper bound checks related to uint32_t overflow because we expect that bigger issues are in -the system when more than 4 billion references exist to the same variable. In the case when such an overflow -occurs, the object's ref count will reach zero (while still having 0xFFFFFFFF references) and likely the -controlling code will take the decision to free the object's resources. Then, any of the 0xFFFFFFFF references -will interact with deallocated memory / resources resulting in an undefined behavior. -*/ - -#ifndef REFCOUNT_H -#define REFCOUNT_H - -#ifdef __cplusplus -#include -#include -extern "C" -{ -#else -#include -#include -#endif - - -#include "azure_c_shared_utility/macro_utils.h" - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ == 201112) && (__STDC_NO_ATOMICS__!=1) -#define REFCOUNT_USE_STD_ATOMIC 1 -#endif - -#define REFCOUNT_TYPE(type) \ -struct C2(C2(REFCOUNT_, type), _TAG) - -#define REFCOUNT_SHORT_TYPE(type) \ -C2(REFCOUNT_, type) - -#define REFCOUNT_TYPE_DECLARE_CREATE(type) C2(REFCOUNT_SHORT_TYPE(type), _Create) -#define REFCOUNT_TYPE_CREATE(type) C2(REFCOUNT_SHORT_TYPE(type), _Create)() - -/*this introduces a new refcount'd type based on another type */ -/*and an initializer for that new type that also sets the ref count to 1. The type must not have a flexible array*/ -/*the newly allocated memory shall be free'd by free()*/ -/*and the ref counting is handled internally by the type in the _Create/ _Clone /_Destroy functions */ - -#if defined(REFCOUNT_USE_STD_ATOMIC) -#define COUNT_TYPE _Atomic uint32_t -#elif defined(WIN32) -#define COUNT_TYPE LONG -#else -#define COUNT_TYPE uint32_t -#endif - -#define DEFINE_REFCOUNT_TYPE(type) \ -REFCOUNT_TYPE(type) \ -{ \ - type counted; \ - COUNT_TYPE count; \ -}; \ -static type* REFCOUNT_TYPE_DECLARE_CREATE(type) (void) \ -{ \ - REFCOUNT_TYPE(type)* result = (REFCOUNT_TYPE(type)*)malloc(sizeof(REFCOUNT_TYPE(type))); \ - if (result != NULL) \ - { \ - result->count = 1; \ - } \ - return (type*)result; \ -} \ - -/*the following macros increment/decrement a ref count in an atomic way, depending on the platform*/ -/*The following mechanisms are considered in this order -C11 - - will result in #include - - will use atomic_fetch_add/sub; - - about the return value: "Atomically, the value pointed to by object immediately before the effects" -windows - - will result in #include "windows.h" - - will use InterlockedIncrement/InterlockedDecrement; - - about the return value: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683580(v=vs.85).aspx "The function returns the resulting decremented value" -gcc - - will result in no include (for gcc these are intrinsics build in) - - will use __sync_fetch_and_add/sub - - about the return value: "... returns the value that had previously been in memory." (https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html#Atomic-Builtins) -other cases - - if REFCOUNT_ATOMIC_DONTCARE is defined, then - will result in ++/-- used for increment/decrement. - - if it is not defined, then error out - -It seems windows is "one off" because it returns the value "after" the decrement, as opposed to C11 standard and gcc that return the value "before". -The macro DEC_RETURN_ZERO will be "0" on windows, and "1" on the other cases. -*/ - -/*if macro DEC_REF returns DEC_RETURN_ZERO that means the ref count has reached zero.*/ -#if defined(REFCOUNT_USE_STD_ATOMIC) -#include -#define DEC_RETURN_ZERO (1) -#define INC_REF(type, var) atomic_fetch_add((&((REFCOUNT_TYPE(type)*)var)->count), 1) -#define DEC_REF(type, var) atomic_fetch_sub((&((REFCOUNT_TYPE(type)*)var)->count), 1) - -#elif defined(WIN32) -#include "windows.h" -#define DEC_RETURN_ZERO (0) -#define INC_REF(type, var) InterlockedIncrement(&(((REFCOUNT_TYPE(type)*)var)->count)) -#define DEC_REF(type, var) InterlockedDecrement(&(((REFCOUNT_TYPE(type)*)var)->count)) - -#elif defined(__GNUC__) -#define DEC_RETURN_ZERO (0) -#define INC_REF(type, var) __sync_add_and_fetch((&((REFCOUNT_TYPE(type)*)var)->count), 1) -#define DEC_REF(type, var) __sync_sub_and_fetch((&((REFCOUNT_TYPE(type)*)var)->count), 1) - -#else -#if defined(REFCOUNT_ATOMIC_DONTCARE) -#define DEC_RETURN_ZERO (0) -#define INC_REF(type, var) ++((((REFCOUNT_TYPE(type)*)var)->count)) -#define DEC_REF(type, var) --((((REFCOUNT_TYPE(type)*)var)->count)) -#else -#error do not know how to atomically increment and decrement a uint32_t :(. Platform support needs to be extended to your platform. -#endif /*defined(REFCOUNT_ATOMIC_DONTCARE)*/ -#endif - - - -#ifdef __cplusplus -} -#endif - -#endif /*REFCOUNT_H*/ - - diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/sastoken.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/sastoken.h deleted file mode 100644 index f68b5bc3..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/sastoken.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef SASTOKEN_H -#define SASTOKEN_H - -#include "azure_c_shared_utility/strings.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - - MOCKABLE_FUNCTION(, STRING_HANDLE, SASToken_Create, STRING_HANDLE, key, STRING_HANDLE, scope, STRING_HANDLE, keyName, size_t, expiry); - -#ifdef __cplusplus -} -#endif - -#endif /* SASTOKEN_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/sha-private.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/sha-private.h deleted file mode 100644 index 07a1e4d9..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/sha-private.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/*************************** sha-private.h ***************************/ -/********************** See RFC 4634 for details *********************/ -#ifndef _SHA_PRIVATE__H -#define _SHA_PRIVATE__H -/* -* These definitions are defined in FIPS-180-2, section 4.1. -* Ch() and Maj() are defined identically in sections 4.1.1, -* 4.1.2 and 4.1.3. -* -* The definitions used in FIPS-180-2 are as follows: -*/ - -#ifndef USE_MODIFIED_MACROS -#define SHA_Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -#define SHA_Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -#else /* USE_MODIFIED_MACROS */ -/* -* The following definitions are equivalent and potentially faster. -*/ - -#define SHA_Ch(x, y, z) (((x) & ((y) ^ (z))) ^ (z)) -#define SHA_Maj(x, y, z) (((x) & ((y) | (z))) | ((y) & (z))) - -#endif /* USE_MODIFIED_MACROS */ - -#define SHA_Parity(x, y, z) ((x) ^ (y) ^ (z)) - -#endif /* _SHA_PRIVATE__H */ - diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/sha.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/sha.h deleted file mode 100644 index ceb49891..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/sha.h +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/**************************** sha.h ****************************/ -/******************* See RFC 4634 for details ******************/ -#ifndef _SHA_H_ -#define _SHA_H_ - -/* - * Description: - * This file implements the Secure Hash Signature Standard - * algorithms as defined in the National Institute of Standards - * and Technology Federal Information Processing Standards - * Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2 - * published on August 1, 2002, and the FIPS PUB 180-2 Change - * Notice published on February 28, 2004. - * - * A combined document showing all algorithms is available at - * http://csrc.nist.gov/publications/fips/ - * fips180-2/fips180-2withchangenotice.pdf - * - * The five hashes are defined in these sizes: - * SHA-1 20 byte / 160 bit - * SHA-224 28 byte / 224 bit - * SHA-256 32 byte / 256 bit - * SHA-384 48 byte / 384 bit - * SHA-512 64 byte / 512 bit - */ - -#include -/* - * If you do not have the ISO standard stdint.h header file, then you - * must typedef the following: - * name meaning - * uint64_t unsigned 64 bit integer - * uint32_t unsigned 32 bit integer - * uint8_t unsigned 8 bit integer (i.e., unsigned char) - * int_least16_t integer of >= 16 bits - * - */ - -#ifndef _SHA_enum_ -#define _SHA_enum_ -/* - * All SHA functions return one of these values. - */ -enum { - shaSuccess = 0, - shaNull, /* Null pointer parameter */ - shaInputTooLong, /* input data too long */ - shaStateError, /* called Input after FinalBits or Result */ - shaBadParam /* passed a bad parameter */ -}; -#endif /* _SHA_enum_ */ - -/* - * These constants hold size information for each of the SHA - * hashing operations - */ -enum { - SHA1_Message_Block_Size = 64, SHA224_Message_Block_Size = 64, - SHA256_Message_Block_Size = 64, SHA384_Message_Block_Size = 128, - SHA512_Message_Block_Size = 128, - USHA_Max_Message_Block_Size = SHA512_Message_Block_Size, - - SHA1HashSize = 20, SHA224HashSize = 28, SHA256HashSize = 32, - SHA384HashSize = 48, SHA512HashSize = 64, - USHAMaxHashSize = SHA512HashSize, - - SHA1HashSizeBits = 160, SHA224HashSizeBits = 224, - SHA256HashSizeBits = 256, SHA384HashSizeBits = 384, - SHA512HashSizeBits = 512, USHAMaxHashSizeBits = SHA512HashSizeBits -}; - -/* - * These constants are used in the USHA (unified sha) functions. - */ -typedef enum SHAversion { - SHA1, SHA224, SHA256, SHA384, SHA512 -} SHAversion; - -/* - * This structure will hold context information for the SHA-1 - * hashing operation. - */ -typedef struct SHA1Context { - uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */ - - uint32_t Length_Low; /* Message length in bits */ - uint32_t Length_High; /* Message length in bits */ - - int_least16_t Message_Block_Index; /* Message_Block array index */ - /* 512-bit message blocks */ - uint8_t Message_Block[SHA1_Message_Block_Size]; - - int Computed; /* Is the digest computed? */ - int Corrupted; /* Is the digest corrupted? */ -} SHA1Context; - -/* - * This structure will hold context information for the SHA-256 - * hashing operation. - */ -typedef struct SHA256Context { - uint32_t Intermediate_Hash[SHA256HashSize/4]; /* Message Digest */ - - uint32_t Length_Low; /* Message length in bits */ - uint32_t Length_High; /* Message length in bits */ - - int_least16_t Message_Block_Index; /* Message_Block array index */ - /* 512-bit message blocks */ - uint8_t Message_Block[SHA256_Message_Block_Size]; - - int Computed; /* Is the digest computed? */ - int Corrupted; /* Is the digest corrupted? */ -} SHA256Context; - -/* - * This structure will hold context information for the SHA-512 - * hashing operation. - */ -typedef struct SHA512Context { -#ifdef USE_32BIT_ONLY - uint32_t Intermediate_Hash[SHA512HashSize/4]; /* Message Digest */ - uint32_t Length[4]; /* Message length in bits */ -#else /* !USE_32BIT_ONLY */ - uint64_t Intermediate_Hash[SHA512HashSize/8]; /* Message Digest */ - uint64_t Length_Low, Length_High; /* Message length in bits */ -#endif /* USE_32BIT_ONLY */ - - int_least16_t Message_Block_Index; /* Message_Block array index */ - /* 1024-bit message blocks */ - uint8_t Message_Block[SHA512_Message_Block_Size]; - - int Computed; /* Is the digest computed?*/ - int Corrupted; /* Is the digest corrupted? */ -} SHA512Context; - -/* - * This structure will hold context information for the SHA-224 - * hashing operation. It uses the SHA-256 structure for computation. - */ -typedef struct SHA256Context SHA224Context; - -/* - * This structure will hold context information for the SHA-384 - * hashing operation. It uses the SHA-512 structure for computation. - */ -typedef struct SHA512Context SHA384Context; - -/* - * This structure holds context information for all SHA - * hashing operations. - */ -typedef struct USHAContext { - int whichSha; /* which SHA is being used */ - union { - SHA1Context sha1Context; - SHA224Context sha224Context; SHA256Context sha256Context; - SHA384Context sha384Context; SHA512Context sha512Context; - } ctx; -} USHAContext; - -/* - * This structure will hold context information for the HMAC - * keyed hashing operation. - */ -typedef struct HMACContext { - int whichSha; /* which SHA is being used */ - int hashSize; /* hash size of SHA being used */ - int blockSize; /* block size of SHA being used */ - USHAContext shaContext; /* SHA context */ - unsigned char k_opad[USHA_Max_Message_Block_Size]; - /* outer padding - key XORd with opad */ -} HMACContext; - - -/* - * Function Prototypes - */ - -/* SHA-1 */ -extern int SHA1Reset(SHA1Context *); -extern int SHA1Input(SHA1Context *, const uint8_t *bytes, - unsigned int bytecount); -extern int SHA1FinalBits(SHA1Context *, const uint8_t bits, - unsigned int bitcount); -extern int SHA1Result(SHA1Context *, - uint8_t Message_Digest[SHA1HashSize]); - -/* SHA-224 */ -extern int SHA224Reset(SHA224Context *); -extern int SHA224Input(SHA224Context *, const uint8_t *bytes, - unsigned int bytecount); -extern int SHA224FinalBits(SHA224Context *, const uint8_t bits, - unsigned int bitcount); -extern int SHA224Result(SHA224Context *, - uint8_t Message_Digest[SHA224HashSize]); - -/* SHA-256 */ -extern int SHA256Reset(SHA256Context *); -extern int SHA256Input(SHA256Context *, const uint8_t *bytes, - unsigned int bytecount); -extern int SHA256FinalBits(SHA256Context *, const uint8_t bits, - unsigned int bitcount); -extern int SHA256Result(SHA256Context *, - uint8_t Message_Digest[SHA256HashSize]); - -/* SHA-384 */ -extern int SHA384Reset(SHA384Context *); -extern int SHA384Input(SHA384Context *, const uint8_t *bytes, - unsigned int bytecount); -extern int SHA384FinalBits(SHA384Context *, const uint8_t bits, - unsigned int bitcount); -extern int SHA384Result(SHA384Context *, - uint8_t Message_Digest[SHA384HashSize]); - -/* SHA-512 */ -extern int SHA512Reset(SHA512Context *); -extern int SHA512Input(SHA512Context *, const uint8_t *bytes, - unsigned int bytecount); -extern int SHA512FinalBits(SHA512Context *, const uint8_t bits, - unsigned int bitcount); -extern int SHA512Result(SHA512Context *, - uint8_t Message_Digest[SHA512HashSize]); - -/* Unified SHA functions, chosen by whichSha */ -extern int USHAReset(USHAContext *, SHAversion whichSha); -extern int USHAInput(USHAContext *, - const uint8_t *bytes, unsigned int bytecount); -extern int USHAFinalBits(USHAContext *, - const uint8_t bits, unsigned int bitcount); -extern int USHAResult(USHAContext *, - uint8_t Message_Digest[USHAMaxHashSize]); -extern int USHABlockSize(enum SHAversion whichSha); -extern int USHAHashSize(enum SHAversion whichSha); -extern int USHAHashSizeBits(enum SHAversion whichSha); - -/* - * HMAC Keyed-Hashing for Message Authentication, RFC2104, - * for all SHAs. - * This interface allows a fixed-length text input to be used. - */ -extern int hmac(SHAversion whichSha, /* which SHA algorithm to use */ - const unsigned char *text, /* pointer to data stream */ - int text_len, /* length of data stream */ - const unsigned char *key, /* pointer to authentication key */ - int key_len, /* length of authentication key */ - uint8_t digest[USHAMaxHashSize]); /* caller digest to fill in */ - -/* - * HMAC Keyed-Hashing for Message Authentication, RFC2104, - * for all SHAs. - * This interface allows any length of text input to be used. - */ -extern int hmacReset(HMACContext *ctx, enum SHAversion whichSha, - const unsigned char *key, int key_len); -extern int hmacInput(HMACContext *ctx, const unsigned char *text, - int text_len); - -extern int hmacFinalBits(HMACContext *ctx, const uint8_t bits, - unsigned int bitcount); -extern int hmacResult(HMACContext *ctx, - uint8_t digest[USHAMaxHashSize]); - -#endif /* _SHA_H_ */ - diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/shared_util_options.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/shared_util_options.h deleted file mode 100644 index 23a60685..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/shared_util_options.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef SHARED_UTIL_OPTIONS_H -#define SHARED_UTIL_OPTIONS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - - typedef struct HTTP_PROXY_OPTIONS_TAG - { - const char* host_address; - int port; - const char* username; - const char* password; - } HTTP_PROXY_OPTIONS; - - static const char* OPTION_HTTP_PROXY = "proxy_data"; - static const char* OPTION_HTTP_TIMEOUT = "timeout"; - - static const char* OPTION_PROXY_ADDRESS = "proxy_address"; - static const char* OPTION_PROXY_PORT = "proxy_port"; - - static const char* SU_OPTION_X509_CERT = "x509certificate"; - static const char* SU_OPTION_X509_PRIVATE_KEY = "x509privatekey"; - - static const char* OPTION_CURL_LOW_SPEED_LIMIT = "CURLOPT_LOW_SPEED_LIMIT"; - static const char* OPTION_CURL_LOW_SPEED_TIME = "CURLOPT_LOW_SPEED_TIME"; - static const char* OPTION_CURL_FRESH_CONNECT = "CURLOPT_FRESH_CONNECT"; - static const char* OPTION_CURL_FORBID_REUSE = "CURLOPT_FORBID_REUSE"; - static const char* OPTION_CURL_VERBOSE = "CURLOPT_VERBOSE"; - -#ifdef __cplusplus -} -#endif - -#endif /* SHARED_UTIL_OPTIONS_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/socketio.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/socketio.h deleted file mode 100644 index 737cac36..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/socketio.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef SOCKETIO_H -#define SOCKETIO_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/xlogging.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct SOCKETIO_CONFIG_TAG -{ - const char* hostname; - int port; - void* accepted_socket; -} SOCKETIO_CONFIG; - -#define RECEIVE_BYTES_VALUE 64 - -MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, socketio_create, void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, socketio_destroy, CONCRETE_IO_HANDLE, socket_io); -MOCKABLE_FUNCTION(, int, socketio_open, CONCRETE_IO_HANDLE, socket_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, socketio_close, CONCRETE_IO_HANDLE, socket_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, socketio_send, CONCRETE_IO_HANDLE, socket_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, socketio_dowork, CONCRETE_IO_HANDLE, socket_io); -MOCKABLE_FUNCTION(, int, socketio_setoption, CONCRETE_IO_HANDLE, socket_io, const char*, optionName, const void*, value); - -MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, socketio_get_interface_description); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* SOCKETIO_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/stdint_ce6.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/stdint_ce6.h deleted file mode 100644 index af4c734f..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/stdint_ce6.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/string_tokenizer.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/string_tokenizer.h deleted file mode 100644 index 5c2ddee9..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/string_tokenizer.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef STRING_TOKENIZER_H -#define STRING_TOKENIZER_H - -#include "azure_c_shared_utility/strings.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" -{ -#else -#endif - -typedef struct STRING_TOKEN_TAG* STRING_TOKENIZER_HANDLE; - -MOCKABLE_FUNCTION(, STRING_TOKENIZER_HANDLE, STRING_TOKENIZER_create, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, STRING_TOKENIZER_HANDLE, STRING_TOKENIZER_create_from_char, const char*, input); -MOCKABLE_FUNCTION(, int, STRING_TOKENIZER_get_next_token, STRING_TOKENIZER_HANDLE, t, STRING_HANDLE, output, const char*, delimiters); -MOCKABLE_FUNCTION(, void, STRING_TOKENIZER_destroy, STRING_TOKENIZER_HANDLE, t); - -#ifdef __cplusplus -} -#else -#endif - -#endif /*STRING_TOKENIZER_H*/ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/strings.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/strings.h deleted file mode 100644 index 082f8e97..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/strings.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef STRINGS_H -#define STRINGS_H - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct STRING_TAG* STRING_HANDLE; - -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_clone, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_construct, const char*, psz); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_construct_n, const char*, psz, size_t, n); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_with_memory, const char*, memory); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_quoted, const char*, source); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_JSON, const char*, source); -MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_from_byte_array, const unsigned char*, source, size_t, size); -MOCKABLE_FUNCTION(, void, STRING_delete, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, int, STRING_concat, STRING_HANDLE, handle, const char*, s2); -MOCKABLE_FUNCTION(, int, STRING_concat_with_STRING, STRING_HANDLE, s1, STRING_HANDLE, s2); -MOCKABLE_FUNCTION(, int, STRING_quote, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, int, STRING_copy, STRING_HANDLE, s1, const char*, s2); -MOCKABLE_FUNCTION(, int, STRING_copy_n, STRING_HANDLE, s1, const char*, s2, size_t, n); -MOCKABLE_FUNCTION(, const char*, STRING_c_str, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, int, STRING_empty, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, size_t, STRING_length, STRING_HANDLE, handle); -MOCKABLE_FUNCTION(, int, STRING_compare, STRING_HANDLE, s1, STRING_HANDLE, s2); - -extern STRING_HANDLE STRING_construct_sprintf(const char* format, ...); -extern int STRING_sprintf(STRING_HANDLE s1, const char* format, ...); - -#ifdef __cplusplus -} -#endif - -#endif /*STRINGS_H*/ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/threadapi.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/threadapi.h deleted file mode 100644 index ac8b8f41..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/threadapi.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file threadapi.h - * @brief This module implements support for creating new threads, - * terminating threads and sleeping threads. - */ - -#ifndef THREADAPI_H -#define THREADAPI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef int(*THREAD_START_FUNC)(void *); - -#define THREADAPI_RESULT_VALUES \ - THREADAPI_OK, \ - THREADAPI_INVALID_ARG, \ - THREADAPI_NO_MEMORY, \ - THREADAPI_ERROR - -/** @brief Enumeration specifying the possible return values for the APIs in - * this module. - */ -DEFINE_ENUM(THREADAPI_RESULT, THREADAPI_RESULT_VALUES); - -typedef void* THREAD_HANDLE; - -/** - * @brief Creates a thread with the entry point specified by the @p func - * argument. - * - * @param threadHandle The handle to the new thread is returned in this - * pointer. - * @param func A function pointer that indicates the entry point - * to the new thread. - * @param arg A void pointer that must be passed to the function - * pointed to by @p func. - * - * @return @c THREADAPI_OK if the API call is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, THREADAPI_RESULT, ThreadAPI_Create, THREAD_HANDLE*, threadHandle, THREAD_START_FUNC, func, void*, arg); - -/** - * @brief Blocks the calling thread by waiting on the thread identified by - * the @p threadHandle argument to complete. - * - * @param threadHandle The handle of the thread to wait for completion. - * @param res The result returned by the thread which is passed - * to the ::ThreadAPI_Exit function. - * - * When the @p threadHandle thread completes, all resources associated - * with the thread must be released and the thread handle will no - * longer be valid. - * - * @return @c THREADAPI_OK if the API call is successful or an error - * code in case it fails. - */ -MOCKABLE_FUNCTION(, THREADAPI_RESULT, ThreadAPI_Join, THREAD_HANDLE, threadHandle, int*, res); - -/** - * @brief This function is called by a thread when the thread exits. - * - * @param res An integer that represents the exit status of the thread. - * - * This function is called by a thread when the thread exits in order - * to return a result value to the caller of the ::ThreadAPI_Join - * function. The @p res value must be copied into the @p res out - * argument passed to the ::ThreadAPI_Join function. - */ -MOCKABLE_FUNCTION(, void, ThreadAPI_Exit, int, res); - -/** - * @brief Sleeps the current thread for the given number of milliseconds. - * - * @param milliseconds The number of milliseconds to sleep. - */ -MOCKABLE_FUNCTION(, void, ThreadAPI_Sleep, unsigned int, milliseconds); - -#ifdef __cplusplus -} -#endif - -#endif /* THREADAPI_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/tickcounter.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/tickcounter.h deleted file mode 100644 index 14b4065a..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/tickcounter.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef TICKCOUNTER_H -#define TICKCOUNTER_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/umock_c_prod.h" - - typedef struct TICK_COUNTER_INSTANCE_TAG* TICK_COUNTER_HANDLE; - - MOCKABLE_FUNCTION(, TICK_COUNTER_HANDLE, tickcounter_create); - MOCKABLE_FUNCTION(, void, tickcounter_destroy, TICK_COUNTER_HANDLE, tick_counter); - MOCKABLE_FUNCTION(, int, tickcounter_get_current_ms, TICK_COUNTER_HANDLE, tick_counter, uint64_t*, current_ms); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* TICKCOUNTER_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio.h deleted file mode 100644 index fe6a79d4..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef TLSIO_H -#define TLSIO_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -typedef struct TLSIO_CONFIG_TAG -{ - const char* hostname; - int port; -} TLSIO_CONFIG; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* TLSIO_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_openssl.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_openssl.h deleted file mode 100644 index 04d1cf03..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_openssl.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef TLSIO_OPENSSL_H -#define TLSIO_OPENSSL_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -MOCKABLE_FUNCTION(, int, tlsio_openssl_init); -MOCKABLE_FUNCTION(, void, tlsio_openssl_deinit); - -MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, tlsio_openssl_create, void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, tlsio_openssl_destroy, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_openssl_open, CONCRETE_IO_HANDLE, tls_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, tlsio_openssl_close, CONCRETE_IO_HANDLE, tls_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, tlsio_openssl_send, CONCRETE_IO_HANDLE, tls_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, tlsio_openssl_dowork, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_openssl_setoption, CONCRETE_IO_HANDLE, tls_io, const char*, optionName, const void*, value); - -MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, tlsio_openssl_get_interface_description); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* TLSIO_OPENSSL_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_schannel.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_schannel.h deleted file mode 100644 index 20b3d2eb..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_schannel.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef TLSIO_SCHANNEL_H -#define TLSIO_SCHANNEL_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, tlsio_schannel_create, void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, tlsio_schannel_destroy, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_schannel_open, CONCRETE_IO_HANDLE, tls_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, tlsio_schannel_close, CONCRETE_IO_HANDLE, tls_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, tlsio_schannel_send, CONCRETE_IO_HANDLE, tls_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, tlsio_schannel_dowork, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_schannel_setoption, CONCRETE_IO_HANDLE, tls_io, const char*, optionName, const void*, value); - -MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, tlsio_schannel_get_interface_description); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* TLSIO_SCHANNEL_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_wolfssl.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_wolfssl.h deleted file mode 100644 index 6b32a55f..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/tlsio_wolfssl.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef TLSIO_WOLFSSL_H -#define TLSIO_WOLFSSL_H - -#ifdef __cplusplus -extern "C" { -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/xlogging.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, tlsio_wolfssl_create, void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, tlsio_wolfssl_destroy, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_wolfssl_open, CONCRETE_IO_HANDLE, tls_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, tlsio_wolfssl_close, CONCRETE_IO_HANDLE, tls_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, tlsio_wolfssl_send, CONCRETE_IO_HANDLE, tls_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, tlsio_wolfssl_dowork, CONCRETE_IO_HANDLE, tls_io); -MOCKABLE_FUNCTION(, int, tlsio_wolfssl_setoption, CONCRETE_IO_HANDLE, tls_io, const char*, optionName, const void*, value); - -MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, tlsio_wolfssl_get_interface_description); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* TLSIO_WOLFSSL_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/umock_c_prod.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/umock_c_prod.h deleted file mode 100644 index c5d38435..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/umock_c_prod.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#undef MOCKABLE_FUNCTION - -/* This header is meant to be included by production code headers, so that the MOCKABLE_FUNCTION gets enabled. */ -/* - If you are porting to a new platform and do not want to build the tests, but only the production code, - simply make sure that this file is in the include path (either by copying it to your inc folder or - by adjusting the include paths). -*/ - -#ifdef ENABLE_MOCKS - -/* Codes_SRS_UMOCK_C_LIB_01_001: [MOCKABLE_FUNCTION shall be used to wrap function definition allowing the user to declare a function that can be mocked.]*/ -#define MOCKABLE_FUNCTION(modifiers, result, function, ...) \ - MOCKABLE_FUNCTION_UMOCK_INTERNAL_WITH_MOCK(modifiers, result, function, __VA_ARGS__) - -#include "umock_c.h" - -#else - -#include "azure_c_shared_utility/macro_utils.h" - -#define UMOCK_C_PROD_ARG_IN_SIGNATURE(count, arg_type, arg_name) arg_type arg_name IFCOMMA(count) - -/* Codes_SRS_UMOCK_C_LIB_01_002: [The macro shall generate a function signature in case ENABLE_MOCKS is not defined.] */ -/* Codes_SRS_UMOCK_C_LIB_01_005: [**If ENABLE_MOCKS is not defined, MOCKABLE_FUNCTION shall only generate a declaration for the function.] */ -/* Codes_SRS_UMOCK_C_LIB_01_001: [MOCKABLE_FUNCTION shall be used to wrap function definition allowing the user to declare a function that can be mocked.]*/ -#define MOCKABLE_FUNCTION(modifiers, result, function, ...) \ - result modifiers function(IF(COUNT_ARG(__VA_ARGS__),,void) FOR_EACH_2_COUNTED(UMOCK_C_PROD_ARG_IN_SIGNATURE, __VA_ARGS__)); - -#endif diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/uniqueid.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/uniqueid.h deleted file mode 100644 index 7c012541..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/uniqueid.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef UNIQUEID_H -#define UNIQUEID_H - -#include "azure_c_shared_utility/macro_utils.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -#define UNIQUEID_RESULT_VALUES \ - UNIQUEID_OK, \ - UNIQUEID_INVALID_ARG, \ - UNIQUEID_ERROR - - DEFINE_ENUM(UNIQUEID_RESULT, UNIQUEID_RESULT_VALUES) - - MOCKABLE_FUNCTION(, UNIQUEID_RESULT, UniqueId_Generate, char*, uid, size_t, bufferSize); - -#ifdef __cplusplus -} -#endif - -#endif /* UNIQUEID_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/urlencode.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/urlencode.h deleted file mode 100644 index c4bd23fe..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/urlencode.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef URLENCODE_H -#define URLENCODE_H - -#include "azure_c_shared_utility/strings.h" - -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" { -#endif - - MOCKABLE_FUNCTION(, STRING_HANDLE, URL_EncodeString, const char*, textEncode); - MOCKABLE_FUNCTION(, STRING_HANDLE, URL_Encode, STRING_HANDLE, input); - -#ifdef __cplusplus -} -#endif - -#endif /* URLENCODE_H */ - diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/vector.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/vector.h deleted file mode 100644 index 793ec534..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/vector.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef VECTOR_H -#define VECTOR_H - -#include "azure_c_shared_utility/crt_abstractions.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -#include -extern "C" -{ -#else -#include -#include -#endif - -typedef struct VECTOR_TAG* VECTOR_HANDLE; - -typedef bool(*PREDICATE_FUNCTION)(const void* element, const void* value); - -/* creation */ -MOCKABLE_FUNCTION(, VECTOR_HANDLE, VECTOR_create, size_t, elementSize); -MOCKABLE_FUNCTION(, void, VECTOR_destroy, VECTOR_HANDLE, handle); - -/* insertion */ -MOCKABLE_FUNCTION(, int, VECTOR_push_back, VECTOR_HANDLE, handle, const void*, elements, size_t, numElements); - -/* removal */ -MOCKABLE_FUNCTION(, void, VECTOR_erase, VECTOR_HANDLE, handle, void*, elements, size_t, numElements); -MOCKABLE_FUNCTION(, void, VECTOR_clear, VECTOR_HANDLE, handle); - -/* access */ -MOCKABLE_FUNCTION(, void*, VECTOR_element, const VECTOR_HANDLE, handle, size_t, index); -MOCKABLE_FUNCTION(, void*, VECTOR_front, const VECTOR_HANDLE, handle); -MOCKABLE_FUNCTION(, void*, VECTOR_back, const VECTOR_HANDLE, handle); -MOCKABLE_FUNCTION(, void*, VECTOR_find_if, const VECTOR_HANDLE, handle, PREDICATE_FUNCTION, pred, const void*, value); - -/* capacity */ -MOCKABLE_FUNCTION(, size_t, VECTOR_size, const VECTOR_HANDLE, handle); - -#ifdef __cplusplus -} -#else -#endif - -#endif /* VECTOR_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/cstdbool b/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/cstdbool deleted file mode 100644 index c01d3e93..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/cstdbool +++ /dev/null @@ -1,13 +0,0 @@ -// cstdbool standard header -#pragma once -#ifndef _CSTDBOOL_ -#define _CSTDBOOL_ -#include - -#include -#endif /* _CSTDBOOL_ */ - -/* -* Copyright (c) 1992-2013 by P.J. Plauger. ALL RIGHTS RESERVED. -* Consult your license regarding permissions and restrictions. -V6.40:0009 */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/stdbool.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/stdbool.h deleted file mode 100644 index 6015554d..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/windowsce/stdbool.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _WINCE_STDBOOL -#define _WINCE_STDBOOL - -#define __bool_true_false_are_defined 1 - -#define HAS_STDBOOL - -#ifndef __cplusplus - -typedef unsigned char bool; -typedef bool _Bool; - -#define false 0 -#define true 1 - -#endif /* __cplusplus */ - -#endif /* _WINCE_STDBOOL */ \ No newline at end of file diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/wsio.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/wsio.h deleted file mode 100644 index e0534c68..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/wsio.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef WSIO_H -#define WSIO_H - -#ifdef __cplusplus -extern "C" { -#include -#include -#else -#include -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/xlogging.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct WSIO_CONFIG_TAG -{ - const char* host; - int port; - const char* protocol_name; - const char* relative_path; - bool use_ssl; -} WSIO_CONFIG; - -MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, wsio_create, void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, wsio_destroy, CONCRETE_IO_HANDLE, ws_io); -MOCKABLE_FUNCTION(, int, wsio_open, CONCRETE_IO_HANDLE, ws_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, wsio_close, CONCRETE_IO_HANDLE, ws_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, wsio_send, CONCRETE_IO_HANDLE, ws_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, wsio_dowork, CONCRETE_IO_HANDLE, ws_io); -MOCKABLE_FUNCTION(, int, wsio_setoption, CONCRETE_IO_HANDLE, socket_io, const char*, optionName, const void*, value); -MOCKABLE_FUNCTION(, void*, wsio_clone_option, const char*, name, const void*, value); -MOCKABLE_FUNCTION(, void, wsio_destroy_option, const char*, name, const void*, value); -MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, wsio_retrieveoptions, CONCRETE_IO_HANDLE, handle); - -MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, wsio_get_interface_description); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* WSIO_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_openssl.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_openssl.h deleted file mode 100644 index 0a2c7dce..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_openssl.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef X509_OPENSSL_H -#define X509_OPENSSL_H - -#include "openssl/ssl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -MOCKABLE_FUNCTION(,int, x509_openssl_add_credentials, SSL_CTX*, ssl_ctx, const char*, x509certificate, const char*, x509privatekey); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_schannel.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_schannel.h deleted file mode 100644 index caabea89..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/x509_schannel.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef X509_SCHANNEL_H -#define X509_SCHANNEL_H - -#include "windows.h" - -#ifdef __cplusplus -extern "C" { -#else -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -typedef struct X509_SCHANNEL_HANDLE_DATA_TAG* X509_SCHANNEL_HANDLE; - -MOCKABLE_FUNCTION(, X509_SCHANNEL_HANDLE, x509_schannel_create, const char*, x509certificate, const char*, x509privatekey); -MOCKABLE_FUNCTION(, void, x509_schannel_destroy, X509_SCHANNEL_HANDLE, x509_schannel_handle); -MOCKABLE_FUNCTION(, PCCERT_CONTEXT, x509_schannel_get_certificate_context, X509_SCHANNEL_HANDLE, x509_schannel_handle); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/xio.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/xio.h deleted file mode 100644 index e3ce2d84..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/xio.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef XIO_H -#define XIO_H - -#include "azure_c_shared_utility/optionhandler.h" - -#include "azure_c_shared_utility/xlogging.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -extern "C" { -#else -#include -#endif /* __cplusplus */ - -typedef struct XIO_INSTANCE_TAG* XIO_HANDLE; -typedef void* CONCRETE_IO_HANDLE; - -typedef enum IO_SEND_RESULT_TAG -{ - IO_SEND_OK, - IO_SEND_ERROR, - IO_SEND_CANCELLED -} IO_SEND_RESULT; - -typedef enum IO_OPEN_RESULT_TAG -{ - IO_OPEN_OK, - IO_OPEN_ERROR, - IO_OPEN_CANCELLED -} IO_OPEN_RESULT; - -typedef void(*ON_BYTES_RECEIVED)(void* context, const unsigned char* buffer, size_t size); -typedef void(*ON_SEND_COMPLETE)(void* context, IO_SEND_RESULT send_result); -typedef void(*ON_IO_OPEN_COMPLETE)(void* context, IO_OPEN_RESULT open_result); -typedef void(*ON_IO_CLOSE_COMPLETE)(void* context); -typedef void(*ON_IO_ERROR)(void* context); - -typedef OPTIONHANDLER_HANDLE (*IO_RETRIEVEOPTIONS)(CONCRETE_IO_HANDLE concrete_io); -typedef CONCRETE_IO_HANDLE(*IO_CREATE)(void* io_create_parameters); -typedef void(*IO_DESTROY)(CONCRETE_IO_HANDLE concrete_io); -typedef int(*IO_OPEN)(CONCRETE_IO_HANDLE concrete_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context); -typedef int(*IO_CLOSE)(CONCRETE_IO_HANDLE concrete_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* callback_context); -typedef int(*IO_SEND)(CONCRETE_IO_HANDLE concrete_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context); -typedef void(*IO_DOWORK)(CONCRETE_IO_HANDLE concrete_io); -typedef int(*IO_SETOPTION)(CONCRETE_IO_HANDLE concrete_io, const char* optionName, const void* value); - - -typedef struct IO_INTERFACE_DESCRIPTION_TAG -{ - IO_RETRIEVEOPTIONS concrete_io_retrieveoptions; - IO_CREATE concrete_io_create; - IO_DESTROY concrete_io_destroy; - IO_OPEN concrete_io_open; - IO_CLOSE concrete_io_close; - IO_SEND concrete_io_send; - IO_DOWORK concrete_io_dowork; - IO_SETOPTION concrete_io_setoption; -} IO_INTERFACE_DESCRIPTION; - -MOCKABLE_FUNCTION(, XIO_HANDLE, xio_create, const IO_INTERFACE_DESCRIPTION*, io_interface_description, const void*, io_create_parameters); -MOCKABLE_FUNCTION(, void, xio_destroy, XIO_HANDLE, xio); -MOCKABLE_FUNCTION(, int, xio_open, XIO_HANDLE, xio, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context); -MOCKABLE_FUNCTION(, int, xio_close, XIO_HANDLE, xio, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context); -MOCKABLE_FUNCTION(, int, xio_send, XIO_HANDLE, xio, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context); -MOCKABLE_FUNCTION(, void, xio_dowork, XIO_HANDLE, xio); -MOCKABLE_FUNCTION(, int, xio_setoption, XIO_HANDLE, xio, const char*, optionName, const void*, value); -MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, xio_retrieveoptions, XIO_HANDLE, xio); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* XIO_H */ diff --git a/Simulator/DMSimulator/inc/azure_c_shared_utility/xlogging.h b/Simulator/DMSimulator/inc/azure_c_shared_utility/xlogging.h deleted file mode 100644 index 8fca316d..00000000 --- a/Simulator/DMSimulator/inc/azure_c_shared_utility/xlogging.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef XLOGGING_H -#define XLOGGING_H - -#ifdef __cplusplus -#include -#else -#include -#endif /* __cplusplus */ - -#include "azure_c_shared_utility/agenttime.h" - -typedef enum LOG_CATEGORY_TAG -{ - LOG_ERROR, - LOG_INFO, - LOG_TRACE -} LOG_CATEGORY; - -#if defined _MSC_VER -#define FUNC_NAME __FUNCDNAME__ -#else -#define FUNC_NAME __func__ -#endif - -typedef void(*LOGGER_LOG)(LOG_CATEGORY log_category, const char* file, const char* func, const int line, unsigned int options, const char* format, ...); - -#define LOG_NONE 0x00 -#define LOG_LINE 0x01 - -/*no logging is useful when time and fprintf are mocked*/ -#ifdef NO_LOGGING -#define LOG(...) -#define LogInfo(...) -#define LogError(...) -#define xlogging_get_log_function() NULL -#define xlogging_set_log_function(...) -#define LogErrorWinHTTPWithGetLastErrorAsString(...) -#define UNUSED(x) (void)(x) -#elif defined(ARDUINO_ARCH_ESP8266) -/* -The ESP8266 compiler don’t do a good job compiling this code, it do not understand that the ‘format?is -a ‘cont char*?and moves it to the RAM as a global variable, increasing a lot the .bss. So, we create a -specific LogInfo that explicitly pin the ‘format?on the PROGMEM (flash) using a _localFORMAT variable -with the macro PSTR. - -#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text"))) -#define PROGMEM ICACHE_RODATA_ATTR -#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];})) -const char* __localFORMAT = PSTR(FORMAT); - -On the other hand, vsprintf do not support the pinned ‘format?and os_printf do not works with va_list, -so we compacted the log in the macro LogInfo. -*/ -#include "esp8266/azcpgmspace.h" -#define LogInfo(FORMAT, ...) { \ - const char* __localFORMAT = PSTR(FORMAT); \ - os_printf(__localFORMAT, ##__VA_ARGS__); \ - os_printf("\r\n"); \ -} -#define LogError LogInfo - -#else /* !ARDUINO_ARCH_ESP8266 */ - -#if defined _MSC_VER -#define LOG(log_category, log_options, format, ...) { LOGGER_LOG l = xlogging_get_log_function(); if (l != NULL) l(log_category, __FILE__, FUNC_NAME, __LINE__, log_options, format, __VA_ARGS__); } -#else -#define LOG(log_category, log_options, format, ...) { LOGGER_LOG l = xlogging_get_log_function(); if (l != NULL) l(log_category, __FILE__, FUNC_NAME, __LINE__, log_options, format, ##__VA_ARGS__); } -#endif - -#if defined _MSC_VER -#define LogInfo(FORMAT, ...) do{LOG(LOG_INFO, LOG_LINE, FORMAT, __VA_ARGS__); }while(0) -#else -#define LogInfo(FORMAT, ...) do{LOG(LOG_INFO, LOG_LINE, FORMAT, ##__VA_ARGS__); }while(0) -#endif - -#if defined _MSC_VER -#define LogError(FORMAT, ...) do{ LOG(LOG_ERROR, LOG_LINE, FORMAT, __VA_ARGS__); }while(0) -#define TEMP_BUFFER_SIZE 1024 -#define MESSAGE_BUFFER_SIZE 260 -#define LogErrorWinHTTPWithGetLastErrorAsString(FORMAT, ...) do { \ - DWORD errorMessageID = GetLastError(); \ - LogError(FORMAT, __VA_ARGS__); \ - CHAR messageBuffer[MESSAGE_BUFFER_SIZE]; \ - if (errorMessageID == 0) \ - {\ - LogError("GetLastError() returned 0. Make sure you are calling this right after the code that failed. "); \ - } \ - else\ - {\ - int size = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, \ - GetModuleHandle("WinHttp"), errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), messageBuffer, MESSAGE_BUFFER_SIZE, NULL); \ - if (size == 0)\ - {\ - size = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), messageBuffer, MESSAGE_BUFFER_SIZE, NULL); \ - if (size == 0)\ - {\ - LogError("GetLastError Code: %d. ", errorMessageID); \ - }\ - else\ - {\ - LogError("GetLastError: %s.", messageBuffer); \ - }\ - }\ - else\ - {\ - LogError("GetLastError: %s.", messageBuffer); \ - }\ - }\ - } while(0) -#else -#define LogError(FORMAT, ...) do{ LOG(LOG_ERROR, LOG_LINE, FORMAT, ##__VA_ARGS__); }while(0) -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -extern void xlogging_set_log_function(LOGGER_LOG log_function); -extern LOGGER_LOG xlogging_get_log_function(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* ARDUINO_ARCH_ESP8266 */ - -#endif /* XLOGGING_H */ diff --git a/Simulator/DMSimulator/inc/blob.h b/Simulator/DMSimulator/inc/blob.h deleted file mode 100644 index 7d17b2b8..00000000 --- a/Simulator/DMSimulator/inc/blob.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file blob.h -* @brief Contains blob APIs needed for File Upload feature of IoTHub client. -* -* @details IoTHub client needs to upload a byte array by using blob storage API -* IoTHub service provides the complete SAS URI to execute a PUT request -* that will upload the data. -* -*/ - -#ifndef BLOB_H -#define BLOB_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/buffer_.h" - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#include "azure_c_shared_utility/umock_c_prod.h" - -#define BLOB_RESULT_VALUES \ - BLOB_OK, \ - BLOB_ERROR, \ - BLOB_NOT_IMPLEMENTED, \ - BLOB_HTTP_ERROR, \ - BLOB_INVALID_ARG - -DEFINE_ENUM(BLOB_RESULT, BLOB_RESULT_VALUES) - -/** -* @brief Synchronously uploads a byte array to blob storage -* -* @param SASURI The URI to use to upload data -* @param size The size of the data to be uploaded (can be 0) -* @param source A pointer to the byte array to be uploaded (can be NULL, but then size needs to be zero) -* @param httpStatus A pointer to an out argument receiving the HTTP status (available only when the return value is BLOB_OK) -* @param httpResponse A BUFFER_HANDLE that receives the HTTP response from the server (available only when the return value is BLOB_OK) -* -* @return A @c BLOB_RESULT. BLOB_OK means the blob has been uploaded successfully. Any other value indicates an error -*/ -MOCKABLE_FUNCTION(, BLOB_RESULT, Blob_UploadFromSasUri,const char*, SASURI, const unsigned char*, source, size_t, size, unsigned int*, httpStatus, BUFFER_HANDLE, httpResponse) - -#ifdef __cplusplus -} -#endif - -#endif /* BLOB_H */ diff --git a/Simulator/DMSimulator/inc/iothub_client.h b/Simulator/DMSimulator/inc/iothub_client.h deleted file mode 100644 index ba60d891..00000000 --- a/Simulator/DMSimulator/inc/iothub_client.h +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file iothub_client.h -* @brief Extends the IoTHubCLient_LL module with additional features. -* -* @details IoTHubClient is a module that extends the IoTHubCLient_LL -* module with 2 features: -* - scheduling the work for the IoTHubCLient from a -* thread, so that the user does not need to create their -* own thread -* - thread-safe APIs -*/ - -#ifndef IOTHUB_CLIENT_H -#define IOTHUB_CLIENT_H - -typedef struct IOTHUB_CLIENT_INSTANCE_TAG* IOTHUB_CLIENT_HANDLE; - -#include "iothub_client_ll.h" -#include "iothubtransport.h" -#include -#include - -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define IOTHUB_CLIENT_FILE_UPLOAD_RESULT_VALUES \ - FILE_UPLOAD_OK ,\ - FILE_UPLOAD_ERROR - - DEFINE_ENUM(IOTHUB_CLIENT_FILE_UPLOAD_RESULT, IOTHUB_CLIENT_FILE_UPLOAD_RESULT_VALUES) - typedef void(*IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK)(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, void* userContextCallback); - - /** - * @brief Creates a IoT Hub client for communication with an existing - * IoT Hub using the specified connection string parameter. - * - * @param connectionString Pointer to a character string - * @param protocol Function pointer for protocol implementation - * - * Sample connection string: - *
- *
HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessKey=[Device key goes here];
- *
HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessSignature=SharedAccessSignature sr=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net]/devices/[Device ID goes here]&sig=[SAS Token goes here]&se=[Expiry Time goes here];
- *
- * - * @return A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol); - - /** - * @brief Creates a IoT Hub client for communication with an existing IoT - * Hub using the specified parameters. - * - * @param config Pointer to an @c IOTHUB_CLIENT_CONFIG structure - * - * The API does not allow sharing of a connection across multiple - * devices. This is a blocking call. - * - * @return A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_Create, const IOTHUB_CLIENT_CONFIG*, config); - - /** - * @brief Creates a IoT Hub client for communication with an existing IoT - * Hub using the specified parameters. - * - * @param transportHandle TRANSPORT_HANDLE which represents a connection. - * @param config Pointer to an @c IOTHUB_CLIENT_CONFIG structure - * - * The API allows sharing of a connection across multiple - * devices. This is a blocking call. - * - * @return A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_CreateWithTransport, TRANSPORT_HANDLE, transportHandle, const IOTHUB_CLIENT_CONFIG*, config); - - /** - * @brief Disposes of resources allocated by the IoT Hub client. This is a - * blocking call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - */ - MOCKABLE_FUNCTION(, void, IoTHubClient_Destroy, IOTHUB_CLIENT_HANDLE, iotHubClientHandle); - - /** - * @brief Asynchronous call to send the message specified by @p eventMessageHandle. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param eventMessageHandle The handle to an IoT Hub message. - * @param eventConfirmationCallback The callback specified by the device for receiving - * confirmation of the delivery of the IoT Hub message. - * This callback can be expected to invoke the - * ::IoTHubClient_SendEventAsync function for the - * same message in an attempt to retry sending a failing - * message. The user can specify a @c NULL value here to - * indicate that no callback is required. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SendEventAsync, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback); - - /** - * @brief This function returns the current sending status for IoTHubClient. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param iotHubClientStatus The sending state is populated at the address pointed - * at by this parameter. The value will be set to - * @c IOTHUBCLIENT_SENDSTATUS_IDLE if there is currently - * no item to be sent and @c IOTHUBCLIENT_SENDSTATUS_BUSY - * if there are. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_GetSendStatus, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus); - - /** - * @brief Sets up the message callback to be invoked when IoT Hub issues a - * message to the device. This is a blocking call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param messageCallback The callback specified by the device for receiving - * messages from IoT Hub. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetMessageCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback); - - /** - * @brief This function returns in the out parameter @p lastMessageReceiveTime - * what was the value of the @c time function when the last message was - * received at the client. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param lastMessageReceiveTime Out parameter containing the value of @c time function - * when the last message was received. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_GetLastMessageReceiveTime, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime); - - /** - * @brief This API sets a runtime option identified by parameter @p optionName - * to a value pointed to by @p value. @p optionName and the data type - * @p value is pointing to are specific for every option. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param optionName Name of the option. - * @param value The value. - * - * The options that can be set via this API are: - * - @b timeout - the maximum time in milliseconds a communication is - * allowed to use. @p value is a pointer to an @c unsigned @c int with - * the timeout value in milliseconds. This is only supported for the HTTP - * protocol as of now. When the HTTP protocol uses CURL, the meaning of - * the parameter is total request time. When the HTTP protocol uses - * winhttp, the meaning is the same as the @c dwSendTimeout and - * @c dwReceiveTimeout parameters of the - * - * WinHttpSetTimeouts API. - * - @b CURLOPT_LOW_SPEED_LIMIT - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_LOW_SPEED_TIME - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_FORBID_REUSE - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_FRESH_CONNECT - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_VERBOSE - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b messageTimeout - the maximum time in milliseconds until a message - * is timeouted. The time starts at IoTHubClient_SendEventAsync. By default, - * messages do not expire. @p is a pointer to a uint64_t - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetOption, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value); - - /** - * @brief This API specifies a call back to be used when the device receives a state update. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param deviceTwinCallback The callback specified by the device client to be used for updating - * the desired state. The callback will be called in response to a - * request send by the IoTHub services. The payload will be passed to the - * callback, along with two version numbers: - * - Desired: - * - LastSeenReported: - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetDeviceTwinCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback); - - /** - * @brief This API sends a report of the device's properties and their current values. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param reportedState The current device property values to be 'reported' to the IoTHub. - * @param reportedStateCallback The callback specified by the device client to be called with the - * result of the transaction. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SendReportedState, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback); - - /** - * @brief This API sets callback for cloud to device method call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param deviceMethodCallback The callback which will be called by IoTHub. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetDeviceMethodCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback); - -#ifndef DONT_USE_UPLOADTOBLOB - /** - * @brief IoTHubClient_UploadToBlobAsync uploads data from memory to a file in Azure Blob Storage. - * - * @param iotHubClientHandle The handle created by a call to the IoTHubClient_Create function. - * @param destinationFileName The name of the file to be created in Azure Blob Storage. - * @param source The source of data. - * @param size The size of data. - * @param iotHubClientFileUploadCallback A callback to be invoked when the file upload operation has finished. - * @param context A user-provided context to be passed to the file upload callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_UploadToBlobAsync, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size, IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK, iotHubClientFileUploadCallback, void*, context); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_CLIENT_H */ diff --git a/Simulator/DMSimulator/inc/iothub_client_ll.h b/Simulator/DMSimulator/inc/iothub_client_ll.h deleted file mode 100644 index 1de860e5..00000000 --- a/Simulator/DMSimulator/inc/iothub_client_ll.h +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file iothub_client_ll.h -* @brief APIs that allow a user (usually a device) to communicate -* with an Azure IoTHub. -* -* @details IoTHubClient_LL is a module that allows a user (usually a -* device) to communicate with an Azure IoTHub. It can send events -* and receive messages. At any given moment in time there can only -* be at most 1 message callback function. -* -* This API surface contains a set of APIs that allows the user to -* interact with the lower layer portion of the IoTHubClient. These APIs -* contain @c _LL_ in their name, but retain the same functionality like the -* @c IoTHubClient_... APIs, with one difference. If the @c _LL_ APIs are -* used then the user is responsible for scheduling when the actual work done -* by the IoTHubClient happens (when the data is sent/received on/from the wire). -* This is useful for constrained devices where spinning a separate thread is -* often not desired. -*/ - -#ifndef IOTHUB_CLIENT_LL_H -#define IOTHUB_CLIENT_LL_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#define IOTHUB_CLIENT_RESULT_VALUES \ - IOTHUB_CLIENT_OK, \ - IOTHUB_CLIENT_INVALID_ARG, \ - IOTHUB_CLIENT_ERROR, \ - IOTHUB_CLIENT_INVALID_SIZE, \ - IOTHUB_CLIENT_INDEFINITE_TIME - -/** @brief Enumeration specifying the status of calls to various APIs in this module. -*/ - -DEFINE_ENUM(IOTHUB_CLIENT_RESULT, IOTHUB_CLIENT_RESULT_VALUES); - -struct IOTHUBTRANSPORT_CONFIG_TAG; -typedef struct IOTHUBTRANSPORT_CONFIG_TAG IOTHUBTRANSPORT_CONFIG; - -typedef struct IOTHUB_CLIENT_LL_HANDLE_DATA_TAG* IOTHUB_CLIENT_LL_HANDLE; - -#define IOTHUB_CLIENT_STATUS_VALUES \ - IOTHUB_CLIENT_SEND_STATUS_IDLE, \ - IOTHUB_CLIENT_SEND_STATUS_BUSY - -/** @brief Enumeration returned by the ::IoTHubClient_LL_GetSendStatus -* API to indicate the current sending status of the IoT Hub client. -*/ -DEFINE_ENUM(IOTHUB_CLIENT_STATUS, IOTHUB_CLIENT_STATUS_VALUES); - -#define IOTHUB_IDENTITY_TYPE_VALUE \ - IOTHUB_TYPE_TELEMETRY, \ - IOTHUB_TYPE_DEVICE_TWIN, \ - IOTHUB_TYPE_DEVICE_METHODS -DEFINE_ENUM(IOTHUB_IDENTITY_TYPE, IOTHUB_IDENTITY_TYPE_VALUE); - -#define IOTHUB_PROCESS_ITEM_RESULT_VALUE \ - IOTHUB_PROCESS_OK, \ - IOTHUB_PROCESS_ERROR, \ - IOTHUB_PROCESS_NOT_CONNECTED, \ - IOTHUB_PROCESS_CONTINUE -DEFINE_ENUM(IOTHUB_PROCESS_ITEM_RESULT, IOTHUB_PROCESS_ITEM_RESULT_VALUE); - -#include "azure_c_shared_utility/agenttime.h" -#include "azure_c_shared_utility/xio.h" -#include "azure_c_shared_utility/doublylinkedlist.h" -#include "iothub_message.h" -#include "iothub_transport_ll.h" -#include -#include - -#define IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_VALUES \ - IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_SUCCESS, \ - IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_ERROR \ - -/** @brief Enumeration returned by remotely executed functions -*/ -DEFINE_ENUM(IOTHUB_CLIENT_IOTHUB_METHOD_STATUS, IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_VALUES); - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define IOTHUB_CLIENT_CONFIRMATION_RESULT_VALUES \ - IOTHUB_CLIENT_CONFIRMATION_OK, \ - IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY, \ - IOTHUB_CLIENT_CONFIRMATION_MESSAGE_TIMEOUT, \ - IOTHUB_CLIENT_CONFIRMATION_ERROR \ - - /** @brief Enumeration passed in by the IoT Hub when the event confirmation - * callback is invoked to indicate status of the event processing in - * the hub. - */ - DEFINE_ENUM(IOTHUB_CLIENT_CONFIRMATION_RESULT, IOTHUB_CLIENT_CONFIRMATION_RESULT_VALUES); - -#define TRANSPORT_TYPE_VALUES \ - TRANSPORT_LL, /*LL comes from "LowLevel" */ \ - TRANSPORT_THREADED - - DEFINE_ENUM(TRANSPORT_TYPE, TRANSPORT_TYPE_VALUES); - -#define IOTHUBMESSAGE_DISPOSITION_RESULT_VALUES \ - IOTHUBMESSAGE_ACCEPTED, \ - IOTHUBMESSAGE_REJECTED, \ - IOTHUBMESSAGE_ABANDONED - - /** @brief Enumeration returned by the callback which is invoked whenever the - * IoT Hub sends a message to the device. - */ - DEFINE_ENUM(IOTHUBMESSAGE_DISPOSITION_RESULT, IOTHUBMESSAGE_DISPOSITION_RESULT_VALUES); - -#define DEVICE_TWIN_UPDATE_STATE_VALUES \ - DEVICE_TWIN_UPDATE_COMPLETE, \ - DEVICE_TWIN_UPDATE_PARTIAL - - DEFINE_ENUM(DEVICE_TWIN_UPDATE_STATE, DEVICE_TWIN_UPDATE_STATE_VALUES); - - typedef void(*IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK)(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback); - typedef IOTHUBMESSAGE_DISPOSITION_RESULT (*IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC)(IOTHUB_MESSAGE_HANDLE message, void* userContextCallback); - typedef const TRANSPORT_PROVIDER*(*IOTHUB_CLIENT_TRANSPORT_PROVIDER)(void); - - typedef void(*IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK)(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* userContextCallback); - typedef void(*IOTHUB_CLIENT_REPORTED_STATE_CALLBACK)(int status_code, void* userContextCallback); - typedef int(*IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC)(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size, void* userContextCallback); - - /** @brief This struct captures IoTHub client configuration. */ - typedef struct IOTHUB_CLIENT_CONFIG_TAG - { - /** @brief A function pointer that is passed into the @c IoTHubClientCreate. - * A function definition for AMQP is defined in the include @c iothubtransportamqp.h. - * A function definition for HTTP is defined in the include @c iothubtransporthttp.h - * A function definition for MQTT is defined in the include @c iothubtransportmqtt.h */ - IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol; - - /** @brief A string that identifies the device. */ - const char* deviceId; - - /** @brief The device key used to authenticate the device. - If neither deviceSasToken nor deviceKey is present then the authentication is assumed x509.*/ - const char* deviceKey; - - /** @brief The device SAS Token used to authenticate the device in place of device key. - If neither deviceSasToken nor deviceKey is present then the authentication is assumed x509.*/ - const char* deviceSasToken; - - /** @brief The IoT Hub name to which the device is connecting. */ - const char* iotHubName; - - /** @brief IoT Hub suffix goes here, e.g., private.azure-devices-int.net. */ - const char* iotHubSuffix; - - const char* protocolGatewayHostName; - } IOTHUB_CLIENT_CONFIG; - - /** @brief This struct captures IoTHub client device configuration. */ - typedef struct IOTHUB_CLIENT_DEVICE_CONFIG_TAG - { - /** @brief A function pointer that is passed into the @c IoTHubClientCreate. - * A function definition for AMQP is defined in the include @c iothubtransportamqp.h. - * A function definition for HTTP is defined in the include @c iothubtransporthttp.h - * A function definition for MQTT is defined in the include @c iothubtransportmqtt.h */ - IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol; - - /** @brief a transport handle implementing the protocol */ - void * transportHandle; - - /** @brief A string that identifies the device. */ - const char* deviceId; - - /** @brief The device key used to authenticate the device. - x509 authentication is is not supported for multiplexed connections*/ - const char* deviceKey; - - /** @brief The device SAS Token used to authenticate the device in place of device key. - x509 authentication is is not supported for multiplexed connections.*/ - const char* deviceSasToken; - } IOTHUB_CLIENT_DEVICE_CONFIG; - - /** @brief This struct captures IoTHub transport configuration. */ - struct IOTHUBTRANSPORT_CONFIG_TAG - { - const IOTHUB_CLIENT_CONFIG* upperConfig; - PDLIST_ENTRY waitingToSend; - }; - - - /** - * @brief Creates a IoT Hub client for communication with an existing - * IoT Hub using the specified connection string parameter. - * - * @param connectionString Pointer to a character string - * @param protocol Function pointer for protocol implementation - * - * Sample connection string: - *
- *
HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessKey=[Device key goes here];
- *
- * - * @return A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol); - - /** - * @brief Creates a IoT Hub client for communication with an existing IoT - * Hub using the specified parameters. - * - * @param config Pointer to an @c IOTHUB_CLIENT_CONFIG structure - * - * The API does not allow sharing of a connection across multiple - * devices. This is a blocking call. - * - * @return A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_Create, const IOTHUB_CLIENT_CONFIG*, config); - - /** - * @brief Creates a IoT Hub client for communication with an existing IoT - * Hub using an existing transport. - * - * @param config Pointer to an @c IOTHUB_CLIENT_DEVICE_CONFIG structure - * - * The API *allows* sharing of a connection across multiple - * devices. This is a blocking call. - * - * @return A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when - * invoking other functions for IoT Hub client and @c NULL on failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_CreateWithTransport, const IOTHUB_CLIENT_DEVICE_CONFIG*, config); - - /** - * @brief Disposes of resources allocated by the IoT Hub client. This is a - * blocking call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - */ - MOCKABLE_FUNCTION(, void, IoTHubClient_LL_Destroy, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle); - - /** - * @brief Asynchronous call to send the message specified by @p eventMessageHandle. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param eventMessageHandle The handle to an IoT Hub message. - * @param eventConfirmationCallback The callback specified by the device for receiving - * confirmation of the delivery of the IoT Hub message. - * This callback can be expected to invoke the - * ::IoTHubClient_LL_SendEventAsync function for the - * same message in an attempt to retry sending a failing - * message. The user can specify a @c NULL value here to - * indicate that no callback is required. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_LL_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SendEventAsync, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback); - - /** - * @brief This function returns the current sending status for IoTHubClient. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param iotHubClientStatus The sending state is populated at the address pointed - * at by this parameter. The value will be set to - * @c IOTHUBCLIENT_SENDSTATUS_IDLE if there is currently - * no item to be sent and @c IOTHUBCLIENT_SENDSTATUS_BUSY - * if there are. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_GetSendStatus, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus); - - /** - * @brief Sets up the message callback to be invoked when IoT Hub issues a - * message to the device. This is a blocking call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param messageCallback The callback specified by the device for receiving - * messages from IoT Hub. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_LL_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetMessageCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback); - - /** - * @brief This function returns in the out parameter @p lastMessageReceiveTime - * what was the value of the @c time function when the last message was - * received at the client. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param lastMessageReceiveTime Out parameter containing the value of @c time function - * when the last message was received. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_GetLastMessageReceiveTime, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime); - - /** - * @brief This function is meant to be called by the user when work - * (sending/receiving) can be done by the IoTHubClient. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * - * All IoTHubClient interactions (in regards to network traffic - * and/or user level callbacks) are the effect of calling this - * function and they take place synchronously inside _DoWork. - */ - MOCKABLE_FUNCTION(, void, IoTHubClient_LL_DoWork, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle); - - /** - * @brief This API sets a runtime option identified by parameter @p optionName - * to a value pointed to by @p value. @p optionName and the data type - * @p value is pointing to are specific for every option. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param optionName Name of the option. - * @param value The value. - * - * The options that can be set via this API are: - * - @b timeout - the maximum time in milliseconds a communication is - * allowed to use. @p value is a pointer to an @c unsigned @c int with - * the timeout value in milliseconds. This is only supported for the HTTP - * protocol as of now. When the HTTP protocol uses CURL, the meaning of - * the parameter is total request time. When the HTTP protocol uses - * winhttp, the meaning is the same as the @c dwSendTimeout and - * @c dwReceiveTimeout parameters of the - * - * WinHttpSetTimeouts API. - * - @b CURLOPT_LOW_SPEED_LIMIT - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_LOW_SPEED_TIME - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_FORBID_REUSE - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_FRESH_CONNECT - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b CURLOPT_VERBOSE - only available for HTTP protocol and only - * when CURL is used. It has the same meaning as CURL's option with the same - * name. @p value is pointer to a long. - * - @b keepalive - available for MQTT protocol. Integer value that sets the - * interval in seconds when pings are sent to the server. - * - @b logtrace - available for MQTT protocol. Boolean value that turns on and - * off the diagnostic logging. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetOption, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value); - - /** - * @brief This API specifies a call back to be used when the device receives a desired state update. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param deviceTwinCallback The callback specified by the device client to be used for updating - * the desired state. The callback will be called in response to patch - * request send by the IoTHub services. The payload will be passed to the - * callback, along with two version numbers: - * - Desired: - * - LastSeenReported: - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_LL_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetDeviceTwinCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback); - - /** - * @brief This API sneds a report of the device's properties and their current values. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param reportedState The current device property values to be 'reported' to the IoTHub. - * @param reportedStateCallback The callback specified by the device client to be called with the - * result of the transaction. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @b NOTE: The application behavior is undefined if the user calls - * the ::IoTHubClient_LL_Destroy function from within any callback. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SendReportedState, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback); - - /** - * @brief This API sets callback for cloud to device method call. - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param deviceMethodCallback The callback which will be called by IoTHub. - * @param userContextCallback User specified context that will be provided to the - * callback. This can be @c NULL. - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetDeviceMethodCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback); - -#ifndef DONT_USE_UPLOADTOBLOB - /** - * @brief This API uploads to Azure Storage the content pointed to by @p source having the size @p size - * under the blob name devicename/@pdestinationFileName - * - * @param iotHubClientHandle The handle created by a call to the create function. - * @param destinationFileName name of the file. - * @param source pointer to the source for file content (can be NULL) - * @param size the size of the source in memory (if @p source is NULL then size needs to be 0). - * - * @return IOTHUB_CLIENT_OK upon success or an error code upon failure. - */ - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size); - -#endif /*DONT_USE_UPLOADTOBLOB*/ - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_CLIENT_LL_H */ diff --git a/Simulator/DMSimulator/inc/iothub_client_ll_uploadtoblob.h b/Simulator/DMSimulator/inc/iothub_client_ll_uploadtoblob.h deleted file mode 100644 index 6c7ba094..00000000 --- a/Simulator/DMSimulator/inc/iothub_client_ll_uploadtoblob.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file iothub_client_ll.h -* @brief APIs that allow a user (usually a device) to communicate -* with an Azure IoTHub. -* -* @details IoTHubClient_LL is a module that allows a user (usually a -* device) to communicate with an Azure IoTHub. It can send events -* and receive messages. At any given moment in time there can only -* be at most 1 message callback function. -* -* This API surface contains a set of APIs that allows the user to -* interact with the lower layer portion of the IoTHubClient. These APIs -* contain @c _LL_ in their name, but retain the same functionality like the -* @c IoTHubClient_... APIs, with one difference. If the @c _LL_ APIs are -* used then the user is responsible for scheduling when the actual work done -* by the IoTHubClient happens (when the data is sent/received on/from the wire). -* This is useful for constrained devices where spinning a separate thread is -* often not desired. -*/ - -#ifndef DONT_USE_UPLOADTOBLOB - -#ifndef IOTHUB_CLIENT_LL_UPLOADTOBLOB_H -#define IOTHUB_CLIENT_LL_UPLOADTOBLOB_H - -#include "iothub_client_ll.h" - -#include "azure_c_shared_utility/umock_c_prod.h" -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -typedef struct IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE; - - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, IoTHubClient_LL_UploadToBlob_Create, const IOTHUB_CLIENT_CONFIG*, config); - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob_Impl, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle, const char*, destinationFileName, const unsigned char*, source, size_t, size); - MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob_SetOption, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle, const char*, optionName, const void*, value); - MOCKABLE_FUNCTION(, void, IoTHubClient_LL_UploadToBlob_Destroy, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle); -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_CLIENT_LL_UPLOADTOBLOB_H */ - -#else -#error "trying to #include iothub_client_ll_uploadtoblob.h in the presence of #define DONT_USE_UPLOADTOBLOB" -#endif /*DONT_USE_UPLOADTOBLOB*/ diff --git a/Simulator/DMSimulator/inc/iothub_client_options.h b/Simulator/DMSimulator/inc/iothub_client_options.h deleted file mode 100644 index 48873056..00000000 --- a/Simulator/DMSimulator/inc/iothub_client_options.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUB_CLIENT_OPTIONS_H -#define IOTHUB_CLIENT_OPTIONS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - - typedef struct IOTHUB_PROXY_OPTIONS_TAG - { - const char* host_address; - const char* username; - const char* password; - } IOTHUB_PROXY_OPTIONS; - - static const char* OPTION_LOG_TRACE = "logtrace"; - static const char* OPTION_X509_CERT = "x509certificate"; - static const char* OPTION_X509_PRIVATE_KEY = "x509privatekey"; - static const char* OPTION_KEEP_ALIVE = "keepalive"; - - static const char* OPTION_PROXY_HOST = "proxy_address"; - static const char* OPTION_PROXY_USERNAME = "proxy_username"; - static const char* OPTION_PROXY_PASSWORD = "proxy_password"; - - static const char* OPTION_SAS_TOKEN_LIFETIME = "sas_token_lifetime"; - static const char* OPTION_SAS_TOKEN_REFRESH_TIME = "sas_token_refresh_time"; - static const char* OPTION_CBS_REQUEST_TIMEOUT = "cbs_request_timeout"; - - static const char* OPTION_MIN_POLLING_TIME = "MinimumPollingTime"; - static const char* OPTION_BATCHING = "Batching"; - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_CLIENT_OPTIONS_H */ diff --git a/Simulator/DMSimulator/inc/iothub_client_private.h b/Simulator/DMSimulator/inc/iothub_client_private.h deleted file mode 100644 index 02d6a8e9..00000000 --- a/Simulator/DMSimulator/inc/iothub_client_private.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUB_CLIENT_PRIVATE_H -#define IOTHUB_CLIENT_PRIVATE_H - -#include - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/crt_abstractions.h" -#include "azure_c_shared_utility/doublylinkedlist.h" -#include "azure_c_shared_utility/umock_c_prod.h" -#include "azure_c_shared_utility/constbuffer.h" - -#include "iothub_message.h" -#include "iothub_client_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define EVENT_ENDPOINT "/messages/events" -#define MESSAGE_ENDPOINT "/messages/devicebound" -#define MESSAGE_ENDPOINT_HTTP "/messages/devicebound" -#define MESSAGE_ENDPOINT_HTTP_ETAG "/messages/devicebound/" -#define CLIENT_DEVICE_TYPE_PREFIX "iothubclient" -#define CLIENT_DEVICE_BACKSLASH "/" -#define CBS_REPLY_TO "cbs" -#define CBS_ENDPOINT "/$" CBS_REPLY_TO -#define API_VERSION "?api-version=2016-02-03" -#define REJECT_QUERY_PARAMETER "&reject" - -MOCKABLE_FUNCTION(, void, IoTHubClient_LL_SendComplete, IOTHUB_CLIENT_LL_HANDLE, handle, PDLIST_ENTRY, completed, IOTHUB_CLIENT_CONFIRMATION_RESULT, result); -MOCKABLE_FUNCTION(, void, IoTHubClient_LL_ReportedStateComplete, IOTHUB_CLIENT_LL_HANDLE, handle, uint32_t, item_id, int, status_code); -MOCKABLE_FUNCTION(, IOTHUBMESSAGE_DISPOSITION_RESULT, IoTHubClient_LL_MessageCallback, IOTHUB_CLIENT_LL_HANDLE, handle, IOTHUB_MESSAGE_HANDLE, message); -MOCKABLE_FUNCTION(, void, IoTHubClient_LL_RetrievePropertyComplete, IOTHUB_CLIENT_LL_HANDLE, handle, DEVICE_TWIN_UPDATE_STATE, update_state, const unsigned char*, payLoad, size_t, size); -MOCKABLE_FUNCTION(, int, IoTHubClient_LL_DeviceMethodComplete, IOTHUB_CLIENT_LL_HANDLE, handle, const char*, method_name, const unsigned char*, payLoad, size_t, size, BUFFER_HANDLE, result_payload); - -typedef struct IOTHUB_MESSAGE_LIST_TAG -{ - IOTHUB_MESSAGE_HANDLE messageHandle; - IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK callback; - void* context; - DLIST_ENTRY entry; - uint64_t ms_timesOutAfter; /* a value of "0" means "no timeout", if the IOTHUBCLIENT_LL's handle tickcounter > msTimesOutAfer then the message shall timeout*/ -}IOTHUB_MESSAGE_LIST; - -typedef struct IOTHUB_DEVICE_TWIN_TAG -{ - uint32_t item_id; - uint64_t ms_timesOutAfter; /* a value of "0" means "no timeout", if the IOTHUBCLIENT_LL's handle tickcounter > msTimesOutAfer then the message shall timeout*/ - IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reported_state_callback; - CONSTBUFFER_HANDLE report_data_handle; - void* context; - DLIST_ENTRY entry; -} IOTHUB_DEVICE_TWIN; - -union IOTHUB_IDENTITY_INFO_TAG -{ - IOTHUB_DEVICE_TWIN* device_twin; - IOTHUB_MESSAGE_LIST* iothub_message; -}; - - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_CLIENT_PRIVATE_H */ diff --git a/Simulator/DMSimulator/inc/iothub_client_version.h b/Simulator/DMSimulator/inc/iothub_client_version.h deleted file mode 100644 index 1bcea565..00000000 --- a/Simulator/DMSimulator/inc/iothub_client_version.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file iothub_client_version.h -* @brief Functions for managing the client SDK version. -*/ - -#ifndef IOTHUB_CLIENT_VERSION_H -#define IOTHUB_CLIENT_VERSION_H - -#define IOTHUB_SDK_VERSION "1.0.16" - -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - /** - * @brief Returns a pointer to a null terminated string containing the - * current IoT Hub Client SDK version. - * - * @return Pointer to a null terminated string containing the - * current IoT Hub Client SDK version. - */ - MOCKABLE_FUNCTION(, const char*, IoTHubClient_GetVersionString); - -#ifdef __cplusplus -} -#endif - -#endif // IOTHUB_CLIENT_VERSION_H diff --git a/Simulator/DMSimulator/inc/iothub_message.h b/Simulator/DMSimulator/inc/iothub_message.h deleted file mode 100644 index 1cc0795e..00000000 --- a/Simulator/DMSimulator/inc/iothub_message.h +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -/** @file iothub_message.h -* @brief The @c IoTHub_Message component encapsulates one message that -* can be transferred by an IoT hub client. -*/ - -#ifndef IOTHUB_MESSAGE_H -#define IOTHUB_MESSAGE_H - -#include "azure_c_shared_utility/macro_utils.h" -#include "azure_c_shared_utility/map.h" -#include "azure_c_shared_utility/umock_c_prod.h" - -#ifdef __cplusplus -#include -extern "C" -{ -#else -#include -#endif - -#define IOTHUB_MESSAGE_RESULT_VALUES \ - IOTHUB_MESSAGE_OK, \ - IOTHUB_MESSAGE_INVALID_ARG, \ - IOTHUB_MESSAGE_INVALID_TYPE, \ - IOTHUB_MESSAGE_ERROR \ - -/** @brief Enumeration specifying the status of calls to various - * APIs in this module. - */ -DEFINE_ENUM(IOTHUB_MESSAGE_RESULT, IOTHUB_MESSAGE_RESULT_VALUES); - -#define IOTHUBMESSAGE_CONTENT_TYPE_VALUES \ -IOTHUBMESSAGE_BYTEARRAY, \ -IOTHUBMESSAGE_STRING, \ -IOTHUBMESSAGE_UNKNOWN \ - -/** @brief Enumeration specifying the content type of the a given - * message. - */ -DEFINE_ENUM(IOTHUBMESSAGE_CONTENT_TYPE, IOTHUBMESSAGE_CONTENT_TYPE_VALUES); - -typedef struct IOTHUB_MESSAGE_HANDLE_DATA_TAG* IOTHUB_MESSAGE_HANDLE; - -/** - * @brief Creates a new IoT hub message from a byte array. The type of the - * message will be set to @c IOTHUBMESSAGE_BYTEARRAY. - * - * @param byteArray The byte array from which the message is to be created. - * @param size The size of the byte array. - * - * @return A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully - * created or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_CreateFromByteArray, const unsigned char*, byteArray, size_t, size); - -/** - * @brief Creates a new IoT hub message from a null terminated string. The - * type of the message will be set to @c IOTHUBMESSAGE_STRING. - * - * @param source The null terminated string from which the message is to be - * created. - * - * @return A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully - * created or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_CreateFromString, const char*, source); - -/** - * @brief Creates a new IoT hub message with the content identical to that - * of the @p iotHubMessageHandle parameter. - * - * @param iotHubMessageHandle Handle to the message that is to be cloned. - * - * @return A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully - * cloned or @c NULL in case an error occurs. - */ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_Clone, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** - * @brief Fetches a pointer and size for the data associated with the IoT - * hub message handle. If the content type of the message is not - * @c IOTHUBMESSAGE_BYTEARRAY then the function returns - * @c IOTHUB_MESSAGE_INVALID_ARG. - * - * @param iotHubMessageHandle Handle to the message. - * @param buffer Pointer to the memory location where the - * pointer to the buffer will be written. - * @param size The size of the buffer will be written to - * this address. - * - * @return Returns IOTHUB_MESSAGE_OK if the byte array was fetched successfully - * or an error code otherwise. - */ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_GetByteArray, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const unsigned char**, buffer, size_t*, size); - -/** - * @brief Returns the null terminated string stored in the message. - * If the content type of the message is not @c IOTHUBMESSAGE_STRING - * then the function returns @c NULL. - * - * @param iotHubMessageHandle Handle to the message. - * - * @return @c NULL if an error occurs or a pointer to the stored null - * terminated string otherwise. - */ -MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetString, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** - * @brief Returns the content type of the message given by parameter - * @c iotHubMessageHandle. - * - * @param iotHubMessageHandle Handle to the message. - * - * @return An @c IOTHUBMESSAGE_CONTENT_TYPE value. - */ -MOCKABLE_FUNCTION(, IOTHUBMESSAGE_CONTENT_TYPE, IoTHubMessage_GetContentType, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** - * @brief Gets a handle to the message's properties map. - * - * @param iotHubMessageHandle Handle to the message. - * - * @return A @c MAP_HANDLE pointing to the properties map for this message. - */ -MOCKABLE_FUNCTION(, MAP_HANDLE, IoTHubMessage_Properties, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** -* @brief Gets the MessageId from the IOTHUB_MESSAGE_HANDLE. -* -* @param iotHubMessageHandle Handle to the message. -* -* @return A const char* pointing to the Message Id. -*/ -MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetMessageId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** -* @brief Sets the MessageId for the IOTHUB_MESSAGE_HANDLE. -* -* @param iotHubMessageHandle Handle to the message. -* @param messageId Pointer to the memory location of the messageId -* -* @return Returns IOTHUB_MESSAGE_OK if the messageId was set successfully -* or an error code otherwise. -*/ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetMessageId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, messageId); - -/** -* @brief Gets the CorrelationId from the IOTHUB_MESSAGE_HANDLE. -* -* @param iotHubMessageHandle Handle to the message. -* -* @return A const char* pointing to the Correlation Id. -*/ -MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetCorrelationId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -/** -* @brief Sets the CorrelationId for the IOTHUB_MESSAGE_HANDLE. -* -* @param iotHubMessageHandle Handle to the message. -* @param correlationId Pointer to the memory location of the messageId -* -* @return Returns IOTHUB_MESSAGE_OK if the messageId was set successfully -* or an error code otherwise. -*/ -MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetCorrelationId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, correlationId); - -/** - * @brief Frees all resources associated with the given message handle. - * - * @param iotHubMessageHandle Handle to the message. - */ -MOCKABLE_FUNCTION(, void, IoTHubMessage_Destroy, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle); - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_MESSAGE_H */ diff --git a/Simulator/DMSimulator/inc/iothub_transport_ll.h b/Simulator/DMSimulator/inc/iothub_transport_ll.h deleted file mode 100644 index a7d996e0..00000000 --- a/Simulator/DMSimulator/inc/iothub_transport_ll.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUB_TRANSPORT_LL_H -#define IOTHUB_TRANSPORT_LL_H - -typedef void* TRANSPORT_LL_HANDLE; -typedef void* IOTHUB_DEVICE_HANDLE; - -struct TRANSPORT_PROVIDER_TAG; -typedef struct TRANSPORT_PROVIDER_TAG TRANSPORT_PROVIDER; - -union IOTHUB_IDENTITY_INFO_TAG; -typedef union IOTHUB_IDENTITY_INFO_TAG IOTHUB_IDENTITY_INFO; - -#include "azure_c_shared_utility/doublylinkedlist.h" -#include "azure_c_shared_utility/strings.h" -#include "iothub_message.h" -#include "iothub_client_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - /** @brief This struct captures device configuration. */ - typedef struct IOTHUB_DEVICE_CONFIG_TAG - { - /** @brief A string that identifies the device. */ - const char* deviceId; - - /** @brief The device key used to authenticate the device. */ - const char* deviceKey; - - /** @brief The device SAS used to authenticate the device in place of using the device key. */ - const char* deviceSasToken; - - } IOTHUB_DEVICE_CONFIG; - - typedef STRING_HANDLE (*pfIoTHubTransport_GetHostname)(TRANSPORT_LL_HANDLE handle); - typedef IOTHUB_CLIENT_RESULT(*pfIoTHubTransport_SetOption)(TRANSPORT_LL_HANDLE handle, const char *optionName, const void* value); - typedef TRANSPORT_LL_HANDLE(*pfIoTHubTransport_Create)(const IOTHUBTRANSPORT_CONFIG* config); - typedef void (*pfIoTHubTransport_Destroy)(TRANSPORT_LL_HANDLE handle); - typedef IOTHUB_DEVICE_HANDLE(*pfIotHubTransport_Register)(TRANSPORT_LL_HANDLE handle, const IOTHUB_DEVICE_CONFIG* device, IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, PDLIST_ENTRY waitingToSend); - typedef void(*pfIotHubTransport_Unregister)(IOTHUB_DEVICE_HANDLE deviceHandle); - typedef int (*pfIoTHubTransport_Subscribe)(IOTHUB_DEVICE_HANDLE handle); - typedef void (*pfIoTHubTransport_Unsubscribe)(IOTHUB_DEVICE_HANDLE handle); - typedef void (*pfIoTHubTransport_DoWork)(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle); - typedef IOTHUB_CLIENT_RESULT(*pfIoTHubTransport_GetSendStatus)(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_STATUS *iotHubClientStatus); - typedef int (*pfIoTHubTransport_Subscribe_DeviceTwin)(IOTHUB_DEVICE_HANDLE handle); - typedef void (*pfIoTHubTransport_Unsubscribe_DeviceTwin)(IOTHUB_DEVICE_HANDLE handle); - typedef IOTHUB_PROCESS_ITEM_RESULT(*pfIoTHubTransport_ProcessItem)(TRANSPORT_LL_HANDLE handle, IOTHUB_IDENTITY_TYPE item_type, IOTHUB_IDENTITY_INFO* iothub_item); - typedef int(*pfIoTHubTransport_Subscribe_DeviceMethod)(IOTHUB_DEVICE_HANDLE handle); - typedef void(*pfIoTHubTransport_Unsubscribe_DeviceMethod)(IOTHUB_DEVICE_HANDLE handle); - -#define TRANSPORT_PROVIDER_FIELDS \ -pfIoTHubTransport_Subscribe_DeviceMethod IoTHubTransport_Subscribe_DeviceMethod; \ -pfIoTHubTransport_Unsubscribe_DeviceMethod IoTHubTransport_Unsubscribe_DeviceMethod;\ -pfIoTHubTransport_Subscribe_DeviceTwin IoTHubTransport_Subscribe_DeviceTwin; \ -pfIoTHubTransport_Unsubscribe_DeviceTwin IoTHubTransport_Unsubscribe_DeviceTwin; \ -pfIoTHubTransport_ProcessItem IoTHubTransport_ProcessItem; \ -pfIoTHubTransport_GetHostname IoTHubTransport_GetHostname; \ -pfIoTHubTransport_SetOption IoTHubTransport_SetOption; \ -pfIoTHubTransport_Create IoTHubTransport_Create; \ -pfIoTHubTransport_Destroy IoTHubTransport_Destroy; \ -pfIotHubTransport_Register IoTHubTransport_Register; \ -pfIotHubTransport_Unregister IoTHubTransport_Unregister; \ -pfIoTHubTransport_Subscribe IoTHubTransport_Subscribe; \ -pfIoTHubTransport_Unsubscribe IoTHubTransport_Unsubscribe; \ -pfIoTHubTransport_DoWork IoTHubTransport_DoWork; \ -pfIoTHubTransport_GetSendStatus IoTHubTransport_GetSendStatus /*there's an intentional missing ; on this line*/ - - struct TRANSPORT_PROVIDER_TAG - { - TRANSPORT_PROVIDER_FIELDS; - }; - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_TRANSPORT_LL_H */ diff --git a/Simulator/DMSimulator/inc/iothubtransport.h b/Simulator/DMSimulator/inc/iothubtransport.h deleted file mode 100644 index 89c23f28..00000000 --- a/Simulator/DMSimulator/inc/iothubtransport.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUB_TRANSPORT_H -#define IOTHUB_TRANSPORT_H - -typedef struct TRANSPORT_HANDLE_DATA_TAG* TRANSPORT_HANDLE; - -#include "azure_c_shared_utility/lock.h" -#include "azure_c_shared_utility/crt_abstractions.h" -#include "iothub_client.h" -#include "iothub_client_private.h" -#include "iothub_transport_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -extern TRANSPORT_HANDLE IoTHubTransport_Create(IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol, const char* iotHubName, const char* iotHubSuffix); -extern void IoTHubTransport_Destroy(TRANSPORT_HANDLE transportHandle); -extern LOCK_HANDLE IoTHubTransport_GetLock(TRANSPORT_HANDLE transportHandle); -extern TRANSPORT_LL_HANDLE IoTHubTransport_GetLLTransport(TRANSPORT_HANDLE transportHandle); -extern IOTHUB_CLIENT_RESULT IoTHubTransport_StartWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_HANDLE clientHandle); -extern bool IoTHubTransport_SignalEndWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_HANDLE clientHandle); -extern void IoTHubTransport_JoinWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_HANDLE clientHandle); - -#ifdef __cplusplus -} -#endif - -#endif /* IOTHUB_TRANSPORT_H */ diff --git a/Simulator/DMSimulator/inc/iothubtransportamqp.h b/Simulator/DMSimulator/inc/iothubtransportamqp.h deleted file mode 100644 index 24ef6818..00000000 --- a/Simulator/DMSimulator/inc/iothubtransportamqp.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUBTRANSPORTAMQP_H -#define IOTHUBTRANSPORTAMQP_H - -#include "iothub_transport_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - extern const TRANSPORT_PROVIDER* AMQP_Protocol(void); - -#ifdef __cplusplus -} -#endif - -#endif /*IOTHUBTRANSPORTAMQP_H*/ diff --git a/Simulator/DMSimulator/inc/iothubtransportamqp_auth.h b/Simulator/DMSimulator/inc/iothubtransportamqp_auth.h deleted file mode 100644 index 8b17ba1d..00000000 --- a/Simulator/DMSimulator/inc/iothubtransportamqp_auth.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -  -#ifndef IOTHUBTRANSPORTAMQP_AUTH_H -#define IOTHUBTRANSPORTAMQP_AUTH_H -  -#include "azure-uamqp-c/cbs.h" -#include "azure_c_shared_utility/strings.h" -#include "iothub_transport_ll.h" -  -#ifdef __cplusplus -extern "C" -{ -#endif -  - typedef enum AUTHENTICATION_STATUS_TAG - { -  AUTHENTICATION_STATUS_IDLE, -  AUTHENTICATION_STATUS_IN_PROGRESS, -  AUTHENTICATION_STATUS_TIMEOUT, -  AUTHENTICATION_STATUS_FAILURE, -  AUTHENTICATION_STATUS_OK - } AUTHENTICATION_STATUS; -  - typedef enum AMQP_TRANSPORT_CREDENTIAL_TYPE_TAG - { -  CREDENTIAL_NOT_BUILD, -  X509, -  DEVICE_KEY, -  DEVICE_SAS_TOKEN, - } AMQP_TRANSPORT_CREDENTIAL_TYPE; -  - typedef struct X509_CREDENTIAL_TAG - { -  const char* x509certificate; -  const char* x509privatekey; - } X509_CREDENTIAL; -  - typedef union AMQP_TRANSPORT_CREDENTIAL_UNION_TAG - { -  // Key associated to the device to be used. -  STRING_HANDLE deviceKey; -  -  // SAS associated to the device to be used. -  STRING_HANDLE deviceSasToken; -  -  // X509  -  X509_CREDENTIAL x509credential; - } AMQP_TRANSPORT_CREDENTIAL_UNION; -  - typedef struct AMQP_TRANSPORT_CREDENTIAL_TAG - { -  AMQP_TRANSPORT_CREDENTIAL_TYPE credentialType; -  AMQP_TRANSPORT_CREDENTIAL_UNION credential; - } AMQP_TRANSPORT_CREDENTIAL; -  - typedef AUTHENTICATION_STATE_HANDLE void*; -  - /** @brief Creates a state holder for all authentication-related information and connections. - * - *   @returns an instance of the AUTHENTICATION_STATE_HANDLE if succeeds, NULL if any failure occurs. - */ - extern AUTHENTICATION_STATE_HANDLE authentication_create(const char* deviceId, AMQP_TRANSPORT_CREDENTIAL* credentials, TRANSPORT_LL_HANDLE transport); -  - /** @brief Establishes the first authentication for the device in the transport it is registered to. - * - * @details If SAS token or key are used, creates a cbs instance for the transport if it does not have one,  - *            and puts a SAS token in (creates one if key is used, or applies the SAS token if provided by user). - *            If certificates are used, they are set on the tls_io instance of the transport. - * - *   @returns 0 if it succeeds, non-zero if it fails. - */ - extern int authentication_authenticate(AUTHENTICATION_STATE_HANDLE authentication_state); -  - /** @brief Indicates if the device is authenticated successfuly, if authentication is in progress or completed with failure. - * - *   @returns A flag indicating the current authentication status of the device. - */ - extern AUTHENTICATION_STATUS authentication_get_status(AUTHENTICATION_STATE_HANDLE authentication_state); -  - /** @brief Refreshes the authentication if needed. - * - * @details If SAS key is used, a new token is generated and put to cbs if the previous generated token is expired. - * - *   @returns 0 if it succeeds, non-zero if it fails. - */ - extern int authentication_refresh(AUTHENTICATION_STATE_HANDLE authentication_state); -  - /** @brief Sets the common options related to certificates and cbs. - * - * @details The new options are only applied effectively to the transport on the next call to authenticate() or refresh(). - * - *   @returns 0 if it succeeds, non-zero if it fails. - */ - extern int authentication_set_option(AUTHENTICATION_STATE_HANDLE authentication_state, const char* name, const void* value); -  - /** @brief De-authenticates the device and destroy the state instance. - * - * @details Closes the subscription to cbs if in use, destroys the cbs instance if it is the last device registered. - *            No action is taken if certificate-based authentication if used. - * - *   @returns 0 if it succeeds, non-zero if it fails. - */ - extern int authentication_destroy(AUTHENTICATION_STATE_HANDLE authentication_state); -  -#ifdef __cplusplus -} -#endif -  -#endif /*IOTHUBTRANSPORTAMQP_AUTH_H*/ \ No newline at end of file diff --git a/Simulator/DMSimulator/inc/iothubtransportamqp_websockets.h b/Simulator/DMSimulator/inc/iothubtransportamqp_websockets.h deleted file mode 100644 index 04bd1c89..00000000 --- a/Simulator/DMSimulator/inc/iothubtransportamqp_websockets.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUBTRANSPORTAMQP_WEBSOCKETS_H -#define IOTHUBTRANSPORTAMQP_WEBSOCKETS_H - -#include "iothub_client_private.h" -#include "iothub_transport_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - extern const TRANSPORT_PROVIDER* AMQP_Protocol_over_WebSocketsTls(void); - -#ifdef __cplusplus -} -#endif - -#endif /*IOTHUBTRANSPORTAMQP_WEBSOCKETS_H*/ diff --git a/Simulator/DMSimulator/inc/iothubtransporthttp.h b/Simulator/DMSimulator/inc/iothubtransporthttp.h deleted file mode 100644 index 7bcd6803..00000000 --- a/Simulator/DMSimulator/inc/iothubtransporthttp.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUBTRANSPORTHTTP_H -#define IOTHUBTRANSPORTHTTP_H - -#include "iothub_transport_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - extern const TRANSPORT_PROVIDER* HTTP_Protocol(void); - -#ifdef __cplusplus -} -#endif - -#endif /*IOTHUBTRANSPORTHTTP_H*/ diff --git a/Simulator/DMSimulator/inc/iothubtransportmqtt.h b/Simulator/DMSimulator/inc/iothubtransportmqtt.h deleted file mode 100644 index 0dc2bba0..00000000 --- a/Simulator/DMSimulator/inc/iothubtransportmqtt.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef IOTHUBTRANSPORTMQTT_H -#define IOTHUBTRANSPORTMQTT_H - -#include "iothub_transport_ll.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - extern const TRANSPORT_PROVIDER* MQTT_Protocol(void); - -#ifdef __cplusplus -} -#endif - -#endif /*IOTHUBTRANSPORTMQTT_H*/ diff --git a/Simulator/DMSimulator/inc/uamqp_messaging.h b/Simulator/DMSimulator/inc/uamqp_messaging.h deleted file mode 100644 index f3a3721c..00000000 --- a/Simulator/DMSimulator/inc/uamqp_messaging.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef UAMQP_MESSAGING_H -#define UAMQP_MESSAGING_H - -#include "iothub_message.h" -#include "azure_uamqp_c/message.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - extern int IoTHubMessage_CreateFromUamqpMessage(MESSAGE_HANDLE uamqp_message, IOTHUB_MESSAGE_HANDLE* iothubclient_message); - extern int message_create_from_iothub_message(IOTHUB_MESSAGE_HANDLE iothub_message, MESSAGE_HANDLE* uamqp_message); - -#ifdef __cplusplus -} -#endif - -#endif /*UAMQP_MESSAGING_H*/ \ No newline at end of file diff --git a/Simulator/DMSimulator/iothub_client_sample_device_method.c b/Simulator/DMSimulator/iothub_client_sample_device_method.c deleted file mode 100644 index b669c479..00000000 --- a/Simulator/DMSimulator/iothub_client_sample_device_method.c +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#include -#include -#include -#include - -#include "iothub_client.h" -#include "iothub_message.h" -#include "azure_c_shared_utility/threadapi.h" -#include "azure_c_shared_utility/crt_abstractions.h" -#include "azure_c_shared_utility/platform.h" -#include "iothubtransportmqtt.h" -#include "SendReport.h" -#include "utilities.h" -#include "DMTasks/DMTaskEngine.h" - -#ifdef MBED_BUILD_TIMESTAMP -#include "certs.h" -#endif // MBED_BUILD_TIMESTAMP - -/*String containing Hostname, Device Id & Device Key in the format: */ -/* "HostName=;DeviceId=;SharedAccessKey=" */ -/* "HostName=;DeviceId=;SharedAccessSignature=" */ - -static int callbackCounter; -static bool g_continueRunning; -#define MESSAGE_COUNT 5 -#define DOWORK_LOOP_NUM 3 - -static char* connectionString; -static char* reportedProperties; - -typedef struct EVENT_INSTANCE_TAG -{ - IOTHUB_MESSAGE_HANDLE messageHandle; - size_t messageTrackingId; // For tracking the messages within the user callback. -} EVENT_INSTANCE; - -static int DeviceMethodCallback(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* resp_size, void* userContextCallback) -{ - (void)userContextCallback; - - printf("\r\nDevice Method called\r\n"); - printf("Device Method name: %s\r\n", method_name); - printf("Device Method payload: %.*s\r\n", (int)size, (const char*)payload); - - int status = OnDeviceMethod(method_name, payload, size, response, resp_size); - - if (status <= 0) - { - status = 200; - AllocAndPrintf(response, resp_size, "Response from %s with parameter %.*s", method_name, size, payload); - } - - printf("\r\nResponse status: %d\r\n", status); - printf("Response payload: %.*s\r\n\r\n", (int)*resp_size, *response); - - callbackCounter++; - return status; -} - -static int DeviceTwinCallback(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* userContextCallback) -{ - (void)userContextCallback; - - printf("\r\nDevice Twin changed\r\n"); - printf("Update state: %d\r\n", update_state); - printf("payLoad: %.*s\r\n", size, payLoad); - - return 200; -} - -static void ReportedStateCallback(int status_code, void* userContextCallback) -{ - (void)userContextCallback; - - printf("\r\nReported state changed\r\n"); - printf("Status code: %d\r\n", status_code); -} - -void iothub_client_sample_device_method_run(void) -{ - IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle; - - g_continueRunning = true; - - callbackCounter = 0; - int receiveContext = 0; - - if (platform_init() != 0) - { - (void)printf("Failed to initialize the platform.\r\n"); - } - else - { - if ((iotHubClientHandle = IoTHubClient_LL_CreateFromConnectionString(connectionString, MQTT_Protocol)) == NULL) - { - (void)printf("ERROR: iotHubClientHandle is NULL!\r\n"); - } - else - { - bool traceOn = true; - IoTHubClient_LL_SetOption(iotHubClientHandle, "logtrace", &traceOn); - -#ifdef MBED_BUILD_TIMESTAMP - // For mbed add the certificate information - if (IoTHubClient_LL_SetOption(iotHubClientHandle, "TrustedCerts", certificates) != IOTHUB_CLIENT_OK) - { - printf("failure to set option \"TrustedCerts\"\r\n"); - } -#endif // MBED_BUILD_TIMESTAMP - - // Send reported properties as startup telemetry - SetupSendReport(iotHubClientHandle); - SendReport((unsigned char*)reportedProperties, strlen(reportedProperties)); - - if (IoTHubClient_LL_SetDeviceMethodCallback(iotHubClientHandle, DeviceMethodCallback, &receiveContext) != IOTHUB_CLIENT_OK) - { - (void)printf("ERROR: IoTHubClient_LL_SetDeviceMethodCallback..........FAILED!\r\n"); - } - else - { - (void)printf("IoTHubClient_LL_SetDeviceMethodCallback...successful.\r\n"); - - if (IoTHubClient_LL_SetDeviceTwinCallback(iotHubClientHandle, DeviceTwinCallback, &receiveContext) != IOTHUB_CLIENT_OK) - { - (void)printf("ERROR: IoTHubClient_LL_SetDeviceTwinCallback..........FAILED!\r\n"); - } - - size_t iterator = 0; - do - { - IoTHubClient_LL_DoWork(iotHubClientHandle); - ThreadAPI_Sleep(1); - - StepDMTask(); - - iterator++; - } while (g_continueRunning); - - (void)printf("iothub_client_sample_device_method exited, call DoWork %d more time to complete final sending...\r\n", DOWORK_LOOP_NUM); - for (size_t index = 0; index < DOWORK_LOOP_NUM; index++) - { - IoTHubClient_LL_DoWork(iotHubClientHandle); - ThreadAPI_Sleep(1); - } - } - IoTHubClient_LL_Destroy(iotHubClientHandle); - } - - platform_deinit(); - } -} - -void Usage(void) -{ - printf("Usage: /d: /p:\r\n"); -} - -DWORD WINAPI WatchDogThread(LPVOID lpThreadParameter) -{ - (void)lpThreadParameter; - - DWORD currentProcessID = GetCurrentProcessId(); - HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - - DWORD parentProcessID = 0; - PROCESSENTRY32 processEntry; - processEntry.dwSize = sizeof(processEntry); - - BOOL bContinue = Process32First(hSnapshot, &processEntry); - while (bContinue) - { - if (processEntry.th32ProcessID == currentProcessID) - { - parentProcessID = processEntry.th32ParentProcessID; - break; - } - - bContinue = Process32Next(hSnapshot, &processEntry); - } - CloseHandle(hSnapshot); - - if (parentProcessID != 0) - { - printf("Parent process ID: %d\r\n", parentProcessID); - HANDLE hParent = OpenProcess(SYNCHRONIZE, FALSE, parentProcessID); - - if (hParent != NULL) - { - printf("Opened parent process\r\n"); - if (WaitForSingleObject(hParent, INFINITE) == WAIT_OBJECT_0) - { - exit(0); - } - } - else - { - printf("Failed to open parent process. GetLastError()=%d\r\n", GetLastError()); - } - } - else - { - printf("Failed to find parent process\r\n"); - } - - return 0; -} - -int main(int argc, const char* argv[]) -{ - for (int i = 1; i < argc; i++) - { - if (strncmp(argv[i], "/d:", 3) == 0) - { - connectionString = _strdup(argv[i] + 3); - } - else if (strncmp(argv[i], "/p:", 3) == 0) - { - reportedProperties = _strdup(argv[i] + 3); - } - } - - if (strlen(connectionString) == 0) - { - printf("Missing connection string\r\n"); - Usage(); - return -1; - } - - if (strlen(reportedProperties) == 0) - { - printf("Missing connection string\r\n"); - Usage(); - return -1; - } - - SetConsoleTitle(connectionString); - - HANDLE hProcess = CreateThread(NULL, 0, WatchDogThread, NULL, 0, NULL); - CloseHandle(hProcess); - - iothub_client_sample_device_method_run(); - return 0; -} \ No newline at end of file diff --git a/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj b/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj deleted file mode 100644 index de5cc735..00000000 --- a/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj +++ /dev/null @@ -1,148 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {88C4CAFE-3DA8-4CDC-A7DC-1A8635DBE533} - Win32Proj - Win32 - iothub_client_sample_device_method - 8.1 - - - - Application - false - MultiByte - v140 - - - Application - false - MultiByte - v140 - - - - - - - - - - <_ProjectFileVersion>10.0.20506.1 - Debug\ - Debug\ - DMSimulator - .exe - true - true - Release\ - Release\ - DMSimulator - .exe - false - true - - - - .\inc;.\inc\azure_c_shared_utility;%(AdditionalIncludeDirectories) - Debug/ - EnableFastChecks - CompileAsC - ProgramDatabase - 4232 - - - Disabled - Disabled - NotUsing - MultiThreadedDebugDLL - true - Level4 - WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ARCHITECTURE_x86=1;GB_MEASURE_MEMORY_FOR_THIS;GB_DEBUG_ALLOC;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions) - $(IntDir) - - - /machine:X86 /debug %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;.\lib\iothub_client_mqtt_transport.lib;.\lib\iothub_client.lib;.\lib\umqtt.lib;.\lib\aziotsharedutil.lib;crypt32.lib;winhttp.lib;ws2_32.lib;secur32.lib;rpcrt4.lib - %(AdditionalLibraryDirectories) - true - %(IgnoreSpecificDefaultLibraries) - - - $(OutputPath)$(TargetName).pdb - Console - - - - - false - - - - - .\inc;.\inc\azure_c_shared_utility;%(AdditionalIncludeDirectories) - Release/ - CompileAsC - 4232 - - - AnySuitable - MaxSpeed - NotUsing - MultiThreadedDLL - true - Level4 - WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ARCHITECTURE_x86=1;GB_MEASURE_MEMORY_FOR_THIS;GB_DEBUG_ALLOC;CMAKE_INTDIR="Release";%(PreprocessorDefinitions) - $(IntDir) - - - - - /machine:X86 %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;.\lib\iothub_client_mqtt_transport.lib;.\lib\iothub_client.lib;.\lib\umqtt.lib;.\lib\aziotsharedutil.lib;crypt32.lib;winhttp.lib;ws2_32.lib;secur32.lib;rpcrt4.lib - %(AdditionalLibraryDirectories) - false - %(IgnoreSpecificDefaultLibraries) - - - $(OutputPath)$(TargetName).pdb - Console - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj.filters b/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj.filters deleted file mode 100644 index 314c6cbe..00000000 --- a/Simulator/DMSimulator/iothub_client_sample_device_method.vcxproj.filters +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - jsmn - - - - DMTasks - - - DMTasks - - - - DMTasks - - - - - {1ddede64-4e94-4ce3-bea4-26cc96469b0f} - - - {589290d6-4d16-422d-8157-10417af1237a} - - - - - jsmn - - - - DMTasks - - - DMTasks - - - - DMTasks - - - DMTasks - - - \ No newline at end of file diff --git a/Simulator/DMSimulator/jsmn/jsmn.c b/Simulator/DMSimulator/jsmn/jsmn.c deleted file mode 100644 index bcd6392a..00000000 --- a/Simulator/DMSimulator/jsmn/jsmn.c +++ /dev/null @@ -1,314 +0,0 @@ -#include "jsmn.h" - -/** - * Allocates a fresh unused token from the token pull. - */ -static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, - jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *tok; - if (parser->toknext >= num_tokens) { - return NULL; - } - tok = &tokens[parser->toknext++]; - tok->start = tok->end = -1; - tok->size = 0; -#ifdef JSMN_PARENT_LINKS - tok->parent = -1; -#endif - return tok; -} - -/** - * Fills token type and boundaries. - */ -static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, - int start, int end) { - token->type = type; - token->start = start; - token->end = end; - token->size = 0; -} - -/** - * Fills next available token with JSON primitive. - */ -static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, - size_t len, jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *token; - int start; - - start = parser->pos; - - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - switch (js[parser->pos]) { -#ifndef JSMN_STRICT - /* In strict mode primitive must be followed by "," or "}" or "]" */ - case ':': -#endif - case '\t' : case '\r' : case '\n' : case ' ' : - case ',' : case ']' : case '}' : - goto found; - } - if (js[parser->pos] < 32 || js[parser->pos] >= 127) { - parser->pos = start; - return JSMN_ERROR_INVAL; - } - } -#ifdef JSMN_STRICT - /* In strict mode primitive must be followed by a comma/object/array */ - parser->pos = start; - return JSMN_ERROR_PART; -#endif - -found: - if (tokens == NULL) { - parser->pos--; - return 0; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) { - parser->pos = start; - return JSMN_ERROR_NOMEM; - } - jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos); -#ifdef JSMN_PARENT_LINKS - token->parent = parser->toksuper; -#endif - parser->pos--; - return 0; -} - -/** - * Fills next token with JSON string. - */ -static int jsmn_parse_string(jsmn_parser *parser, const char *js, - size_t len, jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *token; - - int start = parser->pos; - - parser->pos++; - - /* Skip starting quote */ - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - char c = js[parser->pos]; - - /* Quote: end of string */ - if (c == '\"') { - if (tokens == NULL) { - return 0; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) { - parser->pos = start; - return JSMN_ERROR_NOMEM; - } - jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos); -#ifdef JSMN_PARENT_LINKS - token->parent = parser->toksuper; -#endif - return 0; - } - - /* Backslash: Quoted symbol expected */ - if (c == '\\' && parser->pos + 1 < len) { - int i; - parser->pos++; - switch (js[parser->pos]) { - /* Allowed escaped symbols */ - case '\"': case '/' : case '\\' : case 'b' : - case 'f' : case 'r' : case 'n' : case 't' : - break; - /* Allows escaped symbol \uXXXX */ - case 'u': - parser->pos++; - for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) { - /* If it isn't a hex character we have an error */ - if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */ - (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */ - (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */ - parser->pos = start; - return JSMN_ERROR_INVAL; - } - parser->pos++; - } - parser->pos--; - break; - /* Unexpected symbol */ - default: - parser->pos = start; - return JSMN_ERROR_INVAL; - } - } - } - parser->pos = start; - return JSMN_ERROR_PART; -} - -/** - * Parse JSON string and fill tokens. - */ -int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, - jsmntok_t *tokens, unsigned int num_tokens) { - int r; - int i; - jsmntok_t *token; - int count = parser->toknext; - - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - char c; - jsmntype_t type; - - c = js[parser->pos]; - switch (c) { - case '{': case '[': - count++; - if (tokens == NULL) { - break; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) - return JSMN_ERROR_NOMEM; - if (parser->toksuper != -1) { - tokens[parser->toksuper].size++; -#ifdef JSMN_PARENT_LINKS - token->parent = parser->toksuper; -#endif - } - token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY); - token->start = parser->pos; - parser->toksuper = parser->toknext - 1; - break; - case '}': case ']': - if (tokens == NULL) - break; - type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY); -#ifdef JSMN_PARENT_LINKS - if (parser->toknext < 1) { - return JSMN_ERROR_INVAL; - } - token = &tokens[parser->toknext - 1]; - for (;;) { - if (token->start != -1 && token->end == -1) { - if (token->type != type) { - return JSMN_ERROR_INVAL; - } - token->end = parser->pos + 1; - parser->toksuper = token->parent; - break; - } - if (token->parent == -1) { - if(token->type != type || parser->toksuper == -1) { - return JSMN_ERROR_INVAL; - } - break; - } - token = &tokens[token->parent]; - } -#else - for (i = parser->toknext - 1; i >= 0; i--) { - token = &tokens[i]; - if (token->start != -1 && token->end == -1) { - if (token->type != type) { - return JSMN_ERROR_INVAL; - } - parser->toksuper = -1; - token->end = parser->pos + 1; - break; - } - } - /* Error if unmatched closing bracket */ - if (i == -1) return JSMN_ERROR_INVAL; - for (; i >= 0; i--) { - token = &tokens[i]; - if (token->start != -1 && token->end == -1) { - parser->toksuper = i; - break; - } - } -#endif - break; - case '\"': - r = jsmn_parse_string(parser, js, len, tokens, num_tokens); - if (r < 0) return r; - count++; - if (parser->toksuper != -1 && tokens != NULL) - tokens[parser->toksuper].size++; - break; - case '\t' : case '\r' : case '\n' : case ' ': - break; - case ':': - parser->toksuper = parser->toknext - 1; - break; - case ',': - if (tokens != NULL && parser->toksuper != -1 && - tokens[parser->toksuper].type != JSMN_ARRAY && - tokens[parser->toksuper].type != JSMN_OBJECT) { -#ifdef JSMN_PARENT_LINKS - parser->toksuper = tokens[parser->toksuper].parent; -#else - for (i = parser->toknext - 1; i >= 0; i--) { - if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) { - if (tokens[i].start != -1 && tokens[i].end == -1) { - parser->toksuper = i; - break; - } - } - } -#endif - } - break; -#ifdef JSMN_STRICT - /* In strict mode primitives are: numbers and booleans */ - case '-': case '0': case '1' : case '2': case '3' : case '4': - case '5': case '6': case '7' : case '8': case '9': - case 't': case 'f': case 'n' : - /* And they must not be keys of the object */ - if (tokens != NULL && parser->toksuper != -1) { - jsmntok_t *t = &tokens[parser->toksuper]; - if (t->type == JSMN_OBJECT || - (t->type == JSMN_STRING && t->size != 0)) { - return JSMN_ERROR_INVAL; - } - } -#else - /* In non-strict mode every unquoted value is a primitive */ - default: -#endif - r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens); - if (r < 0) return r; - count++; - if (parser->toksuper != -1 && tokens != NULL) - tokens[parser->toksuper].size++; - break; - -#ifdef JSMN_STRICT - /* Unexpected char in strict mode */ - default: - return JSMN_ERROR_INVAL; -#endif - } - } - - if (tokens != NULL) { - for (i = parser->toknext - 1; i >= 0; i--) { - /* Unmatched opened object or array */ - if (tokens[i].start != -1 && tokens[i].end == -1) { - return JSMN_ERROR_PART; - } - } - } - - return count; -} - -/** - * Creates a new parser based over a given buffer with an array of tokens - * available. - */ -void jsmn_init(jsmn_parser *parser) { - parser->pos = 0; - parser->toknext = 0; - parser->toksuper = -1; -} - diff --git a/Simulator/DMSimulator/jsmn/jsmn.h b/Simulator/DMSimulator/jsmn/jsmn.h deleted file mode 100644 index 5a5200ee..00000000 --- a/Simulator/DMSimulator/jsmn/jsmn.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __JSMN_H_ -#define __JSMN_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * JSON type identifier. Basic types are: - * o Object - * o Array - * o String - * o Other primitive: number, boolean (true/false) or null - */ -typedef enum { - JSMN_UNDEFINED = 0, - JSMN_OBJECT = 1, - JSMN_ARRAY = 2, - JSMN_STRING = 3, - JSMN_PRIMITIVE = 4 -} jsmntype_t; - -enum jsmnerr { - /* Not enough tokens were provided */ - JSMN_ERROR_NOMEM = -1, - /* Invalid character inside JSON string */ - JSMN_ERROR_INVAL = -2, - /* The string is not a full JSON packet, more bytes expected */ - JSMN_ERROR_PART = -3 -}; - -/** - * JSON token description. - * type type (object, array, string etc.) - * start start position in JSON data string - * end end position in JSON data string - */ -typedef struct { - jsmntype_t type; - int start; - int end; - int size; -#ifdef JSMN_PARENT_LINKS - int parent; -#endif -} jsmntok_t; - -/** - * JSON parser. Contains an array of token blocks available. Also stores - * the string being parsed now and current position in that string - */ -typedef struct { - unsigned int pos; /* offset in the JSON string */ - unsigned int toknext; /* next token to allocate */ - int toksuper; /* superior token node, e.g parent object or array */ -} jsmn_parser; - -/** - * Create JSON parser over an array of tokens - */ -void jsmn_init(jsmn_parser *parser); - -/** - * Run JSON parser. It parses a JSON data string into and array of tokens, each describing - * a single JSON object. - */ -int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, - jsmntok_t *tokens, unsigned int num_tokens); - -#ifdef __cplusplus -} -#endif - -#endif /* __JSMN_H_ */ diff --git a/Simulator/DMSimulator/lib/aziotsharedutil.lib b/Simulator/DMSimulator/lib/aziotsharedutil.lib deleted file mode 100644 index e0a44749..00000000 Binary files a/Simulator/DMSimulator/lib/aziotsharedutil.lib and /dev/null differ diff --git a/Simulator/DMSimulator/lib/iothub_client.lib b/Simulator/DMSimulator/lib/iothub_client.lib deleted file mode 100644 index 2b79d4b1..00000000 Binary files a/Simulator/DMSimulator/lib/iothub_client.lib and /dev/null differ diff --git a/Simulator/DMSimulator/lib/iothub_client_mqtt_transport.lib b/Simulator/DMSimulator/lib/iothub_client_mqtt_transport.lib deleted file mode 100644 index 98792aa6..00000000 Binary files a/Simulator/DMSimulator/lib/iothub_client_mqtt_transport.lib and /dev/null differ diff --git a/Simulator/DMSimulator/lib/umqtt.lib b/Simulator/DMSimulator/lib/umqtt.lib deleted file mode 100644 index 7edbc77e..00000000 Binary files a/Simulator/DMSimulator/lib/umqtt.lib and /dev/null differ diff --git a/Simulator/Simulator.WebJob/DMSimulator.exe b/Simulator/Simulator.WebJob/DMSimulator.exe deleted file mode 100644 index dccb4021..00000000 Binary files a/Simulator/Simulator.WebJob/DMSimulator.exe and /dev/null differ diff --git a/Simulator/Simulator.WebJob/Simulator.WebJob.csproj b/Simulator/Simulator.WebJob/Simulator.WebJob.csproj index 7ef22679..bde2c667 100644 --- a/Simulator/Simulator.WebJob/Simulator.WebJob.csproj +++ b/Simulator/Simulator.WebJob/Simulator.WebJob.csproj @@ -258,11 +258,6 @@ false - - - Always - - @@ -273,7 +268,8 @@ - copy /y $(SolutionDir)\Simulator\DMSimulator\$(ConfigurationName)\DMSimulator.exe $(ProjectDir) + +