Merge branch 'release/1.8' of github.com:apache/geode-native into release/1.8
diff --git a/.cpackignore b/.cpackignore
index 7881528..dfa89f11 100644
--- a/.cpackignore
+++ b/.cpackignore
@@ -1,16 +1,17 @@
-/\.git/
-/\.DS_Store
+/\\.git/
+/\\.DS_Store
 
 /build-.*/
 
 /build/
-/\.settings/
-/\.cproject
-/\.project
-/\.idea/
-\.vs/
-\.vscode/
+/\\.settings/
+/\\.cproject
+/\\.project
+/\\.idea/
+\\.vs/
+\\.vscode/
 
 /examples/dotnet/.*/bin/
 /examples/dotnet/.*/obj/
-\.ruby-version
+\\.ruby-version
+
diff --git a/.gitignore b/.gitignore
index 3486d30..9e0f0cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 /build-*/
 
+/cmake-build-*/
 /build/
 /.settings/
 /.cproject
@@ -11,3 +12,5 @@
 /examples/dotnet/*/bin/
 /examples/dotnet/*/obj/
 .ruby-version
+
+.DS_Store
diff --git a/.lgtm.yml b/.lgtm.yml
new file mode 100644
index 0000000..c941789
--- /dev/null
+++ b/.lgtm.yml
@@ -0,0 +1,16 @@
+extraction:
+  cpp:
+    configure:
+      command:
+        - mkdir _lgtm_build_dir
+        - cd _lgtm_build_dir
+        - wget -O apache-geode.zip http://mirror.transip.net/apache/geode/1.7.0/apache-geode-1.7.0.zip
+        - unzip apache-geode.zip
+        - cmake -DGEODE_ROOT="`pwd`/apache-geode-1.7.0" ..
+        - cd dependencies && cmake --build . -- -j2
+    index:
+      build_command:
+        - cd _lgtm_build_dir && cmake --build . --target apache-geode  -- -j 2
+  csharp:
+    index:
+      buildless: true
diff --git a/.ratignore b/.ratignore
index 108dbb7..dbf556f 100644
--- a/.ratignore
+++ b/.ratignore
@@ -1,36 +1,39 @@
-# text files
-.*\.clang-format$
-.*\.clang-tidy$
-.*\.gitignore$
-.*\.ratignore$
+# rat -E only matches filename components
+# All matches are anchored automatically to who string
 
-.*md$
-.*json$
-.*deprecated_xml_instructions.txt$
+# /
+\.clang-format
+\.clang-tidy
+\.gitignore
+\.ratignore
+\.lgtm.yml
+\.lcovrc
+\.cpackignore
 
-# generated files
-.*Resources.Designer.cs$
-.*Settings.Designer.cs$
+# dependencies/*/
+patches
 
-# public domain
-.*CPPDictionary.hpp$
-.*CPPSymbol.hpp$
-.*CPP_parser.g$
-.*DictEntry.hpp$
-.*Dictionary.cpp$
-.*Dictionary.hpp$
-.*STDCTokenTypes.txt$
-.*Support.cpp$
+# packer/*/
+.*\.cloud-init
+.*\.json
 
-# expect script
-.*changepasswd$
-.*winrm.cloud-init$
+# docs/
+Gemfile.lock
+package-list
+.*\.md
+.*\.md.erb
 
-# doxygen
-.*package-list$
-.*testframeworkdox.txt$
-docs
+# contrib/pdxautoserializer
+# public domain sources
+CPPDictionary.hpp
+CPPSymbol.hpp
+CPP_parser.g
+DictEntry.hpp
+Dictionary.cpp
+Dictionary.hpp
+STDCTokenTypes.txt
+Support.cpp
 
-# patches
-.*patches$
-.*ACE.config.h.in$
+# well known build directories
+build
+cmake-build-.*
diff --git a/.travis.yml b/.travis.yml
index d61ddab..304d967 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -29,8 +29,8 @@
     - SOURCE_DIR="/geode-native"
 
   matrix:
-    - DOCKER_COMMAND="java -jar /apache-rat-0.12/apache-rat-0.12.jar -E ${SOURCE_DIR}/.ratignore -d ${SOURCE_DIR}"
-    - DOCKER_COMMAND="mkdir build && cd build && cmake ${SOURCE_DIR} -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_CXX_CLANG_TIDY=clang-tidy && cmake --build . -- -j2 && ./cppcache/test/apache-geode_unittests && git -C ${SOURCE_DIR} diff --exit-code"
+    - DOCKER_COMMAND="echo rat && mkdir build && cd build && cmake ${SOURCE_DIR} -DUSE_RAT=ON && cmake --build . --target rat-check"
+    - DOCKER_COMMAND="echo test && mkdir build && cd build && cmake ${SOURCE_DIR} -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_CXX_CLANG_TIDY=clang-tidy && cmake --build . -- -j2 && ./cppcache/test/apache-geode_unittests && git -C ${SOURCE_DIR} diff --exit-code"
 
 install:
   - docker pull "${DOCKER_IMAGE}"
diff --git a/BUILDING.md b/BUILDING.md
index 79f2eae..4ddd014 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -1,7 +1,7 @@
 # Building
 
 ## Prerequisites (All Platforms)
-* [CMake 3.10](https://cmake.org/) or newer
+* [CMake 3.12](https://cmake.org/) or newer
 * C++11 compiler *(see platform specific requirements)*
 * [Doxygen 8.11](http://www.stack.nl/~dimitri/doxygen/download.html) *(for building source documentation)*
 * [Apache Geode](http://geode.apache.org/releases/) binaries installed or available to link against
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4b34ca6..93fd5a1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,11 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.10)
+cmake_minimum_required(VERSION 3.12)
 project(nativeclient LANGUAGES C CXX)
 
 option(USE_PCH "Use precompiled headers (PCH)." OFF)
-option(USE_CPP_COVERAGE "Enable profiling and coverage report analysis for apache-geode cpp library" OFF)
+option(USE_CPP_COVERAGE "Enable profiling and coverage report analysis for apache-geode cpp library." OFF)
+option(USE_RAT "Enable Apache Rat checking." OFF)
 
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
 
@@ -37,9 +38,16 @@
   endif()
 endif()
 
+get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(NOT CMAKE_BUILD_TYPE AND NOT GENERATOR_IS_MULTI_CONFIG)
+  message(STATUS "Using default build type 'Debug'.")
+  set(CMAKE_BUILD_TYPE Debug CACHE STRING "Specifies the build type on single-configuration generators." FORCE)
+endif()
+
 set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
 set(DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
 set(BUILD_BITS 64 CACHE STRING "Build for 64 (Geode default) or 32 bit.")
+option(BUILD_BENCHMARKS "Build benchmarks" ON)
 
 set(PRODUCT_VENDOR "Apache" CACHE STRING "Product vendor")
 set(PRODUCT_VENDOR_NAME "The Apache Software Foundation" CACHE STRING "Product vendor full legal name")
@@ -88,11 +96,6 @@
 # $ cmake -G Xcode -DCMAKE_INSTALL_PREFIX=/my/favorite/location ..
 set(CMAKE_INSTALL_PREFIX "nativeclient" CACHE STRING "Install prefix")
 
-set(CMAKE_CONFIGURATION_TYPES Debug Release)
-if (NOT CMAKE_BUILD_TYPE)
-  set(CMAKE_BUILD_TYPE Debug)
-endif()
-
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
 # TODO this doesn't seem to have effect
@@ -170,6 +173,13 @@
 add_library(_WarningsAsError INTERFACE)
 add_library(_CppCodeCoverage INTERFACE)
 
+include(CheckIPOSupported)
+check_ipo_supported(RESULT ipo_supported)
+if(ipo_supported)
+  set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
+  set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+endif()
+
 if(CMAKE_CXX_COMPILER_ID MATCHES "SunPro")
   # Force linker to error on undefined symbols in shared libraries
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -z defs")
@@ -272,11 +282,6 @@
   # Enables multiprocess compiles
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
 
-  # Enables whole program optimizaion and link time code generation for release.
-  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL")
-  set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG:incremental")
-  set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG:incremental")
-
   # Enables strong name signing
   set(STRONG_NAME_KEY "" CACHE FILEPATH "Strong Name Key File")
   if(EXISTS "${STRONG_NAME_KEY}")
@@ -294,14 +299,6 @@
   message(FATAL_ERROR "Utility ar not found.")
 endif()
 
-if (WIN32 OR ${CMAKE_GENERATOR} STREQUAL "Xcode")
-  set(CMAKE_USES_BUILDTYPE TRUE)
-  set ( _DEBUG_OR_RELEASE $<$<CONFIG:Debug>:Debug>$<$<NOT:$<CONFIG:Debug>>:Release>)
-else()
-  set(CMAKE_USES_BUILDTYPE FALSE)
-  set ( _DEBUG_OR_RELEASE .)
-endif()
-
 # Default to only showing output on failure for unit tests but allow
 # overriding with the CTEST_UNITTEST_VERBOSITY environment variable.
 set(CTEST_UNITTEST_VERBOSITY --output-on-failure)
@@ -363,3 +360,14 @@
   PATTERN "templates/security/CMakeLists.txt" EXCLUDE
   PATTERN "templates/security/CMakeLists.txt.forInstall" EXCLUDE)
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/templates/security/CMakeLists.txt.forInstall RENAME CMakeLists.txt DESTINATION templates/security)
+
+if (USE_RAT)
+  add_custom_target( rat-check
+    COMMAND ${CMAKE_COMMAND}
+        -DJava_JAVA_EXECUTABLE=${Java_JAVA_EXECUTABLE}
+        -DRat_JAR=${Rat_JAR}
+        -P cmake/RatCheck.cmake
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+    COMMENT "Checking source with Apache Rat."
+  )
+endif()
diff --git a/LICENSE b/LICENSE
index 4d8ae26..d02768b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -209,3 +209,29 @@
 components are subject to the terms and conditions of the following
 licenses.
 
+---------------------------------------------------------------------------
+The MIT License (http://opensource.org/licenses/mit-license.html)
+---------------------------------------------------------------------------
+
+Apache Geode bundles the following files under the MIT license:
+
+  - cotire (https://github.com/sakra/cotire), Copyright (c) 2012-
+    2018 Sascha Kratky
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/NOTICE b/NOTICE
index 68b6289..d8e80ac 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache Geode Native Client
-Copyright 2017 The Apache Software Foundation.
+Copyright 2017-2018 The Apache Software Foundation.
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/bin/vcvarsall.bat b/bin/vcvarsall.bat
index 71221cb..df53c10 100644
--- a/bin/vcvarsall.bat
+++ b/bin/vcvarsall.bat
@@ -15,8 +15,6 @@
 rem See the License for the specific language governing permissions and
 rem limitations under the License.
 
-set vs=Microsoft Visual Studio 14.0
-
-call "c:\Program Files (x86)\%vs%\VC\vcvarsall.bat" %1
-
+call "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %1
+C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
 echo Environment setup for %vs% %1.
diff --git a/clicache/integration-test/CMakeLists.txt b/clicache/integration-test/CMakeLists.txt
index c849d06..1e16d35 100644
--- a/clicache/integration-test/CMakeLists.txt
+++ b/clicache/integration-test/CMakeLists.txt
@@ -56,7 +56,7 @@
     )
 endmacro()
 
-foreach( lib ssl sqlite )
+foreach( lib OpenSSL::SSL SQLite::sqlite3 )
   get_target_property(runtime_path ${lib} INTERFACE_RUNTIME_DIR)
   set(PATH ${PATH} ${runtime_path})
 endforeach()
@@ -94,6 +94,7 @@
 
 # Label any flaky tests here
 set_property(TEST ThinClientCqStatusTestTwoServers PROPERTY LABELS FLAKY)
+set_property(TEST ThinClientPoolTestsN PROPERTY LABELS FLAKY)
 set_property(TEST ThinClientQueryTestsN PROPERTY LABELS FLAKY)
 
 # Label any tests that always fail here
diff --git a/clicache/integration-test/DataOutputTests.cs b/clicache/integration-test/DataOutputTests.cs
index 5c253ee..093c779 100755
--- a/clicache/integration-test/DataOutputTests.cs
+++ b/clicache/integration-test/DataOutputTests.cs
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-using System;
+using System;
 using System.Collections.Generic;
 using System.Reflection;
 
diff --git a/clicache/integration-test/Settings.xml b/clicache/integration-test/Settings.xml
index 50cb7f5..e683565 100644
--- a/clicache/integration-test/Settings.xml
+++ b/clicache/integration-test/Settings.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/clicache/integration-test/ThinClientAppDomainQueryTests.cs b/clicache/integration-test/ThinClientAppDomainQueryTests.cs
index ed58d28..714968a 100644
--- a/clicache/integration-test/ThinClientAppDomainQueryTests.cs
+++ b/clicache/integration-test/ThinClientAppDomainQueryTests.cs
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-using System;
+using System;
 
 namespace Apache.Geode.Client.UnitTests
 {
diff --git a/clicache/integration-test/ThinClientSecurityAuthSetAuthInitializeTests.cs b/clicache/integration-test/ThinClientSecurityAuthSetAuthInitializeTests.cs
index ebabd89..c184383 100644
--- a/clicache/integration-test/ThinClientSecurityAuthSetAuthInitializeTests.cs
+++ b/clicache/integration-test/ThinClientSecurityAuthSetAuthInitializeTests.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
diff --git a/clicache/integration-test/Timeouts.xml b/clicache/integration-test/Timeouts.xml
index 458a175..20b432a 100644
--- a/clicache/integration-test/Timeouts.xml
+++ b/clicache/integration-test/Timeouts.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/clicache/integration-test/UnitTests.csproj.in b/clicache/integration-test/UnitTests.csproj.in
index 8fc93ff..47ead0b 100644
--- a/clicache/integration-test/UnitTests.csproj.in
+++ b/clicache/integration-test/UnitTests.csproj.in
@@ -615,7 +615,7 @@
     <Content Include="authz-ldap.xml" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="$(CMAKE_BINARY_DIR)\plugins\SQLiteCLI\SQLiteCLI.csproj">
+    <ProjectReference Include="$(CMAKE_BINARY_DIR)\plugins\SQLiteCLI\Apache.Geode.Plugins.SQLite.csproj">
       <Project>{FF9597E3-A4DD-4FDE-871D-B0C66088762F}</Project>
       <Name>SQLiteCLI</Name>
     </ProjectReference>
diff --git a/clicache/integration-test/client_server_persistent_transactions.xml b/clicache/integration-test/client_server_persistent_transactions.xml
index a287c04..0a406f3 100644
--- a/clicache/integration-test/client_server_persistent_transactions.xml
+++ b/clicache/integration-test/client_server_persistent_transactions.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0"?>
 
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/clicache/integration-test/client_server_transactions.xml b/clicache/integration-test/client_server_transactions.xml
index b104b83..b562c48 100644
--- a/clicache/integration-test/client_server_transactions.xml
+++ b/clicache/integration-test/client_server_transactions.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0"?>
 
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/clicache/integration-test2/CMakeLists.txt b/clicache/integration-test2/CMakeLists.txt
index f555ef1..b8a3e78 100644
--- a/clicache/integration-test2/CMakeLists.txt
+++ b/clicache/integration-test2/CMakeLists.txt
@@ -20,42 +20,51 @@
 
 get_target_property(JAVAOBJECT_JAR_PATH javaobject JAR_FILE)
 
-set(CRYPTO_IMPL_PATH "/../../../cryptoimpl/${CMAKE_BUILD_TYPE}")
-set(OPENSSL_PATH "/../../../dependencies/openssl/openssl-extern-prefix/${CMAKE_BUILD_TYPE}/bin")
-
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/packages.config ${CMAKE_CURRENT_BINARY_DIR}/packages.config COPYONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cs.in ${CMAKE_CURRENT_BINARY_DIR}/Config.cs)
 
 add_library( ${PROJECT_NAME} SHARED
-    Cluster.cs
-    ClusterTest.cs
-    Config.cs.in
-    ${CMAKE_CURRENT_BINARY_DIR}/Config.cs
-    GfshTest.cs
-    GfshExecuteTest.cs
-    Gfsh.cs
-    GfshExecute.cs
-    CacheXml.cs
-    CacheXmlTests.cs
-    CqOperationTest.cs
-    RegionTest.cs
-    RegionSSLTest.cs
-    Position.cs
-    TestBase.cs
-    cache.xml
-    geode.properties
-    xunit.runner.json
-    packages.config
-    SerializationTests.cs
-    ClientSslKeys/client_keystore.password.pem
-    ClientSslKeys/client_truststore.pem
-    ServerSslKeys/server_keystore.jks
-    ServerSslKeys/server_truststore.jks
+  Framework.cs
+  Cluster.cs
+  ClusterTest.cs
+  Config.cs.in
+  ${CMAKE_CURRENT_BINARY_DIR}/Config.cs
+  GfshTest.cs
+  GfshExecuteTest.cs
+  Gfsh.cs
+  GfshExecute.cs
+  CacheXml.cs
+  CacheXmlTests.cs
+  CqOperationTest.cs
+  FunctionExecutionTest.cs
+  QueryTest.cs
+  RegionTest.cs
+  RegionSSLTest.cs
+  Position.cs
+  TestBase.cs
+  cache.xml
+  geode.properties
+  xunit.runner.json
+  packages.config
+  SerializationTests.cs
+  ClientSslKeys/client_keystore.password.pem
+  ClientSslKeys/client_truststore.pem
+  ServerSslKeys/server_keystore.jks
+  ServerSslKeys/server_truststore.jks
 )
 
-set_source_files_properties(cache.xml server.xml xunit.runner.json geode.properties ClientSslKeys/client_keystore.password.pem ClientSslKeys/client_truststore.pem ServerSslKeys/server_keystore.jks ServerSslKeys/server_truststore.jks PROPERTIES
-  VS_COPY_TO_OUT_DIR Always
-  VS_TOOL_OVERRIDE "None"
+set_source_files_properties(
+  cache.xml
+  server.xml
+  xunit.runner.json
+  geode.properties
+  ClientSslKeys/client_keystore.password.pem
+  ClientSslKeys/client_truststore.pem
+  ServerSslKeys/server_keystore.jks
+  ServerSslKeys/server_truststore.jks
+  PROPERTIES
+    VS_COPY_TO_OUT_DIR Always
+    VS_TOOL_OVERRIDE None
 )
 
 target_link_libraries(${PROJECT_NAME}
@@ -89,3 +98,13 @@
 endif()
 
 add_dependencies(${PROJECT_NAME} nuget-restore)
+
+add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy_directory
+    $<SHELL_PATH:$<TARGET_GENEX_EVAL:OpenSSL::SSL,$<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_RUNTIME_DIR>>>
+    $<SHELL_PATH:$<TARGET_FILE_DIR:${PROJECT_NAME}>>
+  COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    $<SHELL_PATH:$<TARGET_FILE:cryptoImpl>>
+    $<$<CONFIG:Debug>:$<SHELL_PATH:$<TARGET_PDB_FILE:cryptoImpl>>>
+    $<SHELL_PATH:$<TARGET_FILE_DIR:${PROJECT_NAME}>>
+)
diff --git a/clicache/integration-test2/CacheXmlTests.cs b/clicache/integration-test2/CacheXmlTests.cs
index 4315d69..b9fa2b4 100644
--- a/clicache/integration-test2/CacheXmlTests.cs
+++ b/clicache/integration-test2/CacheXmlTests.cs
@@ -18,6 +18,7 @@
 using System.IO;
 using System.Threading;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
@@ -25,80 +26,50 @@
     [Trait("Category", "Integration")]
     public class CacheXmlTests : TestBase
     {
+        public CacheXmlTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
         [Fact]
         public void ConstructAndGenerate()
         {
-            using (var gfsh = new GfshExecute())
+            string testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            var template = new FileInfo("cache.xml");
+            var cacheXml = new CacheXml(template, 1234);
+            Assert.NotNull(cacheXml.File);
+            Assert.True(cacheXml.File.Exists);
+
+            using (var input = cacheXml.File.OpenText())
             {
-                try
-                {
-                    string testDir = CreateTestCaseDirectoryName();
-                    CleanTestCaseDirectory(testDir);
-
-                    Assert.Equal(gfsh.start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .execute(), 0);
-                    var template = new FileInfo("cache.xml");
-                    var cacheXml = new CacheXml(template, gfsh.LocatorPort);
-                    Assert.NotNull(cacheXml.File);
-                    Assert.True(cacheXml.File.Exists);
-
-                    using (var input = cacheXml.File.OpenText())
-                    {
-                        var content = input.ReadToEnd();
-                        Assert.True(content.Contains(gfsh.LocatorPort.ToString()));
-                    }
-                }
-                finally
-                {
-                    Assert.Equal(gfsh.shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
+                var content = input.ReadToEnd();
+                Assert.True(content.Contains(1234.ToString()));
             }
         }
 
         [Fact]
         public void DisposeAndCleanup()
         {
-            using (var gfsh = new GfshExecute())
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            FileInfo file;
+
+            var template = new FileInfo("cache.xml");
+            using (var cacheXml = new CacheXml(template, 1234))
             {
-                try
-                {
-                    var testDir = CreateTestCaseDirectoryName();
-                    CleanTestCaseDirectory(testDir);
-
-                    Assert.Equal(gfsh.start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .execute(), 0);
-                    FileInfo file;
-
-                    var template = new FileInfo("cache.xml");
-                    using (var cacheXml = new CacheXml(template, gfsh.LocatorPort))
-                    {
-                        Assert.NotNull(cacheXml.File);
-                        file = cacheXml.File;
-                        Assert.True(file.Exists);
-                    }
-
-                    file.Refresh();
-
-                    // File deletion via File.Delete (inside the file.Refresh() call)
-                    // is not synchronous so we need to potentially wait until the file 
-                    // has been deleted here
-                    Assert.True(SpinWait.SpinUntil(() => !file.Exists, 10000));
-                }
-                finally
-                {
-                    Assert.Equal(gfsh.shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
+                Assert.NotNull(cacheXml.File);
+                file = cacheXml.File;
+                Assert.True(file.Exists);
             }
+
+            file.Refresh();
+
+            // File deletion via File.Delete (inside the file.Refresh() call)
+            // is not synchronous so we need to potentially wait until the file 
+            // has been deleted here
+            Assert.True(SpinWait.SpinUntil(() => !file.Exists, 10000));
         }
     }
 }
diff --git a/clicache/integration-test2/Cluster.cs b/clicache/integration-test2/Cluster.cs
index 5b5a442..4d59740 100644
--- a/clicache/integration-test2/Cluster.cs
+++ b/clicache/integration-test2/Cluster.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -22,6 +22,7 @@
 using System.IO;
 using System.Net.Sockets;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
@@ -33,37 +34,30 @@
         private List<Locator> locators_;
         private List<Server> servers_;
         private string name_;
-        private bool usessl_;
+        internal int jmxManagerPort = Framework.FreeTcpPort();
+        internal string keyStore_ = Environment.CurrentDirectory + "/ServerSslKeys/server_keystore.jks";
+        internal string keyStorePassword_ = "gemstone";
+        internal string trustStore_ = Environment.CurrentDirectory + "/ServerSslKeys/server_truststore.jks";
+        internal string trustStorePassword_ = "gemstone";
 
         public Gfsh Gfsh { get; private set; }
 
-        private const string sslPassword_ = "gemstone";
+        public bool UseSSL { get; set; }
 
-        public bool UseSSL
+        internal PoolFactory ApplyLocators(PoolFactory poolFactory)
         {
-            get
+            foreach (var locator in locators_)
             {
-                return usessl_;
+                poolFactory.AddLocator(locator.Address.address, locator.Address.port);
             }
-            set
-            {
-                usessl_ = value;
-                Gfsh.UseSSL = value;
-                if (value)
-                {
-                    var currentDir = Environment.CurrentDirectory;
-                    Gfsh.Keystore = currentDir + "/ServerSslKeys/server_keystore.jks";
-                    Gfsh.KeystorePassword = sslPassword_;
-                    Gfsh.Truststore = currentDir + "/ServerSslKeys/server_truststore.jks";
-                    Gfsh.TruststorePassword = sslPassword_;
-                }
-            }
+
+            return poolFactory;
         }
 
-        public Cluster(string name, int locatorCount, int serverCount)
+        public Cluster(ITestOutputHelper output, string name, int locatorCount, int serverCount)
         {
             started_ = false;
-            Gfsh = new GfshExecute();
+            Gfsh = new GfshExecute(output);
             UseSSL = false;
             name_ = name;
             locatorCount_ = locatorCount;
@@ -134,6 +128,32 @@
                     .execute();
             }
         }
+
+        public Cache CreateCache(IDictionary<string, string> properties)
+        {
+            var cacheFactory = new CacheFactory();
+
+            cacheFactory
+                .Set("log-level", "none")
+                .Set("statistic-sampling-enabled", "false");
+
+            foreach (var pair in properties)
+            {
+                cacheFactory.Set(pair.Key, pair.Value);
+            }
+
+            var cache = cacheFactory.Create();
+
+            ApplyLocators(cache.GetPoolFactory()).Create("default");
+
+            return cache;
+        }
+
+        public Cache CreateCache()
+        {
+            return CreateCache(new Dictionary<string, string>());
+        }
+
     }
 
     public struct Address
@@ -156,7 +176,7 @@
             name_ = name;
             var address = new Address();
             address.address = "localhost";
-            address.port = cluster.Gfsh.LocatorPort;
+            address.port = Framework.FreeTcpPort();
             Address = address;
         }
 
@@ -175,15 +195,35 @@
                     .withBindAddress(Address.address)
                     .withPort(Address.port)
                     .withMaxHeap("256m")
-                    .withJmxManagerPort(cluster_.Gfsh.JmxManagerPort)
+                    .withJmxManagerPort(cluster_.jmxManagerPort)
+                    .withJmxManagerStart(true)
                     .withHttpServicePort(0);
                 if (cluster_.UseSSL)
                 {
-                    locator.withUseSsl()
-                        .withConnect(false);
+                   locator
+                        .withConnect(false)
+                        .withSslEnableComponents("locator,jmx")
+                        .withSslKeyStore(cluster_.keyStore_)
+                        .withSslKeyStorePassword(cluster_.keyStorePassword_)
+                        .withSslTrustStore(cluster_.trustStore_)
+                        .withSslTrustStorePassword(cluster_.trustStorePassword_);
                 }
                 result = locator.execute();
+
+                if (cluster_.UseSSL)
+                {
+                    cluster_.Gfsh.connect()
+                        .withJmxManager(Address.address, cluster_.jmxManagerPort)
+                        .withUseSsl(true)
+                        .withKeyStore(cluster_.keyStore_)
+                        .withKeyStorePassword(cluster_.keyStorePassword_)
+                        .withTrustStore(cluster_.trustStore_)
+                        .withTrustStorePassword(cluster_.trustStorePassword_)
+                        .execute();
+                }
+
                 started_ = true;
+
             }
             return result;
         }
@@ -235,7 +275,13 @@
                     .withMaxHeap("1g");
                 if (cluster_.UseSSL)
                 {
-                    server.withUseSsl();
+                    server
+                        .withSslEnableComponents("server,locator,jmx")
+                        .withSslKeyStore(cluster_.keyStore_)
+                        .withSslKeyStorePassword(cluster_.keyStorePassword_)
+                        .withSslTrustStore(cluster_.trustStore_)
+                        .withSslTrustStorePassword(cluster_.trustStorePassword_);
+
                 }
                 result = server.execute();
                 started_ = true;
diff --git a/clicache/integration-test2/ClusterTest.cs b/clicache/integration-test2/ClusterTest.cs
index 1b91ebf..358966d 100644
--- a/clicache/integration-test2/ClusterTest.cs
+++ b/clicache/integration-test2/ClusterTest.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -19,12 +19,17 @@
 using System.Diagnostics;
 using System.Reflection;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     [Trait("Category", "Integration")]
     public class ClusterTest : TestBase, IDisposable
     {
+        public ClusterTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
         public void Dispose()
         {
 
@@ -33,7 +38,7 @@
         [Fact]
         public void ClusterStartTest()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 Assert.True(cluster.Start());
             }
@@ -42,7 +47,7 @@
         [Fact]
         public void ClusterStartWithTwoServersTest()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 2))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 2))
             {
                 Assert.True(cluster.Start());
             }
@@ -51,7 +56,7 @@
         [Fact]
         public void ClusterStartWithSslTest()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 cluster.UseSSL = true;
 
diff --git a/clicache/integration-test2/Command.cs b/clicache/integration-test2/Command.cs
index a6250a9..0cb960c 100644
--- a/clicache/integration-test2/Command.cs
+++ b/clicache/integration-test2/Command.cs
@@ -1,4 +1,21 @@
-using System;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
 using System.Diagnostics;
 using System.Net;
 using System.IO;
diff --git a/clicache/integration-test2/Config.cs.in b/clicache/integration-test2/Config.cs.in
index 5c50e97..abfb0dd 100644
--- a/clicache/integration-test2/Config.cs.in
+++ b/clicache/integration-test2/Config.cs.in
@@ -28,14 +28,4 @@
   {
     get { return @"@JAVAOBJECT_JAR_PATH@"; }
   }
-
-  public static string CryptoImplPath
-  {
-    get { return @"@CRYPTO_IMPL_PATH@"; }
-  }
-
-  public static string OpenSSLPath
-  {
-    get { return @"@OPENSSL_PATH@"; }
-  }
 }
diff --git a/clicache/integration-test2/CqOperationTest.cs b/clicache/integration-test2/CqOperationTest.cs
index 2824df9..10a44df 100644
--- a/clicache/integration-test2/CqOperationTest.cs
+++ b/clicache/integration-test2/CqOperationTest.cs
@@ -20,6 +20,7 @@
 using Xunit;
 using System.Diagnostics;
 using System.Threading;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
@@ -175,42 +176,35 @@
     }
 
     [Trait("Category", "Integration")]
-    public class CqOperationTest : TestBase, IDisposable
+    public class CqOperationTest : TestBase
     {
-        private readonly Cache cache_;
         private static int waitInterval_ = 1000;
 
-        public CqOperationTest()
+        public CqOperationTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
         {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "error");
-            cache_ = cacheFactory.Create();
         }
-  
-        public void Dispose()
-        {
-            cache_.Close();
-        }
-  
+
         [Fact]
         public void PdxSerializableNotificationsHaveCorrectValues()
         {
-            using (var cluster_ = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
-                Assert.Equal(cluster_.Start(), true);
-                Assert.Equal(cluster_.Gfsh.create()
+                Assert.True(cluster.Start());
+                Assert.Equal(0, cluster.Gfsh.create()
                     .region()
                     .withName("cqTestRegion")
                     .withType("REPLICATE")
-                    .execute(), 0);
-                cache_.TypeRegistry.RegisterPdxType(MyOrder.CreateDeserializable);
-                var poolFactory = cache_.GetPoolFactory()
-                    .AddLocator("localhost", cluster_.Gfsh.LocatorPort);
-                var pool = poolFactory
+                    .execute());
+
+                var cache = cluster.CreateCache();
+
+                cache.TypeRegistry.RegisterPdxType(MyOrder.CreateDeserializable);
+
+                var pool = cluster.ApplyLocators(cache.GetPoolFactory())
                     .SetSubscriptionEnabled(true)
                     .Create("pool");
 
-                var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
+                var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
                     .SetPoolName("pool");
           
                 var region = regionFactory.Create<string, MyOrder>("cqTestRegion");
@@ -257,38 +251,39 @@
                 Assert.True(cqListener.RegionClearEvent.WaitOne(waitInterval_), "Didn't receive expected CLEAR event");
           
                 Assert.False(cqListener.ReceivedUnknownEventType, "An unknown event was received by CQ listener");
+
+                cache.Close();
             }
         }
   
         [Fact]
         public void DataSerializableNotificationsHaveCorrectValues()
         {
-            using (var cluster_ = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
-                Assert.Equal(cluster_.Start(), true);
-                Assert.Equal(cluster_.Gfsh.deploy()
+                Assert.True(cluster.Start());
+                Assert.Equal(0, cluster.Gfsh.deploy()
                     .withJar(Config.JavaobjectJarPath)
-                    .execute(), 0);
-                Assert.Equal(cluster_.Gfsh.create()
+                    .execute());
+                Assert.Equal(0, cluster.Gfsh.create()
                     .region()
                     .withName("cqTestRegion")
                     .withType("REPLICATE")
-                    .execute(), 0);
-
-                cluster_.Gfsh.executeFunction()
+                    .execute());
+                Assert.Equal(0, cluster.Gfsh.executeFunction()
                     .withId("InstantiateDataSerializable")
-                    .withMember("DataSerializableNotificationsH_server_0")
-                    .execute();
+                    .withMember("DataSerializableNotificationsHaveCorrectValues_server_0")
+                    .execute());
 
-                cache_.TypeRegistry.RegisterType(Position.CreateDeserializable, 22);
+                var cache = cluster.CreateCache();
 
-                var poolFactory = cache_.GetPoolFactory()
-                    .AddLocator("localhost", cluster_.Gfsh.LocatorPort);
-                var pool = poolFactory
+                cache.TypeRegistry.RegisterType(Position.CreateDeserializable, 22);
+
+                var pool = cluster.ApplyLocators(cache.GetPoolFactory())
                     .SetSubscriptionEnabled(true)
                     .Create("pool");
 
-                var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
+                var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
                     .SetPoolName("pool");
 
                 var region = regionFactory.Create<string, Position>("cqTestRegion");
@@ -336,6 +331,8 @@
                 Assert.True(cqListener.RegionClearEvent.WaitOne(waitInterval_), "Didn't receive expected CLEAR event");
 
                 Assert.False(cqListener.ReceivedUnknownEventType, "An unknown event was received by CQ listener");
+
+                cache.Close();
             }
         }
     }
diff --git a/contrib/pdxautoserializer/src/ASCPPInclude.hpp b/clicache/integration-test2/Framework.cs
similarity index 63%
rename from contrib/pdxautoserializer/src/ASCPPInclude.hpp
rename to clicache/integration-test2/Framework.cs
index 3127313..027fd32 100644
--- a/contrib/pdxautoserializer/src/ASCPPInclude.hpp
+++ b/clicache/integration-test2/Framework.cs
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
-#define GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,19 +15,21 @@
  * limitations under the License.
  */
 
-#define GFINCLUDE
-#define GFEXCLUDE
-#define GFARRAYSIZE(x)
+ using System.Net;
+using System.IO;
+using System.Net.Sockets;
 
-// Helper defines to ignore some GNU g++ constructs
-/*
- #define __const const
- #define __volatile__ volatile
- #define __asm__ asm
- #define __restrict
- #define __attribute__(x)
- #define __extension__
- #define __builtin_va_list int
- */
-
-#endif  // GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
+namespace Apache.Geode.Client.IntegrationTests
+{
+    public abstract class Framework
+    {
+        public static int FreeTcpPort()
+        {
+            var tcpListner = new TcpListener(IPAddress.Loopback, 0);
+            tcpListner.Start();
+            var port = ((IPEndPoint)tcpListner.LocalEndpoint).Port;
+            tcpListner.Stop();
+            return port;
+        }
+    }
+}
\ No newline at end of file
diff --git a/clicache/integration-test2/FunctionExecutionTest.cs b/clicache/integration-test2/FunctionExecutionTest.cs
new file mode 100644
index 0000000..6688d31
--- /dev/null
+++ b/clicache/integration-test2/FunctionExecutionTest.cs
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Apache.Geode.Client.IntegrationTests
+{
+    [Trait("Category", "Integration")]
+    public class FunctionExecutionTest : TestBase
+    {
+        public FunctionExecutionTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
+        [Fact]
+        public void MultiGetFunctionExecutionWithFilter()
+        {
+            int expectedFilteredCount = 34;
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
+            {
+                Assert.True(cluster.Start());
+                Assert.Equal(0, cluster.Gfsh.deploy()
+                    .withJar(Config.JavaobjectJarPath)
+                    .execute());
+                Assert.Equal(0, cluster.Gfsh.create().region()
+                    .withName("testRegion1")
+                    .withType("PARTITION")
+                    .execute());
+
+                var cache = cluster.CreateCache();
+                var region = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                    .SetPoolName("default")
+                    .Create<object, object>("testRegion1");
+
+                for (var i = 0; i < 230; i++)
+                {
+                  region["KEY--" + i] = "VALUE--" + i;
+                }
+
+                var args = true;
+
+                var oddKeyFilter = new Object[17];
+                var j = 0;
+                for (var i = 0; i < 34; i++)
+                {
+                  if (i % 2 == 0) continue;
+                  oddKeyFilter[j] = "KEY--" + i;
+                  j++;
+                }
+
+                var exc = Client.FunctionService<List<object>>.OnRegion<object, object>(region);
+                var rc = exc.WithArgs<bool>(args).WithFilter<object>(oddKeyFilter).Execute("MultiGetFunction");
+                var executeFunctionResult = rc.GetResult();
+                var resultList = new List<object>();
+
+                foreach (var item in executeFunctionResult)
+                {
+                  foreach (object item2 in item)
+                  {
+                    resultList.Add(item2);
+                  }
+                }
+                Assert.Equal(expectedFilteredCount, resultList.Count);
+
+            }
+        }
+
+        [Fact]
+        public void MultiGetIFunctionExecutionWithArgs()
+        {
+            int expectedResultCount = 17;
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
+            {
+                Assert.True(cluster.Start());
+                Assert.Equal(0, cluster.Gfsh.deploy()
+                    .withJar(Config.JavaobjectJarPath)
+                    .execute());
+                Assert.Equal(0, cluster.Gfsh.create().region()
+                    .withName("partition_region")
+                    .withType("PARTITION")
+                    .execute());
+
+                var cache = cluster.CreateCache();
+
+                var region = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                    .SetPoolName("default")
+                    .Create<object, object>("partition_region");
+
+                for (var i = 0; i < 230; i++)
+                {
+                    region["KEY--" + i] = "VALUE--" + i;
+                }
+
+                var oddKeyArgs = new ArrayList();
+                for (var i = 0; i < 34; i++)
+                {
+                    if (i % 2 == 0) continue;
+                    oddKeyArgs.Add("KEY--" + i);
+                }
+
+                var exc = Client.FunctionService<List<object>>.OnRegion<object, object>(region);
+                var rc = exc.WithArgs<ArrayList>(oddKeyArgs).Execute("MultiGetFunctionI");
+                var executeFunctionResult = rc.GetResult();
+                var resultList = new List<object>();
+
+                foreach (var item in executeFunctionResult)
+                {
+                    foreach (var item2 in item)
+                    {
+                        resultList.Add(item2);
+                    }
+                }
+                Assert.Equal(expectedResultCount, resultList.Count);
+            }
+        }
+    }
+}
diff --git a/clicache/integration-test2/Gfsh.cs b/clicache/integration-test2/Gfsh.cs
index 7984fd6..826c1fd 100644
--- a/clicache/integration-test2/Gfsh.cs
+++ b/clicache/integration-test2/Gfsh.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -26,21 +26,8 @@
 
 namespace Apache.Geode.Client.IntegrationTests
 {
-    public abstract class Gfsh : IDisposable
+    public abstract class Gfsh 
     {
-        public string Name { get; private set; }
-        public string LocatorBindAddress { get; set; }
-        public int LocatorPort { get; private set; }
-        public int JmxManagerPort { get; private set; }
-        public int HttpServicePort { get; private set; }
-        public string ServerBindAddress { get; private set; }
-        public bool UseSSL { get; set; }
-        public string Keystore { get; set; }
-        public string KeystorePassword { get; set; }
-        public string Truststore { get; set; }
-        public string TruststorePassword { get; set; }
-
-        public abstract void Dispose();
 
         //TODO: Understand what C++ Command class is doing.  Why is it a template,
         //when the only <T> class we're passing is void?  How can you call a ctor
@@ -52,6 +39,7 @@
                 gfsh_ = gfsh;
                 command_ = command;
             }
+
             public int execute()
             {
                 return gfsh_.execute(command_);
@@ -79,6 +67,7 @@
                 {
                     gfsh_ = gfsh;
                 }
+
                 public Server withName(string name)
                 {
                     command_ += " --name=" + name;
@@ -93,7 +82,7 @@
 
                 public Server withBindAddress(string bindAddress)
                 {
-                    gfsh_.ServerBindAddress = bindAddress;
+                    command_ += " --bind-address=" + bindAddress;
                     return this;
                 }
 
@@ -121,13 +110,33 @@
                     return this;
                 }
 
-                public Server withUseSsl()
+               public Server withSslKeyStore(string keyStore)
                 {
-                    command_ += " --J=-Dgemfire.ssl-enabled-components=server,locator,jmx" +
-                        " --J=-Dgemfire.ssl-keystore=" + gfsh_.Keystore +
-                        " --J=-Dgemfire.ssl-keystore-password=" + gfsh_.KeystorePassword +
-                        " --J=-Dgemfire.ssl-truststore=" + gfsh_.Truststore +
-                        " --J=-Dgemfire.ssl-truststore-password=" + gfsh_.TruststorePassword;
+                    command_ += " --J=-Dgemfire.ssl-keystore=" + keyStore;
+                    return this;
+                }
+
+                public Server withSslKeyStorePassword(string keyStorePassword)
+                {
+                    command_ += " --J=-Dgemfire.ssl-keystore-password=" + keyStorePassword;
+                    return this;
+                }
+
+                public Server withSslTrustStore(string trustStore)
+                {
+                    command_ += " --J=-Dgemfire.ssl-truststore=" + trustStore;
+                    return this;
+                }
+
+                public Server withSslTrustStorePassword(string trustStorePassword)
+                {
+                    command_ += " --J=-Dgemfire.ssl-truststore-password=" + trustStorePassword;
+                    return this;
+                }
+
+                public Server withSslEnableComponents(string components)
+                {
+                    command_ += " --J=-Dgemfire.ssl-enabled-components=" + components;
                     return this;
                 }
             }
@@ -157,24 +166,31 @@
 
                 public Locator withBindAddress(string bindAddress)
                 {
-                    gfsh_.LocatorBindAddress = bindAddress;
+                    command_ += " --bind-address=" + bindAddress;
                     return this;
                 }
 
                 public Locator withPort(int port)
                 {
-                    gfsh_.LocatorPort = port;
-                    return this;
-                }
-                public Locator withJmxManagerPort(int jmxManagerPort)
-                {
-                    gfsh_.JmxManagerPort = jmxManagerPort;
+                    command_ += " --port=" + port;
                     return this;
                 }
 
-                public Locator withHttpServicePort(short httpServicePort)
+                public Locator withJmxManagerPort(int jmxManagerPort)
                 {
-                    command_ += " --http-service-port=" + Convert.ToString(httpServicePort);
+                    command_ += " --J=-Dgemfire.jmx-manager-port=" + jmxManagerPort;
+                    return this;
+                }
+
+                public Locator withJmxManagerStart(bool start)
+                {
+                    command_ += " --J=-Dgemfire.jmx-manager-start=" + (start ? "true" : "false");
+                    return this;
+                }
+                
+                public Locator withHttpServicePort(int httpServicePort)
+                {
+                    command_ += " --http-service-port=" + httpServicePort;
                     return this;
                 }
 
@@ -197,13 +213,33 @@
                     return this;
                 }
 
-                public Locator withUseSsl()
+                public Locator withSslKeyStore(string keyStore)
                 {
-                    command_ += " --J=-Dgemfire.ssl-enabled-components=locator,jmx" +
-                        " --J=-Dgemfire.ssl-keystore=" + gfsh_.Keystore +
-                        " --J=-Dgemfire.ssl-keystore-password=" + gfsh_.KeystorePassword +
-                        " --J=-Dgemfire.ssl-truststore=" + gfsh_.Truststore +
-                        " --J=-Dgemfire.ssl-truststore-password=" + gfsh_.TruststorePassword;
+                    command_ += " --J=-Dgemfire.ssl-keystore=" + keyStore;
+                    return this;
+                }
+
+                public Locator withSslKeyStorePassword(string keyStorePassword)
+                {
+                    command_ += " --J=-Dgemfire.ssl-keystore-password=" + keyStorePassword;
+                    return this;
+                }
+
+                public Locator withSslTrustStore(string trustStore)
+                {
+                    command_ += " --J=-Dgemfire.ssl-truststore=" + trustStore;
+                    return this;
+                }
+
+                public Locator withSslTrustStorePassword(string trustStorePassword)
+                {
+                    command_ += " --J=-Dgemfire.ssl-truststore-password=" + trustStorePassword;
+                    return this;
+                }
+
+                public Locator withSslEnableComponents(string components)
+                {
+                    command_ += " --J=-Dgemfire.ssl-enabled-components=" + components;
                     return this;
                 }
             }
@@ -227,6 +263,7 @@
             {
                 gfsh_ = gfsh;
             }
+
             public class Locator : Command
             {
                 public Locator(Gfsh gfsh) : base(gfsh, "stop locator")
@@ -250,6 +287,7 @@
             {
                 return new Locator(gfsh_);
             }
+
             public class Server : Command
             {
                 public Server(Gfsh gfsh) : base(gfsh, "stop server")
@@ -344,12 +382,33 @@
                 return this;
             }
 
-            public Connect withUseSsl()
+            public Connect withUseSsl(bool enable)
             {
-                command_ += " --use-ssl --key-store=" + gfsh_.Keystore +
-                    " --key-store-password=" + gfsh_.KeystorePassword +
-                    " --trust-store=" + gfsh_.Truststore +
-                    " --trust-store-password=" + gfsh_.TruststorePassword;
+                command_ += " --use-ssl=" + (enable ? "true" : "false");
+                return this;
+            }
+
+            public Connect withKeyStore(string keyStore)
+            {
+                command_ += " --key-store=" + keyStore;
+                return this;
+            }
+
+            public Connect withKeyStorePassword(string keyStorePassword)
+            {
+                command_ += " --key-store-password=" + keyStorePassword;
+                return this;
+            }
+
+            public Connect withTrustStore(string trustStore)
+            {
+                command_ += " --trust-store=" + trustStore;
+                return this;
+            }
+
+            public Connect withTrustStorePassword(string trustStorePassword)
+            {
+                command_ += " --trust-store-password=" + trustStorePassword;
                 return this;
             }
         }
@@ -426,17 +485,6 @@
             return new ExecuteFunction(this);
         }
 
-        private static string defaultBindAddress = "localhost";
-        private static int defaultHttpServicePort = 0;
-        public Gfsh()
-        {
-            LocatorBindAddress = defaultBindAddress;
-            HttpServicePort = defaultHttpServicePort;
-            ServerBindAddress = defaultBindAddress;
-            LocatorPort = FreeTcpPort();
-            JmxManagerPort = FreeTcpPort();
-        }
-
         private static int FreeTcpPort()
         {
             var tcpListner = new TcpListener(IPAddress.Loopback, 0);
diff --git a/clicache/integration-test2/GfshExecute.cs b/clicache/integration-test2/GfshExecute.cs
index 29098f5..54117df 100644
--- a/clicache/integration-test2/GfshExecute.cs
+++ b/clicache/integration-test2/GfshExecute.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -21,82 +21,75 @@
 using System.IO;
 using System.Net.Sockets;
 using Xunit;
+using System.Collections;
+using System.Text.RegularExpressions;
+using System.Collections.Generic;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     public class GfshExecute : Gfsh
     {
-        public GfshExecute()
+        private String connectionCommand_ = null;
+        private ITestOutputHelper output;
+
+        public GfshExecute(ITestOutputHelper output)
         {
-        }
-        public override void Dispose()
-        {
+            this.output = output;
         }
 
-        private static string startLocator = "start locator";
-        private static string startServer = "start server";
-
-        private string buildStartLocatorCommand(string options)
+        private void ExtractConnectionCommand(String command)
         {
-            var locatorCmd = startLocator;
-            locatorCmd += " --port=" + LocatorPort;
-            locatorCmd += " --bind-address=" + LocatorBindAddress;
-            locatorCmd += " --J=-Dgemfire.jmx-manager-port=" + JmxManagerPort + " ";
-            locatorCmd += " --J=-Dgemfire.jmx-manager-start=true";
-            locatorCmd += options;
-            return locatorCmd;
-        }
-
-        private string buildStartServerCommand(string options)
-        {
-            var connectObject = connect()
-                .withJmxManager(LocatorBindAddress, JmxManagerPort);
-            if (UseSSL)
+            if (command.StartsWith("connect"))
             {
-                connectObject
-                    .withUseSsl();
+                connectionCommand_ = command;
             }
-            var serverCmd = "-e \"" + connectObject.ToString() + "\" -e \"" + startServer;
-            serverCmd += " --bind-address=" + ServerBindAddress;
-            serverCmd += options + "\"";
-            return serverCmd;
-        }
+            else if (command.StartsWith("start locator"))
+            {
+                if (command.Contains("--connect=false"))
+                {
+                    return;
+                }
 
-        private string buildConnectAndExecuteString(string options)
-        {
-            var connectObject = connect()
-                .withJmxManager(LocatorBindAddress, JmxManagerPort);
-            if (UseSSL)
-            {
-                connectObject
-                    .withUseSsl();
-            }
-            return "-e \"" + connectObject.ToString() + "\" -e \"" + options + "\"";
-        }
+                var jmxManagerHost = "localhost";
+                var jmxManagerPort = "1099";
 
-        private string BuildFullCommandString(string baseCmd)
-        {
-            string fullCmd;
+                var jmxManagerHostRegex = new Regex(@"\bbind-address=([^\s])\b");
+                var jmxManagerHostMatch = jmxManagerHostRegex.Match(command);
 
-            if (baseCmd.IndexOf(startLocator) == 0)
-            {
-                fullCmd = buildStartLocatorCommand(baseCmd.Substring(startLocator.Length));
-            }
-            else if (baseCmd.IndexOf(startServer) == 0)
-            {
-                fullCmd = buildStartServerCommand(baseCmd.Substring(startServer.Length));
-            }
-            else
-            {
-                fullCmd = buildConnectAndExecuteString(baseCmd);
+                if (jmxManagerHostMatch.Success)
+                {
+                    jmxManagerHost = jmxManagerHostMatch.Groups[1].Value;
+                }
+
+                var jmxManagerPortRegex = new Regex(@"\bjmx-manager-port=(\d+)\b");
+                var jmxManagerPortMatch = jmxManagerPortRegex.Match(command);
+                if (jmxManagerPortMatch.Success)
+                {
+                    jmxManagerPort = jmxManagerPortMatch.Groups[1].Value;
+                }
+
+                connectionCommand_ = new Connect(this).withJmxManager(jmxManagerHost, int.Parse(jmxManagerPort)).ToString();
             }
 
-            return fullCmd;
         }
 
         public override int execute(string cmd)
         {
-            var fullCmd = BuildFullCommandString(cmd);
+
+            var commands = new List<string>();
+
+            if (null != connectionCommand_)
+            {
+                commands.Add("-e");
+                commands.Add(connectionCommand_);
+            }
+
+            commands.Add("-e");
+            commands.Add(cmd);
+
+            // TODO escape commands
+            var fullCmd = "\"" + string.Join("\" \"", commands) + "\"";
 
             var gfsh = new Process
             {
@@ -116,7 +109,7 @@
             {
                 if (args.Data != null)
                 {
-                    Debug.WriteLine("GfshExecute: " + args.Data);
+                    WriteLine("GfshExecute: " + args.Data);
                 }
             };
 
@@ -124,7 +117,7 @@
             {
                 if (args.Data != null)
                 {
-                    Debug.WriteLine("GfshExecute: ERROR: " + args.Data);
+                    WriteLine("GfshExecute: ERROR: " + args.Data);
                 }
             };
 
@@ -133,24 +126,81 @@
             gfsh.BeginErrorReadLine();
             if (gfsh.WaitForExit(60000))
             {
-                Debug.WriteLine("GeodeServer Start: gfsh.HasExited = {0}, gfsh.ExitCode = {1}",
+                WriteLine("GeodeServer Start: gfsh.HasExited = {0}, gfsh.ExitCode = {1}",
                     gfsh.HasExited,
                     gfsh.ExitCode);
             }
             else
             {
-                Debug.WriteLine("GeodeServer Start: gfsh failed to exit, force killing.");
-                try
-                {
-                    gfsh.Kill();
-                }
-                catch
-                {
-                    // ignored
-                }
+                WriteLine("GeodeServer Start: gfsh failed to exit, force killing.");
+                KillAndIgnore(gfsh);
             }
+            CancelErrorReadAndIgnore(gfsh);
+            CancelOutputReadAndIgnore(gfsh);
+
+            ExtractConnectionCommand(cmd);
 
             return gfsh.ExitCode;
         }
+
+        private static void CancelOutputReadAndIgnore(Process gfsh)
+        {
+            try
+            {
+                gfsh.CancelOutputRead();
+            }
+            catch
+            {
+                // ignored
+            }
+        }
+
+        private static void CancelErrorReadAndIgnore(Process gfsh)
+        {
+            try
+            {
+                gfsh.CancelErrorRead();
+            }
+            catch
+            {
+                // ignored
+            }
+        }
+
+        private static void KillAndIgnore(Process gfsh)
+        {
+            try
+            {
+                gfsh.Kill();
+            }
+            catch
+            {
+                // ignored
+            }
+        }
+
+        private void WriteLine(string format, params object[] args)
+        {
+            if (null == output)
+            {
+                Debug.WriteLine(format, args);
+            }
+            else
+            {
+                output.WriteLine(format, args);
+            }
+        }
+
+        private void WriteLine(string message)
+        {
+            if (null == output)
+            {
+                Debug.WriteLine(message);
+            }
+            else
+            {
+                output.WriteLine(message);
+            }
+        }
     }
 }
diff --git a/clicache/integration-test2/GfshExecuteTest.cs b/clicache/integration-test2/GfshExecuteTest.cs
index 16a0f83..399b58f 100644
--- a/clicache/integration-test2/GfshExecuteTest.cs
+++ b/clicache/integration-test2/GfshExecuteTest.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -17,259 +17,270 @@
 
 using System;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     [Trait("Category", "Integration")]
     public class GfshExecuteTest : TestBase, IDisposable
     {
+        public GfshExecuteTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
         public void Dispose()
         {
 
         }
 
         [Fact]
-        public void GfshExecuteStartLocatorTest()
+        public void Start1Locator()
         {
-            using (var gfsh = new GfshExecute())
+            var gfsh = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            try
             {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                try
-                {
-                    Assert.Equal(gfsh.start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .withPort(gfsh.LocatorPort)
-                        .execute(), 0);
-                }
-                finally
-                {
-                    Assert.Equal(gfsh
-                        .shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
-            }
-        }
-
-        [Fact]
-        public void GfshExecuteStartServerTest()
-        {
-            using (var gfsh = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                try
-                {
-                    Assert.Equal(gfsh.start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .withPort(gfsh.LocatorPort)
-                        .execute(), 0);
-
-                    Assert.Equal(gfsh.start()
-                        .server()
-                        .withDir(testDir + "/server/0")
-                        .withPort(0)
-                        .execute(), 0);
-                }
-                finally
-                {
-                    Assert.Equal(gfsh
-                        .shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
-            }
-        }
-
-        [Fact]
-        public void GfshExecuteStartTwoServersTest()
-        {
-            using (var gfsh1 = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                try
-                {
-                    Assert.Equal(gfsh1.start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .execute(), 0);
-
-                    Assert.Equal(gfsh1.start()
-                        .server()
-                        .withDir(testDir + "/server/0")
-                        .withPort(0)
-                        .execute(), 0);
-
-                    Assert.Equal(gfsh1.start()
-                        .server()
-                        .withDir(testDir + "/server/1")
-                        .withPort(0)
-                        .execute(), 0);
-                }
-                finally
-                {
-                    Assert.Equal(gfsh1.shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
-            }
-        }
-
-        [Fact]
-        public void GfshExecuteStartLocatorWithUseSslTest()
-        {
-            using (var gfsh = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                var sslPassword = "gemstone";
-                var currentDir = Environment.CurrentDirectory;
-                gfsh.Keystore = currentDir + "/ServerSslKeys/server_keystore.jks";
-                gfsh.KeystorePassword = sslPassword;
-                gfsh.Truststore = currentDir + "/ServerSslKeys/server_truststore.jks";
-                gfsh.TruststorePassword = sslPassword;
-                gfsh.UseSSL = true;
-
-                try
-                {
-                    var locator = gfsh
-                        .start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .withUseSsl()
-                        .withConnect(false);
-
-                    Assert.Equal(locator.execute(), 0);
-                }
-                finally
-                {
-                    Assert.Equal(gfsh
-                        .shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
-            }
-        }
-
-        [Fact]
-        public void GfshExecuteStartLocatorAndServerWithUseSslTest()
-        {
-            using (var gfsh = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                var sslPassword = "gemstone";
-                var currentDir = Environment.CurrentDirectory;
-                gfsh.Keystore = currentDir + "/ServerSslKeys/server_keystore.jks";
-                gfsh.KeystorePassword = sslPassword;
-                gfsh.Truststore = currentDir + "/ServerSslKeys/server_truststore.jks";
-                gfsh.TruststorePassword = sslPassword;
-                gfsh.UseSSL = true;
-
-                try
-                {
-                    Assert.Equal(gfsh
-                        .start()
-                        .locator()
-                        .withDir(testDir)
-                        .withHttpServicePort(0)
-                        .withUseSsl()
-                        .withConnect(false)
-                        .execute(), 0);
-
-                    Assert.Equal(gfsh
-                        .start()
-                        .server()
-                        .withDir(testDir + "/server/0")
-                        .withPort(0)
-                        .withUseSsl()
-                        .execute(), 0);
-                }
-                finally
-                {
-                    Assert.Equal(gfsh
-                        .shutdown()
-                        .withIncludeLocators(true)
-                        .execute(), 0);
-                }
-            }
-        }
-
-        [Fact]
-        public void GfshExecuteStartLocatorAndVerifyPortTest()
-        {
-            using (var gfsh = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
-
-                Assert.Equal(gfsh.start()
+                Assert.Equal(0, gfsh.start()
                     .locator()
                     .withDir(testDir)
                     .withHttpServicePort(0)
-                    .execute(), 0);
-
-                Assert.NotEqual(0, gfsh.LocatorPort);
-
-                Assert.Equal(gfsh.shutdown()
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(Framework.FreeTcpPort())
+                    .execute());
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh
+                    .shutdown()
                     .withIncludeLocators(true)
-                    .execute(), 0);
+                    .execute());
             }
         }
 
         [Fact]
-        public void GfshExecuteStartTwoLocatorsTest()
+        public void Start1Locator1Server()
         {
-            using (var gfsh1 = new GfshExecute())
-            {
-                var testDir = CreateTestCaseDirectoryName();
-                CleanTestCaseDirectory(testDir);
+            var gfsh = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
 
+            try
+            {
+                Assert.Equal(0, gfsh.start()
+                    .locator()
+                    .withDir(testDir)
+                    .withHttpServicePort(0)
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(Framework.FreeTcpPort())
+                    .execute());
+
+                Assert.Equal(0, gfsh.start()
+                    .server()
+                    .withDir(testDir + "/server/0")
+                    .withPort(0)
+                    .execute());
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh
+                    .shutdown()
+                    .withIncludeLocators(true)
+                    .execute());
+            }
+        }
+
+        [Fact]
+        public void Start1Locator2Servers()
+        {
+            var gfsh = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            try
+            {
+                Assert.Equal(0, gfsh.start()
+                    .locator()
+                    .withDir(testDir)
+                    .withHttpServicePort(0)
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(Framework.FreeTcpPort())
+                    .execute());
+
+                Assert.Equal(0, gfsh.start()
+                    .server()
+                    .withDir(testDir + "/server/0")
+                    .withPort(0)
+                    .execute());
+
+                Assert.Equal(0, gfsh.start()
+                    .server()
+                    .withDir(testDir + "/server/1")
+                    .withPort(0)
+                    .execute());
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh.shutdown()
+                    .withIncludeLocators(true)
+                    .execute());
+            }
+        }
+
+        [Fact]
+        public void Start1LocatorWithSSL()
+        {
+            var gfsh = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            var sslPassword = "gemstone";
+            var currentDir = Environment.CurrentDirectory;
+            var keystore = currentDir + @"\ServerSslKeys\server_keystore.jks";
+            var truststore = currentDir + @"\ServerSslKeys\server_truststore.jks";
+            var jmxManagerPort = Framework.FreeTcpPort();
+
+            try
+            {
+                Assert.Equal(0, gfsh
+                    .start()
+                    .locator()
+                    .withDir(testDir)
+                    .withHttpServicePort(0)
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(jmxManagerPort)
+                    .withJmxManagerStart(true)
+                    .withSslEnableComponents("locator,jmx")
+                    .withSslKeyStore(keystore)
+                    .withSslKeyStorePassword(sslPassword)
+                    .withSslTrustStore(truststore)
+                    .withSslTrustStorePassword(sslPassword)
+                    .withConnect(false)
+                    .execute());
+
+                Assert.Equal(0, gfsh
+                    .connect()
+                    .withJmxManager("localhost", jmxManagerPort)
+                    .withUseSsl(true)
+                    .withKeyStore(keystore)
+                    .withKeyStorePassword(sslPassword)
+                    .withTrustStore(truststore)
+                    .withTrustStorePassword(sslPassword)
+                    .execute());
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh
+                    .shutdown()
+                    .withIncludeLocators(true)
+                    .execute());
+            }
+        }
+
+        [Fact]
+        public void Start1Locator1ServerWithSSL()
+        {
+            var gfsh = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            var sslPassword = "gemstone";
+            var currentDir = Environment.CurrentDirectory;
+            var keystore = currentDir + @"\ServerSslKeys\server_keystore.jks";
+            var truststore = currentDir + @"\ServerSslKeys\server_truststore.jks";
+            var jmxManagerPort = Framework.FreeTcpPort();
+
+            try
+            {
+                Assert.Equal(0, gfsh
+                    .start()
+                    .locator()
+                    .withDir(testDir)
+                    .withHttpServicePort(0)
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(jmxManagerPort)
+                    .withJmxManagerStart(true)
+                    .withSslEnableComponents("locator,jmx")
+                    .withSslKeyStore(keystore)
+                    .withSslKeyStorePassword(sslPassword)
+                    .withSslTrustStore(truststore)
+                    .withSslTrustStorePassword(sslPassword)
+                    .withConnect(false)
+                    .execute());
+
+                Assert.Equal(0, gfsh
+                    .connect()
+                    .withJmxManager("localhost", jmxManagerPort)
+                    .withUseSsl(true)
+                    .withKeyStore(keystore)
+                    .withKeyStorePassword(sslPassword)
+                    .withTrustStore(truststore)
+                    .withTrustStorePassword(sslPassword)
+                    .execute());
+
+                Assert.Equal(0, gfsh
+                    .start()
+                    .server()
+                    .withDir(testDir + "/server/0")
+                    .withPort(0)
+                    .withSslEnableComponents("server,locator,jmx")
+                    .withSslKeyStore(keystore)
+                    .withSslKeyStorePassword(sslPassword)
+                    .withSslTrustStore(truststore)
+                    .withSslTrustStorePassword(sslPassword)
+                    .execute());
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh
+                    .shutdown()
+                    .withIncludeLocators(true)
+                    .execute());
+            }
+        }
+
+        [Fact]
+        public void Start2ClustersWith1Locator1ServerEach()
+        {
+            var gfsh1 = new GfshExecute(output);
+            var testDir = CreateTestCaseDirectoryName();
+            CleanTestCaseDirectory(testDir);
+
+            try
+            {
+                Assert.Equal(0, gfsh1.start()
+                    .locator()
+                    .withDir(testDir + "/locator/0")
+                    .withHttpServicePort(0)
+                    .withPort(Framework.FreeTcpPort())
+                    .withJmxManagerPort(Framework.FreeTcpPort())
+                    .execute());
+
+                var gfsh2 = new GfshExecute(output);
                 try
                 {
-                    Assert.Equal(gfsh1.start()
+                    Assert.Equal(0, gfsh2.start()
                         .locator()
-                        .withDir(testDir + "/locator/0")
+                        .withDir(testDir + "/locator/1")
                         .withHttpServicePort(0)
-                        .execute(), 0);
-
-                    using (var gfsh2 = new GfshExecute())
-                    {
-                        try
-                        {
-                            Assert.Equal(gfsh2.start()
-                                .locator()
-                                .withDir(testDir + "/locator/1")
-                                .withHttpServicePort(0)
-                                .execute(), 0);
-                        }
-                        finally
-                        {
-                            Assert.Equal(gfsh2.shutdown()
-                                .withIncludeLocators(true)
-                                .execute(), 0);
-                        }
-                    }
+                        .withPort(Framework.FreeTcpPort())
+                        .withJmxManagerPort(Framework.FreeTcpPort())
+                        .execute());
                 }
                 finally
                 {
-                    Assert.Equal(gfsh1.shutdown()
+                    Assert.Equal(0, gfsh2.shutdown()
                         .withIncludeLocators(true)
-                        .execute(), 0);
+                        .execute());
                 }
+
+            }
+            finally
+            {
+                Assert.Equal(0, gfsh1.shutdown()
+                    .withIncludeLocators(true)
+                    .execute());
             }
         }
     }
diff --git a/clicache/integration-test2/GfshTest.cs b/clicache/integration-test2/GfshTest.cs
index 452bb3d..819bf08 100644
--- a/clicache/integration-test2/GfshTest.cs
+++ b/clicache/integration-test2/GfshTest.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -18,22 +18,22 @@
 using System;
 using System.Collections.Generic;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
 
     [Trait("Category", "Integration")]
-    public class GfshTest : IDisposable
+    public class GfshTest : TestBase
     {
-        public void Dispose()
+        public GfshTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
         {
-
         }
 
         [Fact]
         public void InstantiateGfshClassesTest()
         {
-            var gfsh = new GfshExecute();
+            var gfsh = new GfshExecute(output);
             var start = gfsh.start();
             Assert.NotNull(start);
 
@@ -53,19 +53,13 @@
         [Fact]
         public void StartLocatorStringsTest()
         {
-            var Gfsh = new GfshExecute();
-
-            var currentDir = Environment.CurrentDirectory;
-            Gfsh.Keystore = "some/path/keystore.jks";
-            Gfsh.KeystorePassword = "password";
-            Gfsh.Truststore = "some/path/truststore.jks";
-            Gfsh.TruststorePassword = "password";
+            var Gfsh = new GfshExecute(output);
 
             var locator = Gfsh
                 .start()
                 .locator();
             var s = locator.ToString();
-            Assert.True(s.Equals("start locator"));
+            Assert.Equal("start locator", s);
 
             locator = Gfsh
                 .start()
@@ -79,31 +73,31 @@
                 .withLogLevel("fine")
                 .withMaxHeap("someHugeAmount")
                 .withConnect(false)
-                .withUseSsl();
+                .withSslEnableComponents("locator,jmx")
+                .withSslKeyStore("some/path/keystore.jks")
+                .withSslKeyStorePassword("password1")
+                .withSslTrustStore("some/path/truststore.jks")
+                .withSslTrustStorePassword("password2");
             s = locator.ToString();
-            Assert.Equal(s, "start locator --name=name --dir=dir " +
-                "--http-service-port=2222 --log-level=fine --max-heap=someHugeAmount " +
+            Assert.Equal("start locator --name=name --dir=dir --bind-address=address --port=420 " +
+                "--J=-Dgemfire.jmx-manager-port=1111 --http-service-port=2222 --log-level=fine --max-heap=someHugeAmount " +
                 "--connect=false --J=-Dgemfire.ssl-enabled-components=locator,jmx " +
-                "--J=-Dgemfire.ssl-keystore=some/path/keystore.jks --J=-Dgemfire.ssl-keystore-password=password " +
-                "--J=-Dgemfire.ssl-truststore=some/path/truststore.jks --J=-Dgemfire.ssl-truststore-password=password");
+                "--J=-Dgemfire.ssl-keystore=some/path/keystore.jks --J=-Dgemfire.ssl-keystore-password=password1 " +
+                "--J=-Dgemfire.ssl-truststore=some/path/truststore.jks --J=-Dgemfire.ssl-truststore-password=password2", s);
         }
 
         [Fact]
         public void StartServerStringsTest()
         {
-            var Gfsh = new GfshExecute();
+            var Gfsh = new GfshExecute(output);
 
             var currentDir = Environment.CurrentDirectory;
-            Gfsh.Keystore = "some/path/keystore.jks";
-            Gfsh.KeystorePassword = "password";
-            Gfsh.Truststore = "some/path/truststore.jks";
-            Gfsh.TruststorePassword = "password";
 
             var server = Gfsh
                 .start()
                 .server();
             var s = server.ToString();
-            Assert.True(s.Equals("start server"));
+            Assert.Equal("start server", s);
 
             server = Gfsh
                 .start()
@@ -115,119 +109,117 @@
                 .withLocators("someLocator")
                 .withLogLevel("debug")
                 .withMaxHeap("1.21gigabytes")
-                .withUseSsl();
+                .withSslEnableComponents("server,locator,jmx")
+                .withSslKeyStore("some/path/keystore.jks")
+                .withSslKeyStorePassword("password1")
+                .withSslTrustStore("some/path/truststore.jks")
+                .withSslTrustStorePassword("password2");
             s = server.ToString();
-            Assert.Equal(s, "start server --name=server " +
-                "--dir=someDir --server-port=1234 --locators=someLocator --log-level=debug " +
+            Assert.Equal("start server --name=server " +
+                "--dir=someDir --bind-address=someAddress --server-port=1234 --locators=someLocator --log-level=debug " +
                 "--max-heap=1.21gigabytes --J=-Dgemfire.ssl-enabled-components=server,locator,jmx " +
-                "--J=-Dgemfire.ssl-keystore=some/path/keystore.jks --J=-Dgemfire.ssl-keystore-password=password " +
-                "--J=-Dgemfire.ssl-truststore=some/path/truststore.jks --J=-Dgemfire.ssl-truststore-password=password");
+                "--J=-Dgemfire.ssl-keystore=some/path/keystore.jks --J=-Dgemfire.ssl-keystore-password=password1 " +
+                "--J=-Dgemfire.ssl-truststore=some/path/truststore.jks --J=-Dgemfire.ssl-truststore-password=password2", s);
         }
 
         [Fact]
         public void StopLocatorStringsTest()
         {
-            var locator = new GfshExecute()
+            var locator = new GfshExecute(output)
                 .stop()
                 .locator();
             var s = locator.ToString();
-            Assert.True(s.Equals("stop locator"));
+            Assert.Equal("stop locator", s);
 
-            locator = new GfshExecute().stop().locator()
+            locator = new GfshExecute(output).stop().locator()
                 .withName("name")
                 .withDir("dir");
             s = locator.ToString();
-            Assert.True(s.Equals("stop locator --name=name --dir=dir"));
+            Assert.Equal("stop locator --name=name --dir=dir", s);
         }
 
         [Fact]
         public void StopServerStringsTest()
         {
-            var server = new GfshExecute()
+            var server = new GfshExecute(output)
                 .stop()
                 .server();
             var s = server.ToString();
-            Assert.True(s.Equals("stop server"));
+            Assert.Equal("stop server", s);
 
-            server = new GfshExecute()
+            server = new GfshExecute(output)
                 .stop()
                 .server()
                 .withName("server")
                 .withDir("someDir");
             s = server.ToString();
-            Assert.True(s.Equals("stop server --name=server --dir=someDir"));
+            Assert.Equal("stop server --name=server --dir=someDir", s);
         }
 
         [Fact]
         public void CreateRegionStringsTest()
         {
-            var region = new GfshExecute()
+            var region = new GfshExecute(output)
                 .create()
                 .region();
             var s = region.ToString();
-            Assert.True(s.Equals("create region"));
+            Assert.Equal("create region", s);
 
-            region = new GfshExecute()
+            region = new GfshExecute(output)
                 .create()
                 .region()
                 .withName("region")
                 .withType("PARTITION");
             s = region.ToString();
-            Assert.True(s.Equals("create region --name=region --type=PARTITION"));
+            Assert.Equal("create region --name=region --type=PARTITION", s);
         }
 
         [Fact]
         public void ShutdownStringsTest()
         {
-            var shutdown = new GfshExecute()
+            var shutdown = new GfshExecute(output)
                 .shutdown();
             var s = shutdown.ToString();
-            Assert.True(s.Equals("shutdown"));
+            Assert.Equal("shutdown", s);
 
-            shutdown = new GfshExecute()
+            shutdown = new GfshExecute(output)
                 .shutdown()
                 .withIncludeLocators(true);
             s = shutdown.ToString();
-            Assert.True(s.Equals("shutdown --include-locators=true"));
+            Assert.Equal("shutdown --include-locators=true", s);
 
-            shutdown = new GfshExecute()
+            shutdown = new GfshExecute(output)
                 .shutdown()
                 .withIncludeLocators(false);
             s = shutdown.ToString();
-            Assert.True(s.Equals("shutdown --include-locators=false"));
+            Assert.Equal("shutdown --include-locators=false", s);
         }
 
         [Fact]
         public void ConfigurePdxStringsTest()
         {
-            var configurePdx = new GfshExecute()
+            var configurePdx = new GfshExecute(output)
                 .configurePdx();
             var s = configurePdx.ToString();
-            Assert.Equal(s, "configure pdx");
+            Assert.Equal("configure pdx", s);
 
-            configurePdx = new GfshExecute()
+            configurePdx = new GfshExecute(output)
                 .configurePdx()
                 .withReadSerialized(true);
             s = configurePdx.ToString();
-            Assert.Equal(s, "configure pdx --read-serialized=true");
+            Assert.Equal( "configure pdx --read-serialized=true", s);
 
-            configurePdx = new GfshExecute()
+            configurePdx = new GfshExecute(output)
                 .configurePdx()
                 .withReadSerialized(false);
             s = configurePdx.ToString();
-            Assert.Equal(s, "configure pdx --read-serialized=false");
+            Assert.Equal("configure pdx --read-serialized=false", s);
         }
 
         [Fact]
         public void ConnectStringsTest()
         {
-            var Gfsh = new GfshExecute();
-
-            var currentDir = Environment.CurrentDirectory;
-            Gfsh.Keystore = "some/path/keystore.jks";
-            Gfsh.KeystorePassword = "password";
-            Gfsh.Truststore = "some/path/truststore.jks";
-            Gfsh.TruststorePassword = "password";
+            var Gfsh = new GfshExecute(output);
 
             var connect = Gfsh
                 .connect();
@@ -237,11 +229,15 @@
             connect = Gfsh
                 .connect()
                 .withJmxManager("localhost", 1234)
-                .withUseSsl();
+                .withUseSsl(true)
+                .withKeyStore("some/path/keystore.jks")
+                .withKeyStorePassword("password1")
+                .withTrustStore("some/path/truststore.jks")
+                .withTrustStorePassword("password2");
             s = connect.ToString();
-            Assert.Equal(s, "connect --jmx-manager=localhost[1234] --use-ssl " +
-                "--key-store=some/path/keystore.jks --key-store-password=password " +
-                "--trust-store=some/path/truststore.jks --trust-store-password=password");
+            Assert.Equal("connect --jmx-manager=localhost[1234] --use-ssl=true " +
+                "--key-store=some/path/keystore.jks --key-store-password=password1 " +
+                "--trust-store=some/path/truststore.jks --trust-store-password=password2", s);
         }
     }
 }
diff --git a/clicache/integration-test2/QueryTest.cs b/clicache/integration-test2/QueryTest.cs
new file mode 100644
index 0000000..ccb37b9
--- /dev/null
+++ b/clicache/integration-test2/QueryTest.cs
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using Xunit;
+using System.Diagnostics;
+using System.Threading;
+using Xunit.Abstractions;
+
+namespace Apache.Geode.Client.IntegrationTests
+{
+    public class QueryOrder : IPdxSerializable
+    {
+        private const string ORDER_ID_KEY_ = "order_id";
+        private const string NAME_KEY_ = "name";
+        private const string QUANTITY_KEY_ = "quantity";
+        public long OrderId { get; set; }
+        public string Name { get; set; }
+        public short Quantity { get; set; }
+        // A default constructor is required for deserialization
+        public QueryOrder() { }
+        public QueryOrder(int orderId, string name, short quantity)
+        {
+            OrderId = orderId;
+            Name = name;
+            Quantity = quantity;
+        }
+        public override string ToString()
+        {
+            return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
+        }
+        public void ToData(IPdxWriter output)
+        {
+            output.WriteLong(ORDER_ID_KEY_, OrderId);
+            output.MarkIdentityField(ORDER_ID_KEY_);
+            output.WriteString(NAME_KEY_, Name);
+            output.MarkIdentityField(NAME_KEY_);
+            output.WriteInt(QUANTITY_KEY_, Quantity);
+            output.MarkIdentityField(QUANTITY_KEY_);
+        }
+        public void FromData(IPdxReader input)
+        {
+            OrderId = input.ReadLong(ORDER_ID_KEY_);
+            Name = input.ReadString(NAME_KEY_);
+            Quantity = (short)input.ReadInt(QUANTITY_KEY_);
+        }
+        public static IPdxSerializable CreateDeserializable()
+        {
+            return new QueryOrder();
+        }
+    }
+
+
+    [Trait("Category", "Integration")]
+    public class QueryTest : TestBase
+    {
+        public QueryTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
+        [Fact]
+        public void PdxSerializableQueryHaveCorrectValues()
+        {
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
+            {
+                Assert.True(cluster.Start());
+                Assert.Equal(0, cluster.Gfsh.create()
+                    .region()
+                    .withName("cqTestRegion")
+                    .withType("REPLICATE")
+                    .execute());
+
+                var cache = cluster.CreateCache();
+                try
+                {
+
+                    cache.TypeRegistry.RegisterPdxType(QueryOrder.CreateDeserializable);
+
+                    var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                        .SetPoolName("default");
+
+                    var region = regionFactory.Create<string, QueryOrder>("cqTestRegion");
+
+                    Debug.WriteLine("Putting and changing Position objects in the region");
+                    var order1 = new QueryOrder(1, "product x", 23);
+                    var order2 = new QueryOrder(2, "product y", 37);
+                    var order3 = new QueryOrder(3, "product z", 101);
+
+                    region.Put("order1", order1);
+
+                    region.Put("order2", order2);
+
+                    region.Put("order3", order3);
+
+                    order1.Quantity = 20;
+                    region.Put("order1", order1);
+
+                    order2.Quantity = 45;
+                    region.Put("order2", order2);
+
+                    order3.Quantity = 11;
+                    region.Put("order3", order3);
+
+                    var results = region.Query<QueryOrder>("SELECT * FROM /cqTestRegion WHERE quantity > 30");
+                    Assert.Equal(results.Size, 1UL);
+                    Assert.Equal(results[0].Name, "product y");
+
+                    region.Clear();
+                }
+                finally
+                {
+                    cache.Close();
+                }
+            }
+        }
+
+        [Fact]
+        public void DataSerializableQueryHaveCorrectValues()
+        {
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
+            {
+                Assert.Equal(cluster.Start(), true);
+                Assert.Equal(0, cluster.Gfsh.deploy()
+                    .withJar(Config.JavaobjectJarPath)
+                    .execute());
+                Assert.Equal(0, cluster.Gfsh.create()
+                    .region()
+                    .withName("cqTestRegion")
+                    .withType("REPLICATE")
+                    .execute());
+
+                Assert.Equal(0, cluster.Gfsh.executeFunction()
+                    .withId("InstantiateDataSerializable")
+                    .withMember("DataSerializableQueryHaveCorrectValues_server_0")
+                    .execute());
+
+                var cache = cluster.CreateCache();
+                try {
+                cache.TypeRegistry.RegisterType(Position.CreateDeserializable, 22);
+
+                var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                    .SetPoolName("default");
+
+                var region = regionFactory.Create<string, Position>("cqTestRegion");
+
+                Debug.WriteLine("Putting and changing Position objects in the region");
+                var order1 = new Position("GOOG", 23);
+                var order2 = new Position("IBM", 37);
+                var order3 = new Position("PVTL", 101);
+
+                region.Put("order1", order1);
+                var Value = region["order1"];
+
+                region.Put("order2", order2);
+
+                order1.SharesOutstanding = 55;
+                region.Put("order1", order1);
+
+                order2.SharesOutstanding = 77;
+                region.Put("order2", order2);
+
+                order2.SharesOutstanding = 11;
+                region.Put("order2", order2);
+
+                region.Remove("order1");
+
+                region.Put("order3", order3);
+
+                var results = region.Query<Position>("SELECT * FROM /cqTestRegion WHERE sharesOutstanding > 50");
+                Assert.Equal(results.Size, 1UL);
+                Assert.Equal(results[0].SecId, "PVTL");
+
+                region.Clear();
+                }
+                finally
+                {
+                    cache.Close();
+                }
+            }
+        }
+    }
+}
diff --git a/clicache/integration-test2/RegionSSLTest.cs b/clicache/integration-test2/RegionSSLTest.cs
index 5446c4c..da4052f 100644
--- a/clicache/integration-test2/RegionSSLTest.cs
+++ b/clicache/integration-test2/RegionSSLTest.cs
@@ -18,71 +18,49 @@
 using System;
 using System.IO;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     [Trait("Category", "Integration")]
     public class RegionSSLTest : TestBase, IDisposable
     {
-        private readonly Cache cacheOne_;
+        private readonly Cache cache_;
 
-        public RegionSSLTest()
+        public RegionSSLTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
         {
-            var pathvar = Environment.GetEnvironmentVariable("PATH");
-
-            var openSslPath = Environment.CurrentDirectory + Config.OpenSSLPath;
-
-            if (!Directory.Exists(openSslPath))
-            {
-                throw new DirectoryNotFoundException("OpenSSL is a prerequisite for integration tests and the directory was not found.");
-            }
-
-            pathvar += ";" + openSslPath;
-
-            var cryptoImplPath = Environment.CurrentDirectory + Config.CryptoImplPath;
-
-            if (!File.Exists(cryptoImplPath + "\\cryptoImpl.dll"))
-            {
-                throw new System.IO.FileNotFoundException("cryptoImpl.dll was not found at " + cryptoImplPath);
-            }
-
-            pathvar += ";" + cryptoImplPath;
-
-            Environment.SetEnvironmentVariable("PATH", pathvar);
-
             var cacheFactory = new CacheFactory();
+            cacheFactory.Set("log-level", "none");
             cacheFactory.Set("ssl-enabled", "true");
-            cacheFactory.Set("ssl-keystore", Environment.CurrentDirectory + "\\ClientSslKeys\\client_keystore.password.pem");
+            cacheFactory.Set("ssl-keystore", Environment.CurrentDirectory + @"\ClientSslKeys\client_keystore.password.pem");
             cacheFactory.Set("ssl-keystore-password", "gemstone");
-            cacheFactory.Set("ssl-truststore", Environment.CurrentDirectory + "\\ClientSslKeys\\client_truststore.pem");
+            cacheFactory.Set("ssl-truststore", Environment.CurrentDirectory + @"\ClientSslKeys\client_truststore.pem");
 
-            cacheOne_ = cacheFactory.Create();
+            cache_ = cacheFactory.Create();
         }
 
         public void Dispose()
         {
-            cacheOne_.Close();
+            cache_.Close();
         }
 
         [Fact]
         public void SslPutGetTest()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 cluster.UseSSL = true;
                 Assert.True(cluster.Start());
-                Assert.Equal(cluster.Gfsh
+                Assert.Equal(0, cluster.Gfsh
                     .create()
                     .region()
                     .withName("testRegion1")
                     .withType("PARTITION")
-                    .execute(), 0);
+                    .execute());
 
-                cacheOne_.GetPoolFactory()
-                    .AddLocator(cluster.Gfsh.LocatorBindAddress, cluster.Gfsh.LocatorPort)
-                    .Create("default");
+                cluster.ApplyLocators(cache_.GetPoolFactory()).Create("default");
 
-                var regionFactory = cacheOne_.CreateRegionFactory(RegionShortcut.PROXY)
+                var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
                             .SetPoolName("default");
 
                 var region = regionFactory.Create<string, string>("testRegion1");
diff --git a/clicache/integration-test2/RegionTest.cs b/clicache/integration-test2/RegionTest.cs
index 104bb72..0b67ca3 100644
--- a/clicache/integration-test2/RegionTest.cs
+++ b/clicache/integration-test2/RegionTest.cs
@@ -18,39 +18,42 @@
 using System;
 using System.IO;
 using Xunit;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     [Trait("Category", "Integration")]
     public class RegionTest : TestBase
     {
+        public RegionTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
         [Fact]
         public void PutOnOneCacheGetOnAnotherCache()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 Assert.True(cluster.Start());
-                Assert.Equal(cluster.Gfsh
+                Assert.Equal(0, cluster.Gfsh
                     .create()
                     .region()
                     .withName("testRegion1")
                     .withType("PARTITION")
-                    .execute(), 0);
+                    .execute());
 
-                var cacheFactory = new CacheFactory();
+                var cacheFactory = new CacheFactory()
+                    .Set("log-level", "none");
+
                 var cacheOne = cacheFactory.Create();
-                cacheOne.GetPoolFactory()
-                    .AddLocator(cluster.Gfsh.LocatorBindAddress, cluster.Gfsh.LocatorPort)
-                    .Create("default");
-
                 try
                 {
+                    cluster.ApplyLocators(cacheOne.GetPoolFactory()).Create("default");
+
                     var cacheTwo = cacheFactory.Create();
                     try
                     {
-                        cacheTwo.GetPoolFactory()
-                            .AddLocator(cluster.Gfsh.LocatorBindAddress, cluster.Gfsh.LocatorPort)
-                            .Create("default");
+                        cluster.ApplyLocators(cacheTwo.GetPoolFactory()).Create("default");
 
                         var regionFactory1 = cacheOne.CreateRegionFactory(RegionShortcut.PROXY)
                             .SetPoolName("default");
diff --git a/clicache/integration-test2/SerializationTests.cs b/clicache/integration-test2/SerializationTests.cs
index 6b5afc5..47dd405 100644
--- a/clicache/integration-test2/SerializationTests.cs
+++ b/clicache/integration-test2/SerializationTests.cs
@@ -21,6 +21,7 @@
 using PdxTests;
 using System.Collections;
 using System.Collections.Generic;
+using Xunit.Abstractions;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
@@ -399,6 +400,10 @@
     [Trait("Category", "Integration")]
     public class SerializationTests : TestBase
     {
+        public SerializationTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
+        {
+        }
+
         private void putAndCheck(IRegion<object, object> region, object key, object value)
         {
             region[key] = value;
@@ -410,25 +415,20 @@
         [Fact]
         public void BuiltInSerializableTypes()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 Assert.True(cluster.Start());
-                Assert.Equal(cluster.Gfsh.create()
+                Assert.Equal(0, cluster.Gfsh.create()
                     .region()
                     .withName("testRegion")
                     .withType("REPLICATE")
-                    .execute(), 0);
-                var cacheFactory = new CacheFactory()
-                    .Set("log-level", "none");
-                var cache = cacheFactory.Create();
+                    .execute());
 
-                var poolFactory = cache.GetPoolFactory()
-                    .AddLocator("localhost", cluster.Gfsh.LocatorPort);
-                poolFactory.Create("pool");
+                var cache = cluster.CreateCache();
 
-                var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                    .SetPoolName("pool");
-                var region = regionFactory.Create<object, object>("testRegion");
+                var region = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                    .SetPoolName("default")
+                    .Create<object, object>("testRegion");
                 Assert.NotNull(region);
 
                 putAndCheck(region, "CacheableString", "foo");
@@ -482,27 +482,22 @@
         [Fact]
         public void PutGetCustomSerializableTypes()
         {
-            using (var cluster = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+            using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1))
             {
                 Assert.True(cluster.Start());
-                Assert.Equal(cluster.Gfsh.create()
+                Assert.Equal(0, cluster.Gfsh.create()
                     .region()
                     .withName("testRegion")
                     .withType("REPLICATE")
-                    .execute(), 0);
-                var cacheFactory = new CacheFactory()
-                    .Set("log-level", "none");
-                var cache = cacheFactory.Create();
+                    .execute());
+                
+                var cache = cluster.CreateCache();
 
                 cache.TypeRegistry.RegisterType(Order.CreateDeserializable, 0x42);
 
-                var poolFactory = cache.GetPoolFactory()
-                    .AddLocator("localhost", cluster.Gfsh.LocatorPort);
-                poolFactory.Create("pool");
-
-                var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                  .SetPoolName("pool");
-                var orderRegion = regionFactory.Create<int, Order>("testRegion");
+                var orderRegion = cache.CreateRegionFactory(RegionShortcut.PROXY)
+                  .SetPoolName("default")
+                  .Create<int, Order>("testRegion");
                 Assert.NotNull(orderRegion);
 
                 const int orderKey = 65;
diff --git a/clicache/integration-test2/TestBase.cs b/clicache/integration-test2/TestBase.cs
index 34fdbce..fe5b87e 100644
--- a/clicache/integration-test2/TestBase.cs
+++ b/clicache/integration-test2/TestBase.cs
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -20,13 +20,27 @@
 using System.IO;
 using System.Reflection;
 using Xunit;
+using Xunit.Abstractions;
+using Xunit.Sdk;
 
 namespace Apache.Geode.Client.IntegrationTests
 {
     [Trait("Category", "Integration")]
     public class TestBase
     {
-        private const int MaxAllowedDirectoryCharacters = 30;
+        protected ITest currentTest;
+        protected ITestOutputHelper output;
+
+        public TestBase(ITestOutputHelper testOutputHelper)
+        {
+            var helper = (TestOutputHelper)testOutputHelper;
+
+            ITest test = (ITest)helper.GetType().GetField("test", BindingFlags.NonPublic | BindingFlags.Instance)
+                                      .GetValue(helper);
+
+            currentTest = test;
+            output = testOutputHelper;
+        }
 
         public void CleanTestCaseDirectory(string directory)
         {
@@ -38,16 +52,7 @@
 
         public string CreateTestCaseDirectoryName()
         {
-            var st = new StackTrace();
-            var sf = st.GetFrame(1);
-            var currentMethod = sf.GetMethod();
-            var dirName = currentMethod.Name;
-
-            if (dirName.Length > MaxAllowedDirectoryCharacters)
-            {
-                dirName = dirName.Substring(0, MaxAllowedDirectoryCharacters);
-            }
-            return dirName;
+            return currentTest.TestCase.TestMethod.Method.Name;
         }
     }
 }
diff --git a/clicache/integration-test2/cache.xml b/clicache/integration-test2/cache.xml
index b6e374c..9840108 100644
--- a/clicache/integration-test2/cache.xml
+++ b/clicache/integration-test2/cache.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
diff --git a/clicache/integration-test2/packages.config b/clicache/integration-test2/packages.config
index 7b91adb..e7d725b 100644
--- a/clicache/integration-test2/packages.config
+++ b/clicache/integration-test2/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
diff --git a/clicache/integration-test2/xunit.runner.json b/clicache/integration-test2/xunit.runner.json
index 20169fe..16ea334 100644
--- a/clicache/integration-test2/xunit.runner.json
+++ b/clicache/integration-test2/xunit.runner.json
@@ -1,4 +1,4 @@
-{
+{
   "methodDisplay": "classAndMethod",
   "parallelizeAssembly":  true,
   "parallelizeTestCollections": true 
diff --git a/clicache/plugins/SQLiteCLI/CMakeLists.txt b/clicache/plugins/SQLiteCLI/CMakeLists.txt
index f6440eb..8000a84 100644
--- a/clicache/plugins/SQLiteCLI/CMakeLists.txt
+++ b/clicache/plugins/SQLiteCLI/CMakeLists.txt
@@ -27,12 +27,15 @@
     PdxClassLibrary
 )
 
+get_target_property(SQLite_netFx_INTERFACE_LINK_LIBRARIES SQLite::netFx INTERFACE_LINK_LIBRARIES)
+
 set_target_properties( ${PROJECT_NAME} PROPERTIES
-  COMMON_LANGUAGE_RUNTIME ""
   VS_GLOBAL_ROOTNAMESPACE ${PROJECT_NAME}
   VS_GLOBAL_TreatWarningsAsErrors True
   VS_GLOBAL_PROJECT_TYPES "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
-  VS_DOTNET_REFERENCE_System.Data.SQLite ${sqlite-netFx_SHARED_LIB}
+  VS_DOTNET_REFERENCE_System.Data.SQLite "${SQLite_netFx_INTERFACE_LINK_LIBRARIES}"
   VS_DOTNET_REFERENCES "System;System.Data;System.Xml"
   FOLDER cli/plugins
-)
\ No newline at end of file
+)
+
+add_dependencies(${PROJECT_NAME} SQLite::netFx)
diff --git a/clicache/plugins/SQLiteCLI/SqLiteImpl.cs b/clicache/plugins/SQLiteCLI/SqLiteImpl.cs
index b67f888..749d16c 100644
--- a/clicache/plugins/SQLiteCLI/SqLiteImpl.cs
+++ b/clicache/plugins/SQLiteCLI/SqLiteImpl.cs
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-using System;
+using System;
 using System.Data;
 using System.Data.SQLite;
 using Apache.Geode.Client;
diff --git a/clicache/src/Cache.hpp b/clicache/src/Cache.hpp
index d45d10d..8766d62 100644
--- a/clicache/src/Cache.hpp
+++ b/clicache/src/Cache.hpp
@@ -22,6 +22,10 @@
 #include "IGeodeCache.hpp"
 #include "native_shared_ptr.hpp"
 
+#include "begin_native.hpp"
+#include <geode/Cache.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 
 namespace Apache
diff --git a/clicache/src/CacheableHashMap.hpp b/clicache/src/CacheableHashMap.hpp
index f0c9389..702b69a 100644
--- a/clicache/src/CacheableHashMap.hpp
+++ b/clicache/src/CacheableHashMap.hpp
@@ -22,6 +22,10 @@
 #include "ISerializable.hpp"
 #include "IDataSerializablePrimitive.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/DSCode.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 using namespace System::Collections::Generic;
 
@@ -33,7 +37,7 @@
   {
     namespace Client
     {
-			namespace native = apache::geode::client;
+      namespace native = apache::geode::client;
 
       /// <summary>
       /// A mutable <c>ICacheableKey</c> to <c>ISerializable</c> hash map
diff --git a/clicache/src/CacheableObject.hpp b/clicache/src/CacheableObject.hpp
index 53edfa1..acfe37b 100644
--- a/clicache/src/CacheableObject.hpp
+++ b/clicache/src/CacheableObject.hpp
@@ -21,6 +21,10 @@
 #include "geode_defs.hpp"
 #include "IDataSerializablePrimitive.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/InternalId.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 
 namespace Apache
diff --git a/clicache/src/CacheableObjectArray.hpp b/clicache/src/CacheableObjectArray.hpp
index 6cce069..e3bcb34 100644
--- a/clicache/src/CacheableObjectArray.hpp
+++ b/clicache/src/CacheableObjectArray.hpp
@@ -20,6 +20,10 @@
 #include "geode_defs.hpp"
 #include "IDataSerializablePrimitive.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/DSCode.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 using namespace System::Collections::Generic;
 
diff --git a/clicache/src/CacheableObjectXml.hpp b/clicache/src/CacheableObjectXml.hpp
index ef7c610..0e4c5e1 100644
--- a/clicache/src/CacheableObjectXml.hpp
+++ b/clicache/src/CacheableObjectXml.hpp
@@ -21,6 +21,10 @@
 #include "geode_defs.hpp"
 #include "IDataSerializablePrimitive.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/InternalId.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 
 namespace Apache
diff --git a/clicache/src/CacheableUndefined.hpp b/clicache/src/CacheableUndefined.hpp
index f4f3a5a..f217911 100644
--- a/clicache/src/CacheableUndefined.hpp
+++ b/clicache/src/CacheableUndefined.hpp
@@ -23,6 +23,10 @@
 #include "ISerializable.hpp"
 #include "Log.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/DSFixedId.hpp>
+#include "end_native.hpp"
+
 using namespace System;
 
 namespace Apache
@@ -92,7 +96,7 @@
         {
           virtual Int32 get()
           {
-            return static_cast<Int32>(native::DSFid::CacheableUndefined);
+            return static_cast<Int32>(native::internal::DSFid::CacheableUndefined);
           }
         }
 
diff --git a/clicache/src/CacheableVector.hpp b/clicache/src/CacheableVector.hpp
index bb820aa..c944f0d 100644
--- a/clicache/src/CacheableVector.hpp
+++ b/clicache/src/CacheableVector.hpp
@@ -22,6 +22,9 @@
 #include "IDataSerializablePrimitive.hpp"
 #include "ISerializable.hpp"
 
+#include "begin_native.hpp"
+#include <geode/internal/DSCode.hpp>
+#include "end_native.hpp"
 
 using namespace System;
 using namespace System::Collections::Generic;
diff --git a/clicache/src/Execution.cpp b/clicache/src/Execution.cpp
index beaa0cb..f607384 100644
--- a/clicache/src/Execution.cpp
+++ b/clicache/src/Execution.cpp
@@ -15,9 +15,6 @@
  * limitations under the License.
  */
 
-
-
-
 #include "Execution.hpp"
 #include "begin_native.hpp"
 #include <geode/Execution.hpp>
@@ -49,7 +46,8 @@
         
           for each(TFilter item in routingObj)
           {
-            rsptr->push_back(Serializable::GetUnmanagedValueGeneric<TFilter>( item ));
+            auto v = Serializable::GetUnmanagedValueGeneric<TFilter>(item);
+            rsptr->push_back(v);
           }
           
           try
@@ -104,7 +102,6 @@
         }
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
-
       generic<class TResult>
       IResultCollector<TResult>^ Execution<TResult>::Execute(String^ func, TimeSpan timeout)
       {
diff --git a/clicache/src/GeodeClassIds.hpp b/clicache/src/GeodeClassIds.hpp
index f28b031..56a1066 100644
--- a/clicache/src/GeodeClassIds.hpp
+++ b/clicache/src/GeodeClassIds.hpp
@@ -19,6 +19,7 @@
 
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
+#include <geode/internal/InternalId.hpp>
 #include "end_native.hpp"
 
 namespace Apache
diff --git a/clicache/src/LocalRegion.cpp b/clicache/src/LocalRegion.cpp
index b9f36d0..4d961b9 100644
--- a/clicache/src/LocalRegion.cpp
+++ b/clicache/src/LocalRegion.cpp
@@ -44,7 +44,7 @@
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::Get(TKey key, Object^ callbackArg)
       {
-        std::shared_ptr<native::CacheableKey> keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
         auto nativeptr= this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr)
         {
@@ -812,7 +812,8 @@
 
            try
            {
-             return m_nativeptr->get()->containsValueForKey(Serializable::GetUnmanagedValueGeneric<TKey>(key));
+             auto v = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+             return m_nativeptr->get()->containsValueForKey(v);
            }
            finally
            {
diff --git a/clicache/src/Log.cpp b/clicache/src/Log.cpp
index 333f03c..4264fd4 100644
--- a/clicache/src/Log.cpp
+++ b/clicache/src/Log.cpp
@@ -18,9 +18,9 @@
 
 
 #include "Log.hpp"
+#include "ExceptionTypes.hpp"
 #include "impl/ManagedString.hpp"
 #include "impl/SafeConvert.hpp"
-#include "ExceptionTypes.hpp"
 
 
 using namespace System;
@@ -70,15 +70,6 @@
           static_cast<apache::geode::client::LogLevel>(level));
       }
 
-      String^ Log::LogFileName()
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-          return ManagedString::Get(apache::geode::client::Log::logFileName());
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-      }
-
       bool Log::Enabled(LogLevel level)
       {
         return apache::geode::client::Log::enabled(
diff --git a/clicache/src/Log.hpp b/clicache/src/Log.hpp
index 7ac9514..5409646 100644
--- a/clicache/src/Log.hpp
+++ b/clicache/src/Log.hpp
@@ -199,13 +199,6 @@
         static void SetLevel(LogLevel level);
 
         /// <summary>
-        /// Returns the name of the current log file.
-        /// NOTE: This function is for debugging only, as it is not completely
-        /// thread-safe!
-        /// </summary>
-        static String^ LogFileName();
-
-        /// <summary>
         /// True if log messages at the given level are enabled.
         /// </summary>
         static bool Enabled(LogLevel level);
diff --git a/clicache/src/Region.cpp b/clicache/src/Region.cpp
index 5e59550..2f4ddef 100644
--- a/clicache/src/Region.cpp
+++ b/clicache/src/Region.cpp
@@ -185,7 +185,7 @@
       System::Collections::Generic::IEnumerator<KeyValuePair<TKey, TValue>>^
         Region<TKey, TValue>::GetEnumerator()
       {
-		std::vector<std::shared_ptr<native::RegionEntry>> vc;
+        std::vector<std::shared_ptr<native::RegionEntry>> vc;
 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
@@ -216,7 +216,7 @@
       System::Collections::IEnumerator^
         Region<TKey, TValue>::GetEnumeratorOld()
       {
-		std::vector<std::shared_ptr<native::RegionEntry>> vc;
+        std::vector<std::shared_ptr<native::RegionEntry>> vc;
 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
@@ -299,7 +299,7 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          std::vector<std::shared_ptr<native::CacheableKey>> vc;
+        std::vector<std::shared_ptr<native::CacheableKey>> vc;
         try
         {
           vc = m_nativeptr->get()->serverKeys();
@@ -325,7 +325,7 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          std::vector<std::shared_ptr<native::Cacheable>> vc;
+        std::vector<std::shared_ptr<native::Cacheable>> vc;
         try
         {
           vc = m_nativeptr->get()->values();
@@ -656,8 +656,8 @@
 
           for each(TKey item in keys)
           {
-            vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+            auto v = Serializable::GetUnmanagedValueGeneric<TKey>(item);
+            vecKeys.push_back(v);
           }
 
          native::HashMapOfCacheable native_value;
@@ -694,12 +694,12 @@
         if (keys != nullptr) {
           _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-            std::vector<std::shared_ptr<native::CacheableKey>> vecKeys;
+          std::vector<std::shared_ptr<native::CacheableKey>> vecKeys;
 
           for each(TKey item in keys)
           {
-            vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+            auto v = Serializable::GetUnmanagedValueGeneric<TKey>(item);
+            vecKeys.push_back(v);
           }
 
           std::shared_ptr<native::HashMapOfCacheable> valuesPtr;
@@ -748,9 +748,12 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          std::vector<std::shared_ptr<native::CacheableKey>> vecKeys;
-        for each(TKey item in keys)
-          vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item));
+        std::vector<std::shared_ptr<native::CacheableKey>> vecKeys;
+        for each(TKey item in keys) 
+        {
+          auto v = Serializable::GetUnmanagedValueGeneric<TKey>(item);
+          vecKeys.push_back(v);
+        }
 
         std::shared_ptr<native::Serializable> callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
 
@@ -954,7 +957,7 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-		std::vector<std::shared_ptr<native::RegionEntry>> vc;
+        std::vector<std::shared_ptr<native::RegionEntry>> vc;
         try
         {
           vc = m_nativeptr->get()->entries(recursive);
@@ -1054,7 +1057,7 @@
 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-		std::vector<std::shared_ptr<native::RegionEntry>> vc;
+        std::vector<std::shared_ptr<native::RegionEntry>> vc;
         try
         {
           vc = m_nativeptr->get()->entries(false);
@@ -1120,7 +1123,8 @@
 
           for each(TKey item in keys)
           {
-            vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item));
+            auto v = Serializable::GetUnmanagedValueGeneric<TKey>(item);
+            vecKeys.push_back(v);
           }
           try
           {
@@ -1146,8 +1150,8 @@
 
           for each(TKey item in keys)
           {
-            vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+            auto v = Serializable::GetUnmanagedValueGeneric<TKey>(item);
+            vecKeys.push_back(v);
           }
 
           try
@@ -1206,7 +1210,7 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          std::vector<std::shared_ptr<native::CacheableKey>> vc;
+        std::vector<std::shared_ptr<native::CacheableKey>> vc;
         try
         {
           vc = m_nativeptr->get()->getInterestList();
@@ -1233,7 +1237,7 @@
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          std::vector<std::shared_ptr<native::CacheableString>> vc;
+        std::vector<std::shared_ptr<native::CacheableString>> vc;
         try
         {
           vc = m_nativeptr->get()->getInterestListRegex();
diff --git a/clicache/src/TypeRegistry.cpp b/clicache/src/TypeRegistry.cpp
index f23311a..9809c62 100644
--- a/clicache/src/TypeRegistry.cpp
+++ b/clicache/src/TypeRegistry.cpp
@@ -250,7 +250,7 @@
           auto&& serializationRegistry = CacheRegionHelper::getCacheImpl(m_cache->GetNative().get())->getSerializationRegistry();
           auto nativeDelegateFunction = static_cast<std::shared_ptr<native::Serializable>(*)()>(
               System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(nativeDelegate).ToPointer());
-          serializationRegistry->addDataSerializableFixedIdType(fixedId, nativeDelegateFunction);
+          serializationRegistry->addDataSerializableFixedIdType(static_cast<internal::DSFid>(fixedId), nativeDelegateFunction);
         _GF_MG_EXCEPTION_CATCH_ALL2
       }
 
diff --git a/clicache/src/begin_native.hpp b/clicache/src/begin_native.hpp
index 36bf715..7d1d331 100644
--- a/clicache/src/begin_native.hpp
+++ b/clicache/src/begin_native.hpp
@@ -28,6 +28,9 @@
 #undef nullptr
 #define nullptr __nullptr
 
+#pragma push_macro("_M_CEE")
+#undef _M_CEE
+
 #pragma warning(push)
 
 // Disable XML warnings
diff --git a/clicache/src/end_native.hpp b/clicache/src/end_native.hpp
index 996b31d..b2134df 100644
--- a/clicache/src/end_native.hpp
+++ b/clicache/src/end_native.hpp
@@ -21,7 +21,8 @@
 
 #pragma warning(pop)
 
+#pragma pop_macro("_M_CEE")
 #pragma pop_macro("nullptr")
 #pragma pop_macro("_ALLOW_KEYWORD_MACROS")
 
-#undef __begin_native__hpp__
\ No newline at end of file
+#undef __begin_native__hpp__
diff --git a/clicache/src/geode_includes.hpp b/clicache/src/geode_includes.hpp
index 8ddce3f..49277de 100644
--- a/clicache/src/geode_includes.hpp
+++ b/clicache/src/geode_includes.hpp
@@ -32,10 +32,17 @@
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
 #include <geode/CacheableBuiltins.hpp>
-#include <geode/CacheLoader.hpp>
 #include <geode/CacheListener.hpp>
-#include <geode/FixedPartitionResolver.hpp>
+#include <geode/CacheLoader.hpp>
 #include <geode/CacheWriter.hpp>
+#include <geode/DataSerializable.hpp>
+#include <geode/PdxSerializable.hpp>
+#include <geode/FixedPartitionResolver.hpp>
+#include <geode/internal/DataSerializableFixedId.hpp>
+#include <geode/internal/DataSerializablePrimitive.hpp>
+#include <geode/internal/DataSerializableInternal.hpp>
+#include <geode/internal/DSCode.hpp>
+#include <geode/internal/DSFixedId.hpp>
 #include <geode/internal/InternalId.hpp>
 #include "end_native.hpp"
 
@@ -43,4 +50,5 @@
 #include "begin_native.hpp"
 #include <CacheImpl.hpp>
 #include <DistributedSystemImpl.hpp>
+#include <PdxFieldType.hpp>
 #include "end_native.hpp"
diff --git a/clicache/src/impl/AppDomainContext.cpp b/clicache/src/impl/AppDomainContext.cpp
index f04c32e..07b1a96 100644
--- a/clicache/src/impl/AppDomainContext.cpp
+++ b/clicache/src/impl/AppDomainContext.cpp
@@ -1,4 +1,4 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
diff --git a/clicache/src/impl/EnumInfo.hpp b/clicache/src/impl/EnumInfo.hpp
index 7cca168..0361543 100755
--- a/clicache/src/impl/EnumInfo.hpp
+++ b/clicache/src/impl/EnumInfo.hpp
@@ -20,6 +20,10 @@
 #include "../IDataSerializableFixedId.hpp"
 #include "../ISerializable.hpp"
 
+#include "../begin_native.hpp"
+#include <geode/internal/DSFixedId.hpp>
+#include "../end_native.hpp"
+
 using namespace System;
 using namespace System::Collections::Generic;
 
@@ -69,7 +73,7 @@
 
           property Int32 DSFID
           {
-            virtual Int32 get() { return static_cast<Int32>(apache::geode::client::DSFid::EnumInfo); }
+            virtual Int32 get() { return static_cast<Int32>(apache::geode::client::internal::DSFid::EnumInfo); }
           }
 
           virtual String^ ToString() override
diff --git a/clicache/src/impl/ManagedCacheableDelta.hpp b/clicache/src/impl/ManagedCacheableDelta.hpp
index fb7b193..cd35897 100644
--- a/clicache/src/impl/ManagedCacheableDelta.hpp
+++ b/clicache/src/impl/ManagedCacheableDelta.hpp
@@ -22,6 +22,9 @@
 
 #include "../geode_defs.hpp"
 #include "../begin_native.hpp"
+#include <geode/CacheableKey.hpp>
+#include <geode/Delta.hpp>
+#include <geode/DataSerializable.hpp>
 #include "../end_native.hpp"
 #include "../IDelta.hpp"
 #include "../IDataSerializable.hpp"
diff --git a/clicache/src/impl/ManagedCacheableKey.hpp b/clicache/src/impl/ManagedCacheableKey.hpp
index 491c22a..03d87ae 100644
--- a/clicache/src/impl/ManagedCacheableKey.hpp
+++ b/clicache/src/impl/ManagedCacheableKey.hpp
@@ -22,6 +22,10 @@
 #include <vcclr.h>
 #include "../begin_native.hpp"
 #include <geode/CacheableKey.hpp>
+#include <geode/DataSerializable.hpp>
+#include <geode/internal/DataSerializableFixedId.hpp>
+#include <geode/internal/DataSerializablePrimitive.hpp>
+#include <geode/internal/DataSerializableInternal.hpp>
 #include "../end_native.hpp"
 
 #include "../IDataSerializable.hpp"
@@ -119,7 +123,7 @@
       };
 
       class ManagedDataSerializablePrimitive
-        : public native::DataSerializablePrimitive , public native::CacheableKey
+        : public native::internal::DataSerializablePrimitive , public native::CacheableKey
       {
       public:
 
@@ -139,7 +143,7 @@
 
         void fromData(DataInput& input) override;
 
-        DSCode getDsCode() const override { return static_cast<DSCode>(m_managedptr->DsCode); }
+        native::internal::DSCode getDsCode() const override { return static_cast<native::internal::DSCode>(m_managedptr->DsCode); }
 
         bool operator == (const CacheableKey& other) const override;
 
@@ -156,7 +160,7 @@
       };
 
       class ManagedDataSerializableInternal
-        : public native::DataSerializableInternal
+        : public native::internal::DataSerializableInternal
       {
       public:
 
@@ -187,7 +191,7 @@
       };
 
       class ManagedDataSerializableFixedId
-        : public native::DataSerializableFixedId
+        : public native::internal::DataSerializableFixedId
       {
       public:
 
@@ -207,7 +211,7 @@
 
         void fromData(DataInput& input) override;
 
-        DSFid getDSFID() const override { return static_cast<DSFid>(m_managedptr->DSFID); }
+        native::internal::DSFid getDSFID() const override { return static_cast<native::internal::DSFid>(m_managedptr->DSFID); }
 
         inline Apache::Geode::Client::IDataSerializableFixedId^ ptr() const
         {
diff --git a/clicache/src/impl/PdxFieldType.cpp b/clicache/src/impl/PdxFieldType.cpp
index 04d8f99..543fcd4 100644
--- a/clicache/src/impl/PdxFieldType.cpp
+++ b/clicache/src/impl/PdxFieldType.cpp
@@ -21,6 +21,7 @@
 #include "PdxFieldType.hpp"
 #include "../begin_native.hpp"
 #include <PdxTypes.hpp>
+#include <PdxFieldType.hpp>
 #include "../end_native.hpp"
 
 
diff --git a/clicache/src/impl/PdxManagedCacheableKey.hpp b/clicache/src/impl/PdxManagedCacheableKey.hpp
index 12ddcba..b3f14d0 100644
--- a/clicache/src/impl/PdxManagedCacheableKey.hpp
+++ b/clicache/src/impl/PdxManagedCacheableKey.hpp
@@ -22,6 +22,7 @@
 #include "../begin_native.hpp"
 #include <geode/CacheableKey.hpp>
 #include <geode/Delta.hpp>
+#include <geode/PdxSerializable.hpp>
 #include "../end_native.hpp"
 
 #include "../geode_defs.hpp"
diff --git a/clicache/src/impl/PdxType.hpp b/clicache/src/impl/PdxType.hpp
index 90c6854..86737e0 100644
--- a/clicache/src/impl/PdxType.hpp
+++ b/clicache/src/impl/PdxType.hpp
@@ -19,6 +19,10 @@
 
 #include "PdxFieldType.hpp"
 
+#include "../begin_native.hpp"
+#include <PdxFieldType.hpp>
+#include "../end_native.hpp"
+
 using namespace System;
 using namespace System::Collections::Generic;
 
diff --git a/clicache/test2/packages.config b/clicache/test2/packages.config
index 2236085..02bf7df 100644
--- a/clicache/test2/packages.config
+++ b/clicache/test2/packages.config
@@ -1,4 +1,20 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
 <packages>
   <package id="Microsoft.VisualStudio.TestPlatform" version="14.0.0.1" targetFramework="net452" />
   <package id="xunit" version="2.4.0" targetFramework="net452" />
@@ -10,4 +26,4 @@
   <package id="xunit.extensibility.execution" version="2.4.0" targetFramework="net452" />
   <package id="xunit.runner.console" version="2.4.0" targetFramework="net452" developmentDependency="true" />
   <package id="xunit.runner.visualstudio" version="2.4.0" targetFramework="net452" developmentDependency="true" />
-</packages>
\ No newline at end of file
+</packages>
diff --git a/clicache/test2/xunit.runner.json b/clicache/test2/xunit.runner.json
index 20169fe..16ea334 100644
--- a/clicache/test2/xunit.runner.json
+++ b/clicache/test2/xunit.runner.json
@@ -1,4 +1,4 @@
-{
+{
   "methodDisplay": "classAndMethod",
   "parallelizeAssembly":  true,
   "parallelizeTestCollections": true 
diff --git a/cmake/ClangFormat.cmake b/cmake/ClangFormat.cmake
index fb93b79..b5c6f23 100644
--- a/cmake/ClangFormat.cmake
+++ b/cmake/ClangFormat.cmake
@@ -32,13 +32,14 @@
     set(_clangformat_SOURCES "")
     foreach (_source ${_target_SOURCES})
       if (NOT TARGET ${_source})
-        get_source_file_property(_source_LOCATION "${_source}" LOCATION)
         get_source_file_property(_source_GENERATED "${_source}" GENERATED)
-
-        if(_source_GENERATED)
+        string(REGEX MATCH "\\.(h(pp|xx)?|c(pp|xx)?)(\\..*)?$" _source_extension_match ${_source})
+        if(_source_GENERATED
+            OR _source_extension_match STREQUAL "")
           break()
         endif()
 
+        get_source_file_property(_source_LOCATION "${_source}" LOCATION)
         file(RELATIVE_PATH _source_RELATIVE_PATH ${_target_SOURCE_DIR} ${_source_LOCATION})
         string(REPLACE ".." "__" _format_file "${_target_BINARY_DIR}/CMakeFiles/${_clangformat}.dir/${_source_RELATIVE_PATH}.format")
         get_filename_component(_format_DIRECTORY ${_format_file} DIRECTORY)
diff --git a/cmake/FindGeode.cmake b/cmake/FindGeode.cmake
index 9e58cf7..3663596 100644
--- a/cmake/FindGeode.cmake
+++ b/cmake/FindGeode.cmake
@@ -35,21 +35,21 @@
 set(_GEODE_HINTS)
 if(_GEODE_ROOT)
   set(_GEODE_HINTS ${_GEODE_ROOT}/bin)
+else()
+  set(_GEODE_PATHS
+    /geode/bin
+    /apache-geode/bin
+    /usr/geode/bin
+    /usr/apache-geode/bin
+    /usr/local/geode/bin
+    /usr/local/apache-geode/bin
+    /opt/geode/bin
+    /opt/apache-geode/bin
+    /opt/local/geode/bin
+    /opt/local/apache-geode/bin
+  )
 endif()
 
-set(_GEODE_PATHS
-  /geode/bin
-  /apache-geode/bin
-  /usr/geode/bin
-  /usr/apache-geode/bin
-  /usr/local/geode/bin
-  /usr/local/apache-geode/bin
-  /opt/geode/bin
-  /opt/apache-geode/bin
-  /opt/local/geode/bin
-  /opt/local/apache-geode/bin
-)
-
 if(WIN32)
   set(_GEODE_NAMES gfsh.bat)
 else()
diff --git a/contrib/pdxautoserializer/src/CMakeLists.txt b/cmake/RatCheck.cmake
similarity index 61%
copy from contrib/pdxautoserializer/src/CMakeLists.txt
copy to cmake/RatCheck.cmake
index 895cd74..0590409 100644
--- a/contrib/pdxautoserializer/src/CMakeLists.txt
+++ b/cmake/RatCheck.cmake
@@ -4,24 +4,29 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(pdxautoserializer)
+#
 
-file(GLOB_RECURSE SOURCES "*.cpp")
-
-add_executable(pdxautoserializer ${SOURCES})
-target_link_libraries(pdxautoserializer
-  PRIVATE
-    antlr
+execute_process(
+  COMMAND ${Java_JAVA_EXECUTABLE} -jar ${Rat_JAR} -d . -E .ratignore >
+  OUTPUT_VARIABLE ratOutput
 )
 
-install(TARGETS pdxautoserializer DESTINATION bin)
-include_directories(${CMAKE_SOURCE_DIR}/../../src/cppcache/include)
+set(pass FALSE)
+if (ratOutput MATCHES "([0-9]+) Unknown Licenses")
+  set(unknownLicenses ${CMAKE_MATCH_1})
+  if (unknownLicenses GREATER 0)
+    message(SEND_ERROR "${ratOutput}")
+    message(FATAL_ERROR "${unknownLicenses} Unknown licenses detected.")
+  endif()
+else()
+  message(SEND_ERROR "${ratOutput}")
+  message(FATAL_ERROR "Unknown failure")
+endif()
diff --git a/contrib/pdxautoserializer/dependencies/CMakeLists.txt b/contrib/pdxautoserializer/dependencies/CMakeLists.txt
deleted file mode 100644
index cc79dad..0000000
--- a/contrib/pdxautoserializer/dependencies/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-cmake_minimum_required( VERSION 3.3 )
-project(geode-native-tools.dependencies)
-
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-
-find_program( PATCH NAMES gpatch patch )
-if ("PATCH-NOTFOUND" STREQUAL "${PATCH}")
-  message( FATAL_ERROR "patch not found." )
-endif()
-
-add_subdirectory(antlr)
diff --git a/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt b/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt
deleted file mode 100644
index 015f50a..0000000
--- a/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-cmake_minimum_required( VERSION 3.3 )
-project(antlr)
-
-set( ${PROJECT_NAME}_VERSION 2.7.7 )
-set( ${PROJECT_NAME}_SHA265 853aeb021aef7586bda29e74a6b03006bcb565a755c86b66032d8ec31b67dbb9 )
-set( ${PROJECT_NAME}_URL "http://www.antlr2.org/download/antlr-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-
-include(ExternalProject)
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-   UPDATE_COMMAND ""
-   CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-)
-
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
-
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} CMakeLists.txt
-    DEPENDEES patch
-    DEPENDERS configure
-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
-    COMMAND ${CMAKE_COMMAND} -E copy  ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
-)
-
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} patches
-    ALWAYS 0
-    DEPENDEES download
-    DEPENDERS patch
-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/patches
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/lib/cpp/antlr/CharScanner.hpp
-    WORKING_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}
-    COMMAND ${PATCH} -u -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patches
-)
-
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
-)
-target_link_libraries(${PROJECT_NAME} INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME}$<$<CONFIG:Debug>:d>${CMAKE_STATIC_LIBRARY_SUFFIX}
-)
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
diff --git a/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt.in b/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt.in
deleted file mode 100644
index 3a9c194..0000000
--- a/contrib/pdxautoserializer/dependencies/antlr/CMakeLists.txt.in
+++ /dev/null
@@ -1,129 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-cmake_minimum_required(VERSION 2.6)
-set(PROJECT_NAME antlr)
-
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-include(CheckCXXCompilerFlag)
-include(CheckCCompilerFlag)
-
-set(CMAKE_REQUIRED_LIBRARIES -m64)
-check_c_compiler_flag(-m64 CFLAGS_M64_ALLOWED)
-check_cxx_compiler_flag(-m64 CXXFLAGS_M64_ALLOWED)
-set(CMAKE_REQUIRED_LIBRARIES)
-
-if (CFLAGS_M64_ALLOWED AND CXXFLAGS_M64_ALLOWED)
-  set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -m64)
-  add_compile_options(-m64)
-endif()
-
-set(CMAKE_DEBUG_POSTFIX d)
-
-set(ANTLR_SRC
-		lib/cpp/src/ANTLRUtil.cpp
-		lib/cpp/src/ASTFactory.cpp
-		lib/cpp/src/ASTNULLType.cpp
-		lib/cpp/src/ASTRefCount.cpp
-		lib/cpp/src/BaseAST.cpp
-		lib/cpp/src/BitSet.cpp
-		lib/cpp/src/CharBuffer.cpp
-		lib/cpp/src/CharScanner.cpp
-		lib/cpp/src/CommonAST.cpp
-		lib/cpp/src/CommonASTWithHiddenTokens.cpp
-		lib/cpp/src/CommonHiddenStreamToken.cpp
-		lib/cpp/src/CommonToken.cpp
-		lib/cpp/src/InputBuffer.cpp
-		lib/cpp/src/LLkParser.cpp
-		lib/cpp/src/MismatchedCharException.cpp
-		lib/cpp/src/MismatchedTokenException.cpp
-		lib/cpp/src/NoViableAltException.cpp
-		lib/cpp/src/NoViableAltForCharException.cpp
-		lib/cpp/src/Parser.cpp
-		lib/cpp/src/RecognitionException.cpp
-		lib/cpp/src/String.cpp
-		lib/cpp/src/Token.cpp
-		lib/cpp/src/TokenBuffer.cpp
-		lib/cpp/src/TokenRefCount.cpp
-		lib/cpp/src/TokenStreamBasicFilter.cpp
-		lib/cpp/src/TokenStreamHiddenTokenFilter.cpp
-		lib/cpp/src/TokenStreamRewriteEngine.cpp
-		lib/cpp/src/TokenStreamSelector.cpp
-		lib/cpp/src/TreeParser.cpp
-		)
-
-set(ANTLR_HDR
-		lib/cpp/antlr/ANTLRException.hpp
-		lib/cpp/antlr/ANTLRUtil.hpp
-		lib/cpp/antlr/AST.hpp
-		lib/cpp/antlr/ASTArray.hpp
-		lib/cpp/antlr/ASTFactory.hpp
-		lib/cpp/antlr/ASTNULLType.hpp
-		lib/cpp/antlr/ASTPair.hpp
-		lib/cpp/antlr/ASTRefCount.hpp
-		lib/cpp/antlr/BaseAST.hpp
-		lib/cpp/antlr/BitSet.hpp
-		lib/cpp/antlr/CharBuffer.hpp
-		lib/cpp/antlr/CharInputBuffer.hpp
-		lib/cpp/antlr/CharScanner.hpp
-		lib/cpp/antlr/CharStreamException.hpp
-		lib/cpp/antlr/CharStreamIOException.hpp
-		lib/cpp/antlr/CircularQueue.hpp
-		lib/cpp/antlr/CommonAST.hpp
-		lib/cpp/antlr/CommonASTWithHiddenTokens.hpp
-		lib/cpp/antlr/CommonHiddenStreamToken.hpp
-		lib/cpp/antlr/CommonToken.hpp
-		lib/cpp/antlr/IOException.hpp
-		lib/cpp/antlr/InputBuffer.hpp
-		lib/cpp/antlr/LLkParser.hpp
-		lib/cpp/antlr/LexerSharedInputState.hpp
-		lib/cpp/antlr/MismatchedCharException.hpp
-		lib/cpp/antlr/MismatchedTokenException.hpp
-		lib/cpp/antlr/NoViableAltException.hpp
-		lib/cpp/antlr/NoViableAltForCharException.hpp
-		lib/cpp/antlr/Parser.hpp
-		lib/cpp/antlr/ParserSharedInputState.hpp
-		lib/cpp/antlr/RecognitionException.hpp
-		lib/cpp/antlr/RefCount.hpp
-		lib/cpp/antlr/SemanticException.hpp
-		lib/cpp/antlr/String.hpp
-		lib/cpp/antlr/Token.hpp
-		lib/cpp/antlr/TokenBuffer.hpp
-		lib/cpp/antlr/TokenRefCount.hpp
-		lib/cpp/antlr/TokenStream.hpp
-		lib/cpp/antlr/TokenStreamBasicFilter.hpp
-		lib/cpp/antlr/TokenStreamException.hpp
-		lib/cpp/antlr/TokenStreamHiddenTokenFilter.hpp
-		lib/cpp/antlr/TokenStreamIOException.hpp
-		lib/cpp/antlr/TokenStreamRecognitionException.hpp
-		lib/cpp/antlr/TokenStreamRetryException.hpp
-		lib/cpp/antlr/TokenStreamRewriteEngine.hpp
-		lib/cpp/antlr/TokenStreamSelector.hpp
-		lib/cpp/antlr/TokenWithIndex.hpp
-		lib/cpp/antlr/TreeParser.hpp
-		lib/cpp/antlr/TreeParserSharedInputState.hpp
-		lib/cpp/antlr/config.hpp
-		)
-
-include_directories(lib/cpp)
-
-add_library(antlr ${ANTLR_SRC} ${ANTLR_HDR})
-
-install(TARGETS antlr
-        RUNTIME DESTINATION bin
-        ARCHIVE DESTINATION lib
-        LIBRARY DESTINATION lib )
-install(FILES ${ANTLR_HDR} DESTINATION include/antlr)
diff --git a/contrib/pdxautoserializer/dependencies/antlr/patches b/contrib/pdxautoserializer/dependencies/antlr/patches
deleted file mode 100644
index ee7a8fa..0000000
--- a/contrib/pdxautoserializer/dependencies/antlr/patches
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -ru a/lib/cpp/antlr/CharScanner.hpp b/lib/cpp/antlr/CharScanner.hpp
---- a/lib/cpp/antlr/CharScanner.hpp	2006-11-01 13:37:17.000000000 -0800
-+++ b/lib/cpp/antlr/CharScanner.hpp	2015-12-22 16:09:21.979422041 -0800
-@@ -22,6 +22,9 @@
- // VC6 seems to need this
- // note that this is not a standard C++ include file.
- # include <stdio.h>
-+#else
-+#include <cstring>
-+#include <cstdio>
- #endif
- 
- #include <antlr/TokenStream.hpp>
-
diff --git a/contrib/pdxautoserializer/src/ASBuiltins.hpp b/contrib/pdxautoserializer/src/ASBuiltins.hpp
deleted file mode 100644
index 3fa34de..0000000
--- a/contrib/pdxautoserializer/src/ASBuiltins.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_ASBUILTINS_H_
-#define GEODE_PDXAUTOSERIALIZER_ASBUILTINS_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "DataOutput.hpp"
-#include "DataInput.hpp"
-#include "Serializer.hpp"
-#include <string>
-#include <vector>
-#include <map>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace serializer {
-/** write an <code>std::string</code> object to <code>DataOutput</code> */
-inline void writeObject(apache::geode::client::DataOutput& output,
-                        const std::string& value) {
-  output.writeASCIIHuge(value.data(), value.length());
-}
-
-/** read an <code>std::string</code> object from <code>DataInput</code> */
-inline void readObject(apache::geode::client::DataInput& input,
-                       std::string& value) {
-  char* str;
-  uint32_t len;
-  input.readASCIIHuge(&str, &len);
-  value.assign(str, len);
-  input.freeUTFMemory(str);
-}
-
-/** write an <code>std::wstring</code> object to <code>DataOutput</code> */
-inline void writeObject(apache::geode::client::DataOutput& output,
-                        const std::wstring& value) {
-  output.writeUTFHuge(value.data(), value.length());
-}
-
-/** read an <code>std::wstring</code> object from <code>DataInput</code> */
-inline void readObject(apache::geode::client::DataInput& input,
-                       std::wstring& value) {
-  wchar_t* str;
-  uint32_t len;
-  input.readUTFHuge(&str, &len);
-  value.assign(str, len);
-  input.freeUTFMemory(str);
-}
-
-/** write an <code>std::vector</code> object to <code>DataOutput</code> */
-template <typename TObj>
-inline void writeObject(apache::geode::client::DataOutput& output,
-                        const std::vector<TObj>& value) {
-  output.writeInt(value.size());
-  for (std::vector<TObj>::const_iterator valIterator = value.begin();
-       valIterator != value.end(); ++valIterator) {
-    writeObject(output, *valIterator);
-  }
-}
-
-/** read an <code>std::vector</code> object from <code>DataInput</code> */
-template <typename TObj>
-inline void readObject(apache::geode::client::DataInput& input,
-                       std::vector<TObj>& value) {
-  std::vector<TObj>::size_type len;
-  input.readInt(&len);
-  if (len > 0) {
-    TObj obj;
-    for (std::vector<TObj>::size_type index = 0; index < len; ++index) {
-      readObject(input, obj);
-      value.push_back(obj);
-    }
-  }
-}
-
-/** write an <code>std::map</code> object to <code>DataOutput</code> */
-template <typename TKey, typename TVal>
-inline void writeObject(apache::geode::client::DataOutput& output,
-                        const std::map<TKey, TVal>& value) {
-  output.writeInt(value.size());
-  for (std::map<TKey, TVal>::const_iterator valIterator = value.begin();
-       valIterator != value.end(); ++valIterator) {
-    writeObject(output, valIterator->first);
-    writeObject(output, valIterator->second);
-  }
-}
-
-/** read an <code>std::map</code> object from <code>DataInput</code> */
-template <typename TKey, typename TVal>
-inline void readObject(apache::geode::client::DataInput& input,
-                       std::map<TKey, TVal>& value) {
-  std::map<TKey, TVal>::size_type len;
-  input.readInt(&len);
-  if (len > 0) {
-    TKey key;
-    TVal val;
-    for (std::vector<TObj>::size_type index = 0; index < len; ++index) {
-      readObject(input, key);
-      readObject(input, val);
-      value[key] = val;
-    }
-  }
-}
-}
-}
-}
-}
-
-#endif  // GEODE_PDXAUTOSERIALIZER_ASBUILTINS_H_
diff --git a/contrib/pdxautoserializer/src/CodeGenerator.hpp b/contrib/pdxautoserializer/src/CodeGenerator.hpp
deleted file mode 100644
index 6acc499..0000000
--- a/contrib/pdxautoserializer/src/CodeGenerator.hpp
+++ /dev/null
@@ -1,177 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_CODEGENERATOR_H_
-#define GEODE_PDXAUTOSERIALIZER_CODEGENERATOR_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "base_types.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * Abstract class that defines the interface of the auto-serializer
- * code generator backends.
- */
-class CodeGenerator {
- public:
-  /**
-   * Enumerates the various methods that can be generated.
-   */
-  class Method {
-   public:
-    enum Type {
-      /** Indicates the toData() method. */
-      TODATA,
-
-      /** Indicates the fromData() method. */
-      FROMDATA,
-
-      ///** Indicates the objectSize() method. */
-      // OBJECTSIZE,
-
-      ///** Indicates the equals/==() method. */
-      // EQUALS,
-
-      ///** Indicates the hashCode() method. */
-      // HASHCODE,
-
-      /**
-       * Indicates generation of the complete class including all
-       * of its fields and getters/setters for those.
-       */
-      CLASS
-
-    };
-  };
-
-  // Pure virtual methods defining the interface.
-
-  /**
-   * Get a list of options and usage for the code generator.
-   *
-   * @param options Output parameter for options along-with their usage.
-   */
-  virtual void getOptions(OptionMap& options) const = 0;
-
-  /**
-   * Initialize the code generator with the given properties.
-   *
-   * @param properties The set of property/value pairs provided by the
-   *                   user. Implementations should modify this map so
-   *                   as to remove the properties used by the
-   *                   implementation. This should also match the usage
-   *                   as provided by <code>getOptions</code> method.
-   */
-  virtual void init(PropertyMap& properties) = 0;
-
-  /**
-   * Initialize the code generator for the given class.
-   *
-   * @param classInfo <code>TypeInfo</code> of the class for which
-   *                  <code>toData</code> and <code>fromData</code>
-   *                  methods are to be generated.
-   */
-  virtual void initClass(const TypeInfo& classInfo) = 0;
-
-  /**
-   * Add any references to the generated code (e.g headers).
-   *
-   * @param references A vector of reference names.
-   */
-  virtual void addReferences(const ReferenceVector& references) = 0;
-
-  virtual void addFileHeader(int, char**) = 0;
-
-  /**
-   * Generate code to mark the start of the class in the given namespaces.
-   *
-   * @param members Vector containing information of the members of the
-   *                class that need to be auto-serialized.
-   */
-  virtual void startClass(const VariableVector& members) = 0;
-
-  /**
-   * Start of code generation for a method.
-   *
-   * @param type Type of the method to be generated.
-   * @param varName Name of the variable (if any) used by the method
-   *                e.g. <code>DataOutput</code> variable for toData().
-   */
-  virtual void startMethod(const Method::Type type, const std::string& varName,
-                           const std::string& methodPrefix) = 0;
-
-  // Ticket #905 Changes starts here
-  virtual void addTryBlockStart(const Method::Type type) = 0;
-  virtual void finishTryBlock(const Method::Type type) = 0;
-  // Ticket #905 Changes ends here
-  /**
-   * Generate the method fragment for a given member of the class.
-   *
-   * @param type Type of the method to be generated.
-   * @param varName Name of the variable (if any) used by the method
-   *                e.g. <code>DataOutput</code> variable for toData().
-   * @param var Information of the member variable of the class.
-   */
-  virtual void genMethod(const Method::Type type, const std::string& varName,
-                         const VariableInfo& var) = 0;
-
-  /**
-   * End of code generation for a method.
-   *
-   * @param type Type of the method to be generated.
-   * @param varName Name of the variable (if any) used by the method
-   *                e.g. <code>DataOutput</code> variable for toData().
-   */
-  virtual void endMethod(const Method::Type type,
-                         const std::string& outputVarName) = 0;
-
-  /**
-   * Generate the code for typeId function of geode
-   * Serializable/DataSerializable interface.
-   */
-  virtual void genTypeId(const std::string& methodPrefix) = 0;
-
-  virtual void genClassNameMethod(std::map<std::string, std::string>&,
-                                  const std::string& methodPrefix) = 0;
-
-  virtual void genCreateDeserializable(const std::string& methodPrefix) = 0;
-
-  /**
-   * Generate code to mark the end of the class in the given namespaces.
-   */
-  virtual void endClass() = 0;
-
-  /**
-   * Any cleanup that may be required in case of abnormal termination.
-   */
-  virtual void cleanup() = 0;
-
-  /** virtual destructor. */
-  virtual ~CodeGenerator() {}
-
-  // End pure virtual methods
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_CODEGENERATOR_H_
diff --git a/contrib/pdxautoserializer/src/CodeGeneratorFactory.cpp b/contrib/pdxautoserializer/src/CodeGeneratorFactory.cpp
deleted file mode 100644
index 36d32bc..0000000
--- a/contrib/pdxautoserializer/src/CodeGeneratorFactory.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "base_types.hpp"
-#include "CodeGeneratorFactory.hpp"
-#include "impl/CPPCodeGenerator.hpp"
-//#include "impl/CPPCLICodeGenerator.hpp"
-//#include "impl/CSharpCodeGenerator.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-CodeGeneratorFactory::CodeGeneratorFactory() {
-  // Register the available code generators here.
-  m_generatorMap["C++"] = CPPCodeGenerator::create;
-  // m_generatorMap["C++/CLI"] = CPPCLICodeGenerator::create;
-  // m_generatorMap["C#"] = CSharpCodeGenerator::create;
-}
-
-CodeGenerator* CodeGeneratorFactory::getInstance(
-    const std::string& generatorName) const {
-  std::map<std::string, ASCodeGeneratorFn>::const_iterator mapIterator =
-      m_generatorMap.find(generatorName);
-  if (mapIterator != m_generatorMap.end()) {
-    return mapIterator->second();
-  }
-  return NULL;
-}
-
-StringVector CodeGeneratorFactory::getGenerators() const {
-  StringVector generatorList;
-
-  for (std::map<std::string, ASCodeGeneratorFn>::const_iterator
-           generatorIterator = m_generatorMap.begin();
-       generatorIterator != m_generatorMap.end(); ++generatorIterator) {
-    generatorList.push_back(generatorIterator->first);
-  }
-  return generatorList;
-}
-
-CodeGeneratorFactory::~CodeGeneratorFactory() { m_generatorMap.clear(); }
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/CodeGeneratorFactory.hpp b/contrib/pdxautoserializer/src/CodeGeneratorFactory.hpp
deleted file mode 100644
index f4fc35c..0000000
--- a/contrib/pdxautoserializer/src/CodeGeneratorFactory.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_CODEGENERATORFACTORY_H_
-#define GEODE_PDXAUTOSERIALIZER_CODEGENERATORFACTORY_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "CodeGenerator.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * Defines a function with no arguments returning a pointer to
- * <code>CodeGenerator</code> object.
- */
-typedef CodeGenerator* (*ASCodeGeneratorFn)(void);
-
-/**
- * Factory class to obtain instances of <code>CodeGenerator</code>
- * implementations.
- */
-class CodeGeneratorFactory {
- public:
-  /**
-   * Default constructor that registers all the available
-   * <code>CodeGenerator</code> implementations.
-   */
-  CodeGeneratorFactory();
-
-  /**
-   * Get an instance of an <code>CodeGenerator</code> using the name
-   * of the code generator.
-   *
-   * @param generatorName The name of the code generator backend.
-   * @return An instance of <code>CodeGenerator</code>.
-   */
-  CodeGenerator* getInstance(const std::string& generatorName) const;
-
-  /** Get a list of all registered code generator backends. */
-  StringVector getGenerators() const;
-
-  /** Virtual destructor. */
-  virtual ~CodeGeneratorFactory();
-
- private:
-  /**
-   * The map containing the mappings from the names of code generators
-   * to their factory functions.
-   */
-  std::map<std::string, ASCodeGeneratorFn> m_generatorMap;
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_CODEGENERATORFACTORY_H_
diff --git a/contrib/pdxautoserializer/src/Doxyfile b/contrib/pdxautoserializer/src/Doxyfile
deleted file mode 100755
index d686d6c..0000000
--- a/contrib/pdxautoserializer/src/Doxyfile
+++ /dev/null
@@ -1,1268 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Doxyfile 1.5.0
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME = gfautoserialize
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER = 
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = doc
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# This tag can be used to specify the encoding used in the generated output. 
-# The encoding is not always determined by the language that is chosen, 
-# but also whether or not the output is meant for Windows or non-Windows users. 
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
-# forces the Windows encoding (this is the default for the Windows binary), 
-# whereas setting the tag to NO uses a Unix-style encoding (the default for 
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF = 
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH = 
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like the Qt-style comments (thus requiring an 
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 2
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
-# include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = YES
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = YES
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST = YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from the 
-# version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER = 
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
-# documentation.
-
-WARN_NO_PARAMDOC = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT = 
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
-FILE_PATTERNS = 
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE = 
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
-# from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
-# ignored.
-
-INPUT_FILTER = 
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis.  Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match.  The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
-# is applied to all files.
-
-FILTER_PATTERNS = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
-# will need version 4.8.6 or higher.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT = .
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER = 
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET = 
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
-# instead of the = operator.
-
-PREDEFINED = 
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
-# powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
-# generate a call dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable call graphs for selected 
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
-# generate a caller dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable caller graphs for selected 
-# functions only using the \callergraph command.
-
-CALLER_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS = 
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that a graph may be further truncated if the graph's 
-# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
-# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
-# the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, which results in a white background. 
-# Warning: Depending on the platform used, enabling this option may lead to 
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
-# read).
-
-DOT_TRANSPARENT = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
diff --git a/contrib/pdxautoserializer/src/InputParser.cpp b/contrib/pdxautoserializer/src/InputParser.cpp
deleted file mode 100644
index 67d2e83..0000000
--- a/contrib/pdxautoserializer/src/InputParser.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "base_types.hpp"
-#include "InputParser.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-// ClassInfo method definitions
-
-void ClassInfo::init(InputParser* parser) { m_parser = parser; }
-
-// InputParser method definitions
-
-bool InputParser::select(const std::string& className) {
-  ASClassFlagMap::iterator findClass = m_classes.find(className);
-  if (findClass != m_classes.end()) {
-    findClass->second.second = true;
-    return true;
-  }
-  return false;
-}
-
-void InputParser::getSelectedClasses(ASClassVector& classes) const {
-  for (ASClassFlagMap::const_iterator mapIterator = m_classes.begin();
-       mapIterator != m_classes.end(); ++mapIterator) {
-    if (mapIterator->second.second) {
-      classes.push_back(mapIterator->second.first);
-    }
-  }
-}
-
-bool InputParser::contains(const std::string& className) const {
-  ASClassFlagMap::const_iterator findClass = m_classes.find(className);
-  return (findClass != m_classes.end());
-}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/InputParser.hpp b/contrib/pdxautoserializer/src/InputParser.hpp
deleted file mode 100644
index bfb36db..0000000
--- a/contrib/pdxautoserializer/src/InputParser.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_
-#define GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "base_types.hpp"
-#include "CodeGenerator.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-// Forward declaration.
-class InputParser;
-
-/**
- * This class describes the interface to be implemented by the
- * front-end parsers to represent each class in the resource.
- */
-class ClassInfo {
- public:
-  /**
-   * Destruct the class.
-   */
-  virtual ~ClassInfo() {}
-
-  /**
-   * Initialize with a handle to <code>InputParser</code>.
-   *
-   * @param parser Pointer to the <code>InputParser</code> object.
-   */
-  virtual void init(InputParser* parser);
-
-  /**
-   * Get the name of the class.
-   *
-   * @return The name of this class.
-   */
-  virtual std::string getName() const = 0;
-
-  /**
-   * Get the set of references required for the class.
-   *
-   * @param references The vector of references.
-   */
-  virtual void getReferences(ReferenceVector& references) const = 0;
-
-  /**
-   * Get the class information (with the namespace information) for this
-   * class.
-   *
-   * @param classType The <code>TypeInfo</code> for the class.
-   */
-  virtual void getTypeInfo(TypeInfo& classType) const = 0;
-
-  /**
-   * Get the list of members of this class to be serialized/deserialized.
-   *
-   * @param members The vector of variables that contains the list
-   *                of variables that need to be serialized/deserialized.
-   */
-  virtual void getMembers(VariableVector& members) const = 0;
-
-  virtual std::string getMethodPrefix() const = 0;
-
- protected:
-  /**
-   * The <code>InputParser</code> object for which classes are being
-   * extracted.
-   */
-  InputParser* m_parser;
-};
-
-/** Shorthand for a vector of <code>ClassInfo</code> objects. */
-typedef std::vector<const ClassInfo*> ASClassVector;
-
-/**
- * Shorthand for a map of class names to corresponding
- * <code>ClassInfo</code> objects.
- */
-typedef std::map<std::string, const ClassInfo*> ASClassMap;
-
-/**
- * Shorthand for a map of class names to corresponding
- * <code>ClassInfo</code> objects with a flag for selection.
- */
-typedef std::map<std::string, std::pair<ClassInfo*, bool> > ASClassFlagMap;
-
-/**
- * This class describes the interface to be implemented by front-end
- * parsers.
- */
-class InputParser {
- public:
-  /**
-   * Destruct the parser.
-   */
-  virtual ~InputParser() {}
-
-  /**
-   * Get a list of options and usage for the parser.
-   *
-   * @param options Output parameter for options along-with their usage.
-   */
-  virtual void getOptions(OptionMap& options) const = 0;
-
-  /**
-   * Initialize the parser with the given properties.
-   *
-   * @param properties The set of properties for the resource as given
-   *                   on the command-line. The function should modify
-   *                   this map so as to remove the properties used by
-   *                   the implementation. This should also match the
-   *                   usage as provided by
-   *                   <code>InputParser::getOptions</code> method.
-   */
-  virtual void init(PropertyMap& properties) = 0;
-
-  /**
-   * Select some or all classes in the given resources.
-   *
-   * @param resources The resources to parse.
-   * @param classNames The names of the classes which constitute the
-   *                   initial selection as specified by the user.
-   *                   If this is empty then all the classes are marked
-   *                   as selected.
-   */
-  virtual void selectClasses(const StringVector& resources,
-                             const StringVector& classNames) = 0;
-
-  /**
-   * Add the given class to the current selection of classes.
-   *
-   * @param className The name of the new class to be added.
-   * @return True if the given class name exists in the global list.
-   */
-  virtual bool select(const std::string& className);
-
-  /**
-   * Search the given class name in the global list of classes.
-   *
-   * @param className The name of the class to search.
-   * @return True if the given class name exists in the global list.
-   */
-  virtual bool contains(const std::string& className) const;
-
-  /**
-   * Get the selected list of classes.
-   *
-   * @param classes Output parameter containing the vector of
-   *                selected classes.
-   */
-  virtual void getSelectedClasses(ASClassVector& classes) const;
-
- protected:
-  /**
-   * Stores the set of all the classes with the classes selected so far
-   * as marked selected.
-   */
-  ASClassFlagMap m_classes;
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_
diff --git a/contrib/pdxautoserializer/src/InputParserFactory.cpp b/contrib/pdxautoserializer/src/InputParserFactory.cpp
deleted file mode 100644
index a9dea87..0000000
--- a/contrib/pdxautoserializer/src/InputParserFactory.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "base_types.hpp"
-#include "InputParserFactory.hpp"
-#include <stdio.h>
-#ifndef WIN32
-#include <strings.h>
-#endif
-#include "impl/CPPParser/CPPInputParser.hpp"
-#ifdef GEMFIRE_CLR
-#include "impl/DotNetParser.hpp"
-#endif
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-InputParserFactory::InputParserFactory() {
-  // Register the available parsers here.
-  m_parserMap["C++"] = CPPInputParser::create;
-#ifdef GEMFIRE_CLR
-  m_parserMap[".NET"] = DotNetParser::create;
-#endif  // GEMFIRE_CLR
-}
-
-InputParser* InputParserFactory::getInstance(
-    const std::string& parserName) const {
-  std::map<std::string, InputParserFn>::const_iterator mapIterator =
-      m_parserMap.find(parserName);
-  if (mapIterator != m_parserMap.end()) {
-    return mapIterator->second();
-  }
-  return NULL;
-}
-
-StringVector InputParserFactory::getParsers() const {
-  StringVector parserList;
-
-  for (std::map<std::string, InputParserFn>::const_iterator parserIterator =
-           m_parserMap.begin();
-       parserIterator != m_parserMap.end(); ++parserIterator) {
-    parserList.push_back(parserIterator->first);
-  }
-  return parserList;
-}
-
-InputParserFactory::~InputParserFactory() { m_parserMap.clear(); }
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/InputParserFactory.hpp b/contrib/pdxautoserializer/src/InputParserFactory.hpp
deleted file mode 100644
index 75a3c94..0000000
--- a/contrib/pdxautoserializer/src/InputParserFactory.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_INPUTPARSERFACTORY_H_
-#define GEODE_PDXAUTOSERIALIZER_INPUTPARSERFACTORY_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "InputParser.hpp"
-#include <utility>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * Defines a function returning a pointer to an
- * <code>InputParser</code> object.
- *
- * @return The <code>InputParser</code> object.
- */
-typedef InputParser* (*InputParserFn)(void);
-
-/**
- * Factory class to obtain instances of <code>InputParser</code>
- * implementations.
- */
-class InputParserFactory {
- public:
-  /**
-   * Default constructor that registers all the available
-   * <code>InputParser</code> implementations.
-   */
-  InputParserFactory();
-
-  /**
-   * Get an instance of an <code>InputParser</code> using name of a parser.
-   *
-   * @param parserName The name of the parser frontend.
-   * @return An instance of <code>InputParser</code>.
-   */
-  InputParser* getInstance(const std::string& parserName) const;
-
-  /** Get a list of all registered parser frontends. */
-  StringVector getParsers() const;
-
-  /** Virtual destructor. */
-  virtual ~InputParserFactory();
-
- private:
-  /**
-   * The map containing the mappings from the names of parsers to their
-   * factory functions.
-   */
-  std::map<std::string, InputParserFn> m_parserMap;
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_INPUTPARSERFACTORY_H_
diff --git a/contrib/pdxautoserializer/src/OutputFormatter.cpp b/contrib/pdxautoserializer/src/OutputFormatter.cpp
deleted file mode 100644
index a733389..0000000
--- a/contrib/pdxautoserializer/src/OutputFormatter.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "OutputFormatter.hpp"
-#include <cstring>
-#include <cerrno>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-// OutputFormatStreamBuf method definitions
-
-OutputFormatStreamBuf::OutputFormatStreamBuf()
-    : m_buf(NULL),
-      m_indentSize(0),
-      m_indentLevel(0),
-      m_newLine(true),
-      m_openBrace(false) {
-  std::streambuf::setp(NULL, NULL);
-  std::streambuf::setg(NULL, NULL, NULL);
-}
-
-void OutputFormatStreamBuf::init(std::streambuf* buf, char indentChar,
-                                 int indentSize) {
-  m_buf = buf;
-  m_indentChar = indentChar;
-  m_indentSize = indentSize;
-}
-
-void OutputFormatStreamBuf::setIndentChar(char indentChar) {
-  m_indentChar = indentChar;
-}
-
-void OutputFormatStreamBuf::setIndentSize(int indentSize) {
-  m_indentSize = indentSize;
-}
-
-void OutputFormatStreamBuf::increaseIndent() { ++m_indentLevel; }
-
-void OutputFormatStreamBuf::decreaseIndent() { --m_indentLevel; }
-
-int OutputFormatStreamBuf::getIndent() const { return m_indentLevel; }
-
-void OutputFormatStreamBuf::setIndent(int indentLevel) {
-  m_indentLevel = indentLevel;
-}
-
-int OutputFormatStreamBuf::overflow(int c) {
-  if (c != EOF) {
-    if (m_newLine && c != '\n') {
-      if (c != '#') {
-        if (c == '}') {
-          --m_indentLevel;
-        }
-        for (int i = 0; i < m_indentLevel * m_indentSize; ++i) {
-          if (m_buf->sputc(m_indentChar) == EOF) {
-            return EOF;
-          }
-        }
-      }
-      m_newLine = false;
-    }
-    if (c == '\n') {
-      m_newLine = true;
-      if (m_openBrace) {
-        ++m_indentLevel;
-      }
-    }
-    if (c == '{') {
-      m_openBrace = true;
-    } else {
-      m_openBrace = false;
-    }
-    return m_buf->sputc(c);
-  }
-  return 0;
-}
-
-int OutputFormatStreamBuf::sync() { return m_buf->pubsync(); }
-
-OutputFormatStreamBuf::~OutputFormatStreamBuf() {}
-
-// OutputFormatter method definitions
-
-OutputFormatter::OutputFormatter()
-    : std::ostream(NULL), m_ofstream(), m_streamBuf() {
-  m_streamBuf.init(m_ofstream.rdbuf(), DefaultIndentChar, DefaultIndentSize);
-  std::ostream::init(&m_streamBuf);
-}
-
-void OutputFormatter::open(const std::string& fileName, ios_base::openmode mode,
-                           char indentChar, int indentSize) {
-  m_fileName = fileName;
-  m_ofstream.open(fileName.c_str(), mode);
-  if (!m_ofstream) {
-    throw std::ios_base::failure(std::strerror(errno));
-  }
-  m_streamBuf.setIndentChar(indentChar);
-  m_streamBuf.setIndentSize(indentSize);
-}
-
-void OutputFormatter::setIndentChar(char indentChar) {
-  m_streamBuf.setIndentChar(indentChar);
-}
-
-void OutputFormatter::setIndentSize(int indentSize) {
-  m_streamBuf.setIndentSize(indentSize);
-}
-
-void OutputFormatter::increaseIndent() { m_streamBuf.increaseIndent(); }
-
-void OutputFormatter::decreaseIndent() { m_streamBuf.decreaseIndent(); }
-
-int OutputFormatter::getIndent() const { return m_streamBuf.getIndent(); }
-
-void OutputFormatter::setIndent(int indentLevel) {
-  m_streamBuf.setIndent(indentLevel);
-}
-
-std::string OutputFormatter::getFileName() const { return m_fileName; }
-
-void OutputFormatter::flush() {
-  std::ostream::flush();
-  m_ofstream.flush();
-}
-
-void OutputFormatter::close() {
-  std::ostream::flush();
-  m_ofstream.close();
-}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/OutputFormatter.hpp b/contrib/pdxautoserializer/src/OutputFormatter.hpp
deleted file mode 100644
index 244973f..0000000
--- a/contrib/pdxautoserializer/src/OutputFormatter.hpp
+++ /dev/null
@@ -1,230 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_OUTPUTFORMATTER_H_
-#define GEODE_PDXAUTOSERIALIZER_OUTPUTFORMATTER_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ostream>
-#include <streambuf>
-#include <fstream>
-#include <string>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/** The default character to use for indentation. */
-const char DefaultIndentChar = ' ';
-
-/** The default indentation size. */
-const int DefaultIndentSize = 2;
-
-/**
- * A<code>std::streambuf</code> class that formats the buffer with
- * appropriate indentation.
- *
- * It derives from the standard <code>std::streambuf</code> class and
- * turns off buffering while delegating the actual task to another
- * <code>std::streambuf</code> contained in it. This is required so that
- * the <code>OutputFormatStreamBuf::overflow</code> method is called for
- * every write.
- */
-class OutputFormatStreamBuf : public std::streambuf {
- public:
-  /** Default constructor. */
-  OutputFormatStreamBuf();
-
-  /**
-   * Initialize the buffer with the given <code>std::streambuf</code>
-   * and given indentation character, indentation size.
-   *
-   * @param buf The actual <code>std::streambuf</code> to be used for
-   *            buffering.
-   * @param indentChar The character to use for indentation of each line.
-   * @param indentSize The size for each level of indentation.
-   */
-  void init(std::streambuf* buf, char indentChar, int indentSize);
-
-  /**
-   * Change the indentation character.
-   *
-   * @param indentChar The new indentation character.
-   */
-  void setIndentChar(char indentChar);
-
-  /**
-   * Change the number of characters for each indentation level.
-   *
-   * @param indentSize The new size for indentation.
-   */
-  void setIndentSize(int indentSize);
-
-  /** Increase the current indentation level by one. */
-  void increaseIndent();
-
-  /** Decrease the current indentation level by one. */
-  void decreaseIndent();
-
-  /**
-   * Get the current indentation level.
-   *
-   * @return The current indentation level.
-   */
-  virtual int getIndent() const;
-
-  /**
-   * Set the current indentation level.
-   *
-   * @param indentLevel The indentation level to set.
-   */
-  virtual void setIndent(int indentLevel);
-
-  /** Virtual destructor. */
-  virtual ~OutputFormatStreamBuf();
-
- protected:
-  /**
-   * The overriden <code>std::streambuf::overflow</code> method that
-   * inserts the indentation characters when starting a new line.
-   *
-   * Note that buffering for this <code>streambuf</code> is turned off so
-   * that this is called for every write and the contained
-   * <code>m_buf</code> is the one actually used.
-   *
-   * @param c The character to be written.
-   */
-  virtual int overflow(int c);
-
-  /** Overriden <code>std::streambuf::sync</code> method. */
-  virtual int sync();
-
-  /**
-   * The contained <code>streambuf</code> that does the actual work of
-   * buffering/writing.
-   */
-  std::streambuf* m_buf;
-
-  /** The indentation character to be used. */
-  char m_indentChar;
-
-  /** The size of indentation in each level. */
-  int m_indentSize;
-
-  /** The current indentation level. */
-  int m_indentLevel;
-
-  /** True when a newline has just been encountered. */
-  bool m_newLine;
-
-  /** True when an opening brace has just been encountered. */
-  bool m_openBrace;
-};
-
-/**
- * A<code>std::ostream</code> class that writes the output to a given file
- * and formats the output with appropriate indentation.
- */
-class OutputFormatter : public std::ostream {
- public:
-  /** The default constructor */
-  OutputFormatter();
-
-  /**
-   * Open a given file for writing (just like <code>std::ofstream</code>
-   * in the given mode and use the provided indentation character and size.
-   *
-   * @param fileName Name of the file to open.
-   * @param mode The mode to use when opening the file -- default is to
-   *             truncate the file and open in write mode.
-   * @param indentChar The character to use for indentation.
-   * @param indentSize The number of characters to use for indentation.
-   */
-  virtual void open(const std::string& fileName,
-                    ios_base::openmode mode = ios_base::out | ios_base::trunc,
-                    char indentChar = DefaultIndentChar,
-                    int indentSize = DefaultIndentSize);
-
-  /**
-   * Change the indentation character.
-   *
-   * @param indentChar The new indentation character.
-   */
-  virtual void setIndentChar(char indentChar);
-
-  /**
-   * Change the number of characters for each indentation level.
-   *
-   * @param indentSize The new size for indentation.
-   */
-  virtual void setIndentSize(int indentSize);
-
-  /** Increase the current indentation level by one. */
-  virtual void increaseIndent();
-
-  /** Decrease the current indentation level by one. */
-  virtual void decreaseIndent();
-
-  /**
-   * Get the current indentation level.
-   *
-   * @return The current indentation level.
-   */
-  virtual int getIndent() const;
-
-  /**
-   * Set the current indentation level.
-   *
-   * @param indentLevel The indentation level to set.
-   */
-  virtual void setIndent(int indentLevel);
-
-  /**
-   * Get the underlying name of output file.
-   *
-   * @return The path of the output file.
-   */
-  std::string getFileName() const;
-
-  /** Overrides the <code>std::ostream::flush</code> method to flush the
-   * output stream to the file.
-   */
-  virtual void flush();
-
-  /**
-   * Overrides the <code>std::ostream::close</code> method to close the
-   * underlying stream and file.
-   */
-  virtual void close();
-
- protected:
-  /** The underlying output file stream object. */
-  std::ofstream m_ofstream;
-
-  /** The name of the output file. */
-  std::string m_fileName;
-
-  /** The formatter to use for formatting the output. */
-  OutputFormatStreamBuf m_streamBuf;
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_OUTPUTFORMATTER_H_
diff --git a/contrib/pdxautoserializer/src/base_types.hpp b/contrib/pdxautoserializer/src/base_types.hpp
deleted file mode 100644
index 09f8b54..0000000
--- a/contrib/pdxautoserializer/src/base_types.hpp
+++ /dev/null
@@ -1,256 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_BASE_TYPES_H_
-#define GEODE_PDXAUTOSERIALIZER_BASE_TYPES_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <string>
-#include <vector>
-#include <set>
-#include <map>
-#include <cassert>
-#include <stdexcept>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/** Shorthand for vector of strings. */
-typedef std::vector<std::string> StringVector;
-
-/** Shorthand for set of strings. */
-typedef std::set<std::string> StringSet;
-
-/**
- * Shorthand for the <code>std::map</code> containing property
- * key-value pairs.
- */
-typedef std::map<std::string, StringVector> PropertyMap;
-
-/**
- * Shorthand for the <code>std::map</code> containing string
- * key-value pairs.
- */
-typedef std::map<std::string, std::string> StringMap;
-
-/**
- * Shorthand for the <code>std::map</code> containing string
- * keys mapped to usage string and boolean indicator of option
- * requiring a value.
- */
-typedef std::map<std::string, std::pair<bool, std::string> > OptionMap;
-
-/** Shorthand for iterator of vector of strings. */
-typedef std::vector<std::string>::const_iterator StringVectorIterator;
-
-/** Shorthand for iterator of set of strings. */
-typedef std::set<std::string>::const_iterator StringSetIterator;
-
-/**
- * Encapsulates different kinds of references (headers/dlls etc).
- */
-class Reference {
- public:
-  enum Kind {
-    /** Indicates a C++ header file. */
-    HEADER,
-
-    /** Indicates a library (so/dll). */
-    LIB,
-
-    /** Indicates a jar file (Java). */
-    JAR
-  };
-};
-
-/**
- * Structure to hold information of a reference (e.g. header/dll).
- */
-struct ReferenceInfo {
-  /** Path of the reference. */
-  std::string m_path;
-
-  /** the <code>Reference::Kind</code> of the reference. */
-  Reference::Kind m_kind;
-};
-
-/**
- * Encapsulates different kinds of types like <code>VALUE</code>,
- * <code>ARRAY</code> etc.
- *
- * Also includes the information whether the type is a built-in one or
- * a user-defined type, and whether the type is a .NET managed type.
- */
-class TypeKind {
- public:
-  /** An invalid type. */
-  static const int INVALID = 0x0;
-
-  /** A value type. */
-  static const int VALUE = 0x01;
-
-  /** A pointer type. */
-  static const int POINTER = 0x02;
-
-  /** A reference type or pass by reference. */
-  static const int REFERENCE = 0x04;
-
-  /** An array type with fixed/dynamic size. */
-  static const int ARRAY = 0x08;
-
-  /**
-   * The array is of fixed size -- both this and <code>ARRAY</code>
-   * bits should be set for fixed size arrays.
-   */
-  static const int FIXEDARRAY = 0x10;
-
-  /** A C++ template or .NET/Java generic type. */
-  static const int TEMPLATE = 0x20;
-
-  /** The type is actually a template parameter symbol. */
-  static const int TEMPLATEPARAM = 0x40;
-
-  /**
-   * Indicates that the type is a .NET managed type -- required for
-   * generators like C++/CLI that understand both normal objects as
-   * well as .NET types.
-   */
-  static const int MANAGED = 0x100;
-
-  /**
-   * Indicates that the type is a builtin one. This will be normally
-   * OR'd with one of the actual kinds above. If this bit is not set
-   * then the type is assumed to be a user-defined type.
-   */
-  static const int BUILTIN = 0x200;
-};
-
-/**
- * Mask to extract the Type part only from the constants in
- * <code>TypeKind</code> class.
- */
-const int TYPEKIND_TYPEMASK = 0xFF;
-
-/**
- * Constants for the possible kinds of type modifiers.
- */
-class TypeModifier {
- public:
-  /** No modifier. */
-  static const int NONE = 0x01;
-
-  /** The type is defined to be a constant. */
-  static const int CONSTANT = 0x02;
-
-  /** The type is defined to be volatile. */
-  static const int VOLATILE = 0x04;
-
-  /** The member is private to the class. */
-  static const int PRIVATE = 0x08;
-
-  /** The member is declared to be protected. */
-  static const int PROTECTED = 0x10;
-
-  /** The member is declared to be public. */
-  static const int PUBLIC = 0x20;
-
-  /** The member is declared to be internal (.NET). */
-  static const int INTERNAL = 0x40;
-
-  /** The member is a property (.NET). */
-  static const int PROPERTY = 0x80;
-
-  /** The member is defined to be transient (Java). */
-  static const int TRANSIENT = 0x100;
-};
-
-/**
- * Structure to hold information for a type.
- */
-struct TypeInfo {
-  /** The {@link apache::geode::client::pdx_auto_serializer::TypeKind} of the
-   * type. */
-  int m_kind;
-
-  /** The {@link apache::geode::client::pdx_auto_serializer::TypeModifier} for
-   * the type. */
-  int m_modifier;
-
-  /**
-   * Contains either the name of the variable, or for the case of
-   * <code>FIXEDARRAY</code> or <code>ARRAY</code>, the size of the array,
-   * name of variable containing the size respectively.
-   */
-  std::string m_nameOrSize;
-
-  std::string m_nameOfArrayElemSize;
-
-  /** The namespace for the type expressed as a vector. */
-  StringVector m_namespaces;
-
-  /**
-   * Information of any child sub-types for the case of
-   * <code>POINTER</code>, <code>REFERENCE</code> or
-   * <code>TEMPLATE</code> types.
-   */
-  TypeInfo* m_children;
-
-  /**
-   *  The number of child sub-types. Can be greater than one for the case
-   *  of <code>TEMPLATE</code> types.
-   */
-  int m_numChildren;
-};
-
-/**
- * Structure to hold information for a variable.
- */
-struct VariableInfo {
-  /** The type of the variable. */
-  TypeInfo m_type;
-
-  bool m_markIdentityField;
-  bool m_markPdxUnreadField;
-  /** The name of the variable. */
-  std::string m_name;
-};
-
-/** Shorthand for a vector of <code>ReferenceInfo</code>. */
-typedef std::vector<ReferenceInfo> ReferenceVector;
-
-/**
- * Shorthand for <code>const_iterator</code> of a vector of
- * <code>ReferenceInfo</code>.
- */
-typedef std::vector<ReferenceInfo>::const_iterator ReferenceVectorIterator;
-
-/** Shorthand for a vector of <code>VariableInfo</code>. */
-typedef std::vector<VariableInfo> VariableVector;
-
-/**
- * Shorthand for <code>const_iterator</code> of a vector of
- * <code>VariableInfo</code>.
- */
-typedef std::vector<VariableInfo>::const_iterator VariableVectorIterator;
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_BASE_TYPES_H_
diff --git a/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.cpp b/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.cpp
deleted file mode 100644
index 8705495..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.cpp
+++ /dev/null
@@ -1,541 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../base_types.hpp"
-#include "CPPCodeGenerator.hpp"
-#include "Log.hpp"
-#include "Helper.hpp"
-#include <iostream>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-int CPPCodeGenerator::s_classId = -1;
-
-std::string CPPCodeGenerator::s_GFSerializerNamespace =
-    "apache::geode::client::PdxAutoSerializable";
-std::string CPPCodeGenerator::s_TempVarPrefix = "var_";
-
-/** The option name for classId. */
-std::string CPPCodeGenerator::s_ClassIdOption = "classId";
-
-/** The option name for the output directory. */
-std::string CPPCodeGenerator::s_OutDirOption = "outDir";
-
-/**
-* The directory to be used in generated files for the included headers.
-* If not provided the path of the header file as provided on
-* command-line is used.
-*/
-std::string CPPCodeGenerator::s_HeaderDirOption = "headerDir";
-
-/**
-* The option name for the suffix to use for generated files and classes.
-*/
-std::string CPPCodeGenerator::s_GenSuffixOption = "suffix";
-
-// CodeGenerator method implementations
-
-void CPPCodeGenerator::getOptions(OptionMap& options) const {
-  std::pair<bool, std::string> optionPair;
-  // optionPair.first = true;
-  // optionPair.second
-  //    = "\tThe base classId to be used for the serializers [>= 0, < 2^31] "
-  //    "(SINGLE,OPTIONAL)";
-  // options[s_ClassIdOption] = optionPair;
-
-  optionPair.second =
-      "\tThe output directory of the generated files "
-      "(SINGLE,OPTIONAL)";
-  options[s_OutDirOption] = optionPair;
-
-  optionPair.second =
-      "\tThe suffix of the generated filenames "
-      "-- default is '" +
-      defaultGenSuffix() + "' (SINGLE,OPTIONAL)";
-  options[s_GenSuffixOption] = optionPair;
-
-  // optionPair.second = "\tThe directory to be used in generated files for "
-  //    "the included headers.\n\t\t\tIf not provided the "
-  //    "path of the header file as provided on the "
-  //    "command-line is used (SINGLE,OPTIONAL)";
-  // options[s_HeaderDirOption] = optionPair;
-}
-
-void CPPCodeGenerator::init(PropertyMap& properties) {
-  Helper::getSingleProperty(properties, s_OutDirOption, m_outDir);
-  m_outDir += '/';
-  std::string classIdStr;
-  bool classIdFound =
-      Helper::getSingleProperty(properties, s_ClassIdOption, classIdStr);
-  if (!classIdFound) {
-    // Log::warn(m_moduleName, "No classId given or found for the "
-    //          "class; will not generate the classId method.");
-  } else {
-    try {
-      Helper::lexical_cast(classIdStr, s_classId);
-    } catch (const std::invalid_argument&) {
-      Log::fatal(m_moduleName, "classId not a valid integer");
-    }
-    if (s_classId < 0) {
-      Log::fatal(m_moduleName, "classId should be >= 0.");
-    }
-  }
-  Helper::getSingleProperty(properties, s_GenSuffixOption, m_genSuffix);
-  if (m_genSuffix.length() == 0) {
-    m_genSuffix = defaultGenSuffix();
-  }
-  if (Helper::getSingleProperty(properties, s_HeaderDirOption, m_headerDir) &&
-      (m_headerDir.length() > 0)) {
-    char lastChar = m_headerDir[m_headerDir.length() - 1];
-    if (lastChar != '/' && lastChar != '\\') {
-      m_headerDir += '/';
-    }
-  }
-}
-
-void CPPCodeGenerator::initClass(const TypeInfo& classInfo) {
-  std::string namespacePrefixString = "";
-  StringVector nameSpaceList = classInfo.m_namespaces;
-  for (StringVector::iterator iter = nameSpaceList.begin();
-       iter != nameSpaceList.end(); ++iter) {
-    namespacePrefixString += *iter;
-  }
-  std::string outFile = "";
-  if (namespacePrefixString == "") {
-    outFile = m_outDir + classInfo.m_nameOrSize + m_genSuffix + ".cpp";
-  } else {
-    outFile = m_outDir + namespacePrefixString + "_" + classInfo.m_nameOrSize +
-              m_genSuffix + ".cpp";
-  }
-  Log::info(m_moduleName, "Writing: " + outFile);
-  m_cppFormatter->open(outFile);
-  m_classInfo = classInfo;
-}
-
-void CPPCodeGenerator::addFileHeader(int argc, char** argv) {
-  *m_cppFormatter
-      << "// This is auto generated file using \"pdxautoserializer\""
-      << "\n";
-  *m_cppFormatter
-      << "// Do not edit this file, unless you are sure what you are doing "
-      << "\n";
-  *m_cppFormatter << "// Options used to generate this files are : "
-                  << "\n";
-  for (int i = 1; i < argc; i++) {
-    *m_cppFormatter << "//\t" << argv[i] << "\n";
-  }
-  *m_cppFormatter << "\n";
-}
-
-void CPPCodeGenerator::addReferences(const ReferenceVector& references) {
-  for (ReferenceVectorIterator referenceIterator = references.begin();
-       referenceIterator != references.end(); ++referenceIterator) {
-    if (referenceIterator->m_kind == Reference::HEADER) {
-      std::string headerPath;
-      std::string::size_type lastSlash =
-          referenceIterator->m_path.find_last_of("/\\");
-      if (lastSlash != std::string::npos) {
-        headerPath =
-            m_headerDir + referenceIterator->m_path.substr(lastSlash + 1);
-      } else {
-        headerPath = m_headerDir + referenceIterator->m_path;
-      }
-      *m_cppFormatter << "#include \"" << headerPath << "\"\n\n";
-    }
-  }
-  *m_cppFormatter << "#include <geode/PdxWriter.hpp>"
-                  << "\n";
-  *m_cppFormatter << "#include <geode/PdxReader.hpp>"
-                  << "\n";
-  *m_cppFormatter << "#include <geode/PdxAutoSerializer.hpp>"
-                  << "\n\n";
-}
-
-void CPPCodeGenerator::startClass(const VariableVector& members) {
-  genNamespaceHeader(m_classInfo.m_namespaces, m_cppFormatter);
-}
-// Ticket #905 Changes starts here
-void CPPCodeGenerator::addTryBlockStart(const Method::Type type) {
-  switch (type) {
-    case Method::TODATA: {
-      *m_cppFormatter << "try\n";
-      *m_cppFormatter << "{\n";
-      break;
-    }
-    case Method::FROMDATA: {
-      *m_cppFormatter << "try\n";
-      *m_cppFormatter << "{\n";
-      break;
-    }
-    default: { break; }
-  }
-  return;
-}
-void CPPCodeGenerator::finishTryBlock(const Method::Type type) {
-  switch (type) {
-    case Method::TODATA: {
-      *m_cppFormatter << "}\n";
-      *m_cppFormatter
-          << "catch(apache::geode::client::IllegalStateException exception)\n";
-      *m_cppFormatter << "{\n";
-      *m_cppFormatter << "}\n";
-      break;
-    }
-    case Method::FROMDATA: {
-      *m_cppFormatter << "}\n";
-      *m_cppFormatter
-          << "catch(apache::geode::client::IllegalStateException exception)\n";
-      *m_cppFormatter << "{\n";
-      *m_cppFormatter << "}\n";
-      break;
-    }
-    default: { break; }
-  }
-  return;
-}
-// Ticket #905 Changes ends here
-
-void CPPCodeGenerator::startMethod(const Method::Type type,
-                                   const std::string& varName,
-                                   const std::string& methodPrefix) {
-  std::string var;
-  StringVector varVec;
-  std::string className = getTypeString(m_classInfo);
-
-  switch (type) {
-    case Method::TODATA: {
-      varVec.push_back(
-          "std::shared_ptr<apache::geode::client::PdxWriter> __var");
-
-      genFunctionHeader("toData", className, "void", varVec, true, false,
-                        m_cppFormatter, methodPrefix);
-      break;
-    }
-    case Method::FROMDATA: {
-      varVec.push_back(
-          "std::shared_ptr<apache::geode::client::PdxReader> __var ");
-
-      genFunctionHeader("fromData", className, "void", varVec, true, false,
-                        m_cppFormatter, methodPrefix);
-      break;
-    }
-    default: { throw std::invalid_argument("unexpected execution"); }
-  }
-}
-
-void CPPCodeGenerator::genMethod(const Method::Type type,
-                                 const std::string& varName,
-                                 const VariableInfo& var) {
-  switch (type) {
-    case Method::TODATA: {
-      if (var.m_markPdxUnreadField == true) {
-        *m_cppFormatter << varName << "->writeUnreadFields(" << var.m_name;
-      } else {
-        *m_cppFormatter << s_GFSerializerNamespace << "::writePdxObject("
-                        << varName << ", "
-                        << "\"" << var.m_name << "\""
-                        << ", " << var.m_name;
-        if (var.m_type.m_kind & TypeKind::ARRAY) {
-          *m_cppFormatter << ", " << var.m_type.m_nameOrSize;
-          if (var.m_type.m_nameOfArrayElemSize.size() > 0) {
-            *m_cppFormatter << ", " << var.m_type.m_nameOfArrayElemSize;
-          }
-        }
-      }
-      *m_cppFormatter << ");\n";
-      if (var.m_markIdentityField == true) {
-        *m_cppFormatter << varName << "->markIdentityField("
-                        << "\"" << var.m_name << "\""
-                        << ");"
-                        << "\n"
-                        << "\n";
-      }
-      break;
-    }
-    case Method::FROMDATA: {
-      if (var.m_markPdxUnreadField == true) {
-        *m_cppFormatter << var.m_name << " = " << varName
-                        << "->readUnreadFields(";
-      } else {
-        *m_cppFormatter << s_GFSerializerNamespace << "::readPdxObject("
-                        << varName << ", "
-                        << "\"" << var.m_name << "\""
-                        << ", " << var.m_name;
-        if (var.m_type.m_kind & TypeKind::ARRAY) {
-          *m_cppFormatter << ", " << var.m_type.m_nameOrSize;
-          if (var.m_type.m_nameOfArrayElemSize.size() > 0) {
-            *m_cppFormatter << ", " << var.m_type.m_nameOfArrayElemSize;
-          }
-        }
-      }
-      *m_cppFormatter << ");\n";
-      break;
-    }
-    default: { throw std::invalid_argument("unexpected execution"); }
-  }
-}
-
-void CPPCodeGenerator::endMethod(const Method::Type type,
-                                 const std::string& varName) {
-  switch (type) {
-    case Method::TODATA: {
-      genFunctionFooter(m_cppFormatter);
-      break;
-    }
-    case Method::FROMDATA: {
-      //*m_cppFormatter << "return this;\n";
-      genFunctionFooter(m_cppFormatter);
-      break;
-    }
-    default: { throw std::invalid_argument("unexpected execution"); }
-  }
-}
-
-void CPPCodeGenerator::genTypeId(const std::string& methodPrefix) {
-  if (s_classId >= 0) {
-    StringVector varVec;
-    std::string className = getTypeString(m_classInfo);
-
-    genFunctionHeader("classId", className, "int32_t", varVec, true, true,
-                      m_cppFormatter, methodPrefix);
-    *m_cppFormatter << "return " << s_classId << ";\n";
-    genFunctionFooter(m_cppFormatter);
-    ++s_classId;
-  }
-}
-
-void CPPCodeGenerator::genClassNameMethod(
-    std::map<std::string, std::string>& classNameStringMap,
-    const std::string& methodPrefix) {
-  StringVector varVec;
-  std::string className = getTypeString(m_classInfo);
-  std::map<std::string, std::string>::iterator found =
-      classNameStringMap.find(className);
-  genFunctionHeader("getClassName", className, "const char*", varVec, true,
-                    true, m_cppFormatter, methodPrefix);
-
-  if (found != classNameStringMap.end()) {
-    *m_cppFormatter << "return "
-                    << "\"" << found->second << "\""
-                    << ";\n";
-  } else {
-    *m_cppFormatter << "return "
-                    << "\"";
-    for (StringVector::const_iterator itr = m_classInfo.m_namespaces.begin();
-         itr != m_classInfo.m_namespaces.end(); ++itr) {
-      *m_cppFormatter << *itr << ".";
-    }
-    *m_cppFormatter << className << "\""
-                    << ";\n";
-  }
-  genFunctionFooter(m_cppFormatter);
-}
-
-void CPPCodeGenerator::genCreateDeserializable(
-    const std::string& methodPrefix) {
-  StringVector varVec;
-  std::string className = getTypeString(m_classInfo);
-  genFunctionHeader("createDeserializable", className,
-                    "apache::geode::client::PdxSerializable*", varVec, true,
-                    false, m_cppFormatter, methodPrefix);
-  *m_cppFormatter << "return new " << className << "()"
-                  << ";\n";
-  genFunctionFooter(m_cppFormatter);
-}
-
-void CPPCodeGenerator::endClass() {
-  genNamespaceFooter(m_classInfo.m_namespaces, m_cppFormatter);
-  m_cppFormatter->close();
-}
-
-void CPPCodeGenerator::cleanup() {
-  std::string fileName;
-  if (m_cppFormatter != NULL) {
-    fileName = m_cppFormatter->getFileName();
-    m_cppFormatter->close();
-    if (fileName.length() > 0) {
-      remove(fileName.c_str());
-    }
-  }
-}
-
-// End CodeGenerator methods
-
-std::string CPPCodeGenerator::defaultGenSuffix() const {
-  return "Serializable";
-}
-
-std::string CPPCodeGenerator::getNamespacePrefix(
-    const StringVector& namespaces) const {
-  std::string namespacePrefix;
-  for (StringVectorIterator namespaceIterator = namespaces.begin();
-       namespaceIterator != namespaces.end(); ++namespaceIterator) {
-    namespacePrefix += *namespaceIterator + "::";
-  }
-  return namespacePrefix;
-}
-
-std::string CPPCodeGenerator::getTypeString(const TypeInfo& type,
-                                            bool prependNS,
-                                            std::string* postVarStr,
-                                            StringSet* templateArgs) const {
-  std::string typeString;
-  if (type.m_kind & TypeKind::VALUE) {
-    if (prependNS) {
-      typeString += getNamespacePrefix(type.m_namespaces);
-    }
-    typeString += type.m_nameOrSize;
-  } else if (type.m_kind & TypeKind::TEMPLATEPARAM) {
-    typeString += type.m_nameOrSize;
-    if (templateArgs != NULL) {
-      templateArgs->insert(type.m_nameOrSize);
-    }
-  } else if (type.m_kind & TypeKind::POINTER) {
-    assert(type.m_numChildren == 1);
-    assert(type.m_children != NULL);
-
-    typeString +=
-        getTypeString(*(type.m_children), prependNS, postVarStr, templateArgs);
-    if (postVarStr == NULL || postVarStr->length() == 0) {
-      typeString += '*';
-    } else {
-      typeString += "(*";
-      postVarStr->insert(0, ")");
-    }
-  } else if (type.m_kind & TypeKind::REFERENCE) {
-    assert(type.m_numChildren == 1);
-    assert(type.m_children != NULL);
-
-    typeString +=
-        getTypeString(*(type.m_children), prependNS, postVarStr, templateArgs);
-    if (postVarStr == NULL || postVarStr->length() == 0) {
-      typeString += '&';
-    } else {
-      typeString += "(&";
-      postVarStr->insert(0, ")");
-    }
-  } else if (type.m_kind & TypeKind::TEMPLATE) {
-    if (prependNS) {
-      typeString += getNamespacePrefix(type.m_namespaces);
-    }
-    typeString += type.m_nameOrSize + "< ";
-    if (type.m_numChildren > 0) {
-      typeString +=
-          getTypeString(*type.m_children, prependNS, postVarStr, templateArgs);
-      for (int childIndex = 1; childIndex < type.m_numChildren; ++childIndex) {
-        typeString += ", ";
-        typeString += getTypeString(type.m_children[childIndex], prependNS,
-                                    postVarStr, templateArgs);
-      }
-    }
-    typeString += " >";
-  } else if (type.m_kind & TypeKind::ARRAY) {
-    assert(type.m_numChildren == 1);
-    assert(type.m_children != NULL);
-
-    typeString +=
-        getTypeString(*(type.m_children), prependNS, postVarStr, templateArgs);
-    if (postVarStr == NULL) {
-      typeString += '*';
-    } else {
-      postVarStr->append("[]");
-    }
-  } else if (type.m_kind & TypeKind::FIXEDARRAY) {
-    assert(type.m_numChildren == 1);
-    assert(type.m_children != NULL);
-
-    typeString +=
-        getTypeString(*(type.m_children), prependNS, postVarStr, templateArgs);
-    if (postVarStr == NULL) {
-      typeString += '*';
-    } else {
-      postVarStr->append("[" + type.m_nameOrSize + "]");
-    }
-  }
-  return typeString;
-}
-
-void CPPCodeGenerator::genNamespaceHeader(const StringVector& namespaces,
-                                          OutputFormatter* formatter) {
-  for (StringVectorIterator namespaceIterator = namespaces.begin();
-       namespaceIterator != namespaces.end(); ++namespaceIterator) {
-    *formatter << "namespace " << *namespaceIterator << "\n{\n";
-  }
-  *formatter << '\n';
-}
-
-void CPPCodeGenerator::genFunctionHeader(const std::string& functionName,
-                                         const std::string& className,
-                                         const std::string& returnType,
-                                         const StringVector& arguments,
-                                         bool isDefinition, bool isConst,
-                                         OutputFormatter* formatter,
-                                         const std::string& methodPrefix) {
-  *formatter << returnType << ' ';
-  if (isDefinition) {
-    if (methodPrefix != "") {
-      *formatter << methodPrefix << className << "::";
-    } else {
-      *formatter << className << "::";
-    }
-  }
-  *formatter << functionName << "(";
-  if (arguments.size() > 0) {
-    StringVectorIterator argumentIterator = arguments.begin();
-    *formatter << *argumentIterator;
-    while (++argumentIterator != arguments.end()) {
-      *formatter << ", " << *argumentIterator;
-    }
-  }
-  *formatter << ")";
-  if (isConst) {
-    *formatter << " const";
-  }
-  *formatter << "\n{\n";
-}
-
-void CPPCodeGenerator::genFunctionFooter(OutputFormatter* formatter) {
-  *formatter << "}\n\n";
-}
-
-void CPPCodeGenerator::genNamespaceFooter(const StringVector& namespaces,
-                                          OutputFormatter* formatter) {
-  for (StringVector::size_type i = 0; i < namespaces.size(); ++i) {
-    *formatter << "}\n";
-  }
-}
-
-CodeGenerator* CPPCodeGenerator::create() { return new CPPCodeGenerator(); }
-
-CPPCodeGenerator::CPPCodeGenerator()
-    : m_cppFormatter(new OutputFormatter()),
-      m_outDir("."),
-      m_moduleName("CPPCodeGenerator") {}
-
-CPPCodeGenerator::~CPPCodeGenerator() {
-  if (m_cppFormatter != NULL) {
-    m_cppFormatter->close();
-    delete m_cppFormatter;
-    m_cppFormatter = NULL;
-  }
-}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.hpp b/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.hpp
deleted file mode 100644
index 7b28b35..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPCodeGenerator.hpp
+++ /dev/null
@@ -1,239 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_IMPL_CPPCODEGENERATOR_H_
-#define GEODE_PDXAUTOSERIALIZER_IMPL_CPPCODEGENERATOR_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../CodeGenerator.hpp"
-#include "../OutputFormatter.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * The C++ code generator backend.
- */
-class CPPCodeGenerator : public CodeGenerator {
- public:
-  // CodeGenerator method implementations
-
-  virtual void getOptions(OptionMap& options) const;
-
-  virtual void init(PropertyMap& properties);
-
-  virtual void initClass(const TypeInfo& classInfo);
-
-  virtual void addReferences(const ReferenceVector& references);
-  virtual void addFileHeader(int, char**);
-
-  virtual void startClass(const VariableVector& members);
-
-  virtual void startMethod(const Method::Type type, const std::string& varName,
-                           const std::string& methodPrefix);
-
-  // Ticket #905 Changes starts here
-  virtual void addTryBlockStart(const Method::Type type);
-  virtual void finishTryBlock(const Method::Type type);
-  // Ticket #905 Changes ends here
-  virtual void genMethod(const Method::Type type, const std::string& varName,
-                         const VariableInfo& var);
-
-  virtual void endMethod(const Method::Type type, const std::string& varName);
-
-  virtual void genTypeId(const std::string& methodPrefix);
-  virtual void genClassNameMethod(std::map<std::string, std::string>&,
-                                  const std::string& methodPrefix);
-  virtual void genCreateDeserializable(const std::string& methodPrefix);
-  virtual void endClass();
-
-  virtual void cleanup();
-
-  // End CodeGenerator implementations
-
-  /**
-   * Static factory function to create an object of
-   * <code>CPPCodeGenerator</code> class. This is registered with the
-   * <code>CodeGeneratorFactory</code>.
-   *
-   * @return An instance of <code>CPPCodeGenerator</code>.
-   */
-  static CodeGenerator* create();
-
-  /** Virtual destructor. */
-  virtual ~CPPCodeGenerator();
-
- protected:
-  /**
-   * Get the default suffix to use for generated files and classes.
-   */
-  virtual std::string defaultGenSuffix() const;
-
-  /**
-   * Get the prefix for a namespace nesting.
-   *
-   * @param namespaces The nested namespace names.
-   * @return Prefix for nested namespaces.
-   */
-  virtual std::string getNamespacePrefix(const StringVector& namespaces) const;
-
-  /**
-   * Get the string representation for a given type.
-   *
-   * @param type Reference to the <code>TypeInfo</code> for the type.
-   * @param prependNS Whether to prepend the namespace to the type.
-   * @param postVarStr Returns a string that may be required after
-   *                      the variable (for C++ arrays). If this is
-   *                      NULL, then it is assumed to be in return type
-   *                      where there is no variable.
-   * @return The string representation of the type.
-   */
-  virtual std::string getTypeString(const TypeInfo& type,
-                                    bool prependNS = false,
-                                    std::string* postVarStr = NULL,
-                                    StringSet* templateArgs = NULL) const;
-
-  /**
-   * Generate the namespace header for the given list of namespaces.
-   *
-   * @param namespaces The vector of namespaces.
-   * @param formatter The formatter to use for generating the output.
-   */
-  virtual void genNamespaceHeader(const StringVector& namespaces,
-                                  OutputFormatter* formatter);
-
-  /**
-   * Generate the function header with the given name, arguments,
-   * return type and in the given class.
-   *
-   * @param functionName The name of the function.
-   * @param className The name of the class containing the function.
-   * @param returnType The return type of the function.
-   * @param arguments The list of arguments to the function.
-   * @param isDefinition Whether to generate a definition or declaration.
-   * @param isConst Whether the method is a const method.
-   * @param formatter The formatter to use for generating the output.
-   */
-  virtual void genFunctionHeader(const std::string& functionName,
-                                 const std::string& className,
-                                 const std::string& returnType,
-                                 const StringVector& arguments,
-                                 bool isDefinition, bool isConst,
-                                 OutputFormatter* formatter,
-                                 const std::string& methodPrefix);
-
-  /**
-   * Generate the function footer.
-   *
-   * @param formatter The formatter to use for generating the footer.
-   */
-  virtual void genFunctionFooter(OutputFormatter* formatter);
-
-  /**
-   * Generate the namespace footer for the given list of namespaces.
-   *
-   * @param namespaces The vector of namespaces.
-   * @param formatter The formatter to use for generating the output.
-   */
-  virtual void genNamespaceFooter(const StringVector& namespaces,
-                                  OutputFormatter* formatter);
-
-  /**
-   * Default constructor -- this is not exposed to public which should
-   * use the {@link CPPCodeGenerator::create} function.
-   */
-  CPPCodeGenerator();
-
-  /**
-   * The <code>OutputFormatter</code> to be used for writing the output
-   * cpp file.
-   */
-  OutputFormatter* m_cppFormatter;
-
-  /**
-   * <code>TypeInfo</code> of the class for which <code>toData</code>
-   * and <code>fromData</code> methods are to be generated.
-   */
-  TypeInfo m_classInfo;
-
-  /** The name of the output directory. */
-  std::string m_outDir;
-
-  /**
-   * The suffix to be used for generated files and classes -- default is
-   * given by <code>defaultGenSuffix</code>.
-   */
-  std::string m_genSuffix;
-
-  /**
-   * The directory of the header file to be used in the '#include' in the
-   * generated files.
-   */
-  std::string m_headerDir;
-
-  /**
-   * The name of the variable of this class that is passed to static
-   * <code>writeObject/readObject</code> methods.
-   */
-  std::string m_objPrefix;
-
-  /** The name of this module to be used for logging. */
-  std::string m_moduleName;
-
-  /** The current classId being used for this class. */
-  static int s_classId;
-
-  // Constants
-
-  /**
-   * The namespace containing the global overloaded <code>writeObject</code>
-   * and <code>readObject</code> methods for builtin types.
-   */
-  static std::string s_GFSerializerNamespace;
-
-  /**
-   * The prefix to use for declaring temporary and function argument
-   * variables.
-   */
-  static std::string s_TempVarPrefix;
-
-  /** The option name for classId. */
-  static std::string s_ClassIdOption;
-
-  /** The option name for the output directory. */
-  static std::string s_OutDirOption;
-
-  /**
-   * The directory to be used in generated files for the included headers.
-   * If not provided the path of the header file as provided on
-   * command-line is used.
-   */
-  static std::string s_HeaderDirOption;
-
-  /**
-   * The option name for the suffix to use for generated files and classes.
-   */
-  static std::string s_GenSuffixOption;
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_IMPL_CPPCODEGENERATOR_H_
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPDictionary.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPDictionary.hpp
deleted file mode 100644
index dee184a..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPDictionary.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * Requires PCCTS 1.32b4 or higher to get past ANTLR.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/* 1999-2005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-#ifndef CPPDictionary_hpp
-#define CPPDictionary_hpp
-
-#include <geode/internal/geode_globals.hpp>
-#include "Dictionary.hpp"
-
-class CPPDictionary : public Dictionary {
- public:
-  CPPDictionary(int nb = 43, int ns = 50, int nc = 30000)
-      : Dictionary(nb, ns, nc) {}
-
- protected:
-  void dumpSymbol(FILE *f, DictEntry *de) {
-    CPPSymbol *cs = (CPPSymbol *)de;
-
-#ifdef DIAG_MSGES
-    if (!(cs->getType() == CPPSymbol::otTypedef ||
-          cs->getType() == CPPSymbol::otClass ||
-          cs->getType() == CPPSymbol::otEnum ||
-          cs->getType() == CPPSymbol::otUnion ||
-          cs->getType() == CPPSymbol::otStruct))
-      fprintf(f, "[non-");
-    else
-      fprintf(f, "[");
-    fprintf(f, "type: %s]\n", cs->getKey());
-#endif
-  }
-};
-
-#define antlrTrace(x)
-
-#endif
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.cpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.cpp
deleted file mode 100644
index be756df..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../../base_types.hpp"
-#include <stdio.h>
-#ifndef WIN32
-#include <strings.h>
-#endif
-#include "CPPInputParser.hpp"
-#include "../../impl/Log.hpp"
-#include <fstream>
-#include <antlr/ANTLRException.hpp>
-
-// Used to control selected tracing at statement level.
-extern int statementTrace;
-
-int deferredLineCount = 0;
-
-void process_line_directive(const char* includedFile,
-                            const char* includedLineNo) {}
-
-ANTLR_USING_NAMESPACE(antlr);
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/** The name of this module to be used for logging. */
-static std::string ModuleName = "CPPInputParser";
-
-// CPPClassInfo definitions
-
-std::string CPPClassInfo::getName() const { return m_className; }
-
-std::string CPPClassInfo::getMethodPrefix() const { return m_method_prefix; }
-
-void CPPClassInfo::getReferences(ReferenceVector& references) const {
-  if (m_headerName.length() > 0) {
-    ReferenceInfo classHeader = {m_headerName, Reference::HEADER};
-
-    references.push_back(classHeader);
-  }
-
-  /*ReferenceInfo builtinHeader = { "ASBuiltins.hpp",
-                                  Reference::HEADER };*/
-
-  // references.push_back(builtinHeader);
-
-  /*ReferenceInfo builtinHeaderWriter = { "geode/PdxWriter.hpp",
-  Reference::HEADER };
-  references.push_back(builtinHeaderWriter);
-
-  ReferenceInfo builtinHeaderReader = { "geode/PdxWriter.hpp",
-  Reference::HEADER };
-  references.push_back(builtinHeaderReader);*/
-}
-
-void CPPClassInfo::getTypeInfo(TypeInfo& classInfo) const {
-  classInfo.m_kind = TypeKind::VALUE;
-  classInfo.m_nameOrSize = m_className;
-  classInfo.m_nameOfArrayElemSize = m_className;
-  classInfo.m_children = NULL;
-  classInfo.m_numChildren = 0;
-  classInfo.m_namespaces = m_NamespacesList;
-}
-
-void CPPClassInfo::getMembers(VariableVector& members) const {
-  for (VariableVectorIterator memberIterator = m_members.begin();
-       memberIterator != m_members.end(); ++memberIterator) {
-    members.push_back(*memberIterator);
-  }
-}
-
-void CPPClassInfo::setHeaderName(const std::string headerName) {
-  m_headerName = headerName;
-}
-
-void CPPClassInfo::setClassName(const std::string className) {
-  m_className = className;
-}
-
-void CPPClassInfo::setMethodPrefix(const std::string className) {
-  m_method_prefix = m_method_prefix + className + "::";
-}
-
-void CPPClassInfo::addMember(const VariableInfo& member) {
-  m_members.push_back(member);
-}
-
-void CPPClassInfo::addNamespace(std::vector<std::string>& inNamespaceVector) {
-  for (std::vector<std::string>::iterator itr = inNamespaceVector.begin();
-       itr != inNamespaceVector.end(); ++itr) {
-    m_NamespacesList.push_back(*itr);
-  }
-}
-
-CPPClassInfo::CPPClassInfo() { m_method_prefix = ""; }
-
-CPPClassInfo::~CPPClassInfo() {}
-
-// CPPHeaderParser definitions
-
-void CPPHeaderParser::beginClassDefinition(TypeSpecifier ts, const char* tag) {
-  CPPParser::beginClassDefinition(ts, tag);
-  m_currentClassesVector.push_back(new CPPClassInfo());
-  m_currentClassesVector.back()->setHeaderName(getFilename());
-  m_currentClassesVector.back()->setClassName(tag);
-
-  if (m_currentClassesVector.size() > 1) {
-    for (std::vector<CPPClassInfo*>::iterator iter =
-             m_currentClassesVector.begin();
-         iter != m_currentClassesVector.end() - 1; ++iter) {
-      m_currentClassesVector.back()->setMethodPrefix((*iter)->getName());
-    }
-  }
-  m_currentClassScope = symbols->getCurrentScopeIndex();
-}
-
-void CPPHeaderParser::exitNamespaceScope() { m_namespaceVector.pop_back(); }
-
-void CPPHeaderParser::endClassDefinition() {
-  CPPParser::endClassDefinition();
-  if (m_currentClassesVector.size() == 0) return;
-  if (m_arraySizeRefMap.size() > 0) {
-    for (VariableVector::iterator memberIterator =
-             m_currentClassesVector.back()->m_members.begin();
-         memberIterator != m_currentClassesVector.back()->m_members.end();
-         memberIterator++) {
-      StringMap::const_iterator findMember =
-          m_arraySizeRefMap.find(memberIterator->m_name);
-      if (findMember != m_arraySizeRefMap.end()) {
-        memberIterator->m_type.m_kind |= TypeKind::ARRAY;
-        memberIterator->m_type.m_nameOrSize = findMember->second;
-        Log::info(ModuleName,
-                  "Using \"" + findMember->second + "\" as size of array \"" +
-                      memberIterator->m_name + '"');
-      }
-
-      StringMap::const_iterator findMemberElem =
-          m_arrayElemSizeRefMap.find(memberIterator->m_name);
-      if (findMemberElem != m_arrayElemSizeRefMap.end()) {
-        memberIterator->m_type.m_kind |= TypeKind::ARRAY;
-        memberIterator->m_type.m_nameOfArrayElemSize = findMemberElem->second;
-        Log::info(ModuleName,
-                  "Using \"" + findMemberElem->second +
-                      "\" as size of array \"" + memberIterator->m_name + '"');
-      }
-    }
-  }
-  /*
-   * add the namespace informaton here
-   */
-  m_currentClassesVector.back()->addNamespace(m_namespaceVector);
-
-  m_classes[m_currentClassesVector.back()->getName()] = std::make_pair(
-      static_cast<ClassInfo*>(m_currentClassesVector.back()), m_selectAll);
-  m_currentClassesVector.pop_back();
-  m_currentClassScope = -1;
-}
-
-void CPPHeaderParser::declaratorID(const char* id, QualifiedItem item) {
-  CPPParser::declaratorID(id, item);
-  if (item == qiNamespace) {
-    m_namespaceVector.push_back(id);
-  }
-  if (m_currentClassesVector.size() != 0 && m_currentClassScope >= 0 &&
-      m_currentClassScope == symbols->getCurrentScopeIndex()) {
-    if (item == qiVar) {  // check if this is a member field declaration
-      if (m_currentInclude && m_currentArraySizeRef.length() == 0 &&
-          m_currentArrayElemSizeRef.length() == 0) {
-        VariableInfo var;
-
-        var.m_type.m_kind = TypeKind::VALUE;
-        var.m_type.m_modifier = TypeModifier::NONE;
-        var.m_type.m_children = NULL;
-        var.m_type.m_numChildren = 0;
-        var.m_name = id;
-        if (m_markIdentityField == true) {
-          var.m_markIdentityField = true;
-        } else {
-          var.m_markIdentityField = false;
-        }
-
-        if (m_markPdxUnreadField == true) {
-          var.m_markPdxUnreadField = true;
-        } else {
-          var.m_markPdxUnreadField = false;
-        }
-
-        m_currentClassesVector.back()->addMember(var);
-      }
-      /*else if ( item == qiType ) {
-          m_currentClass->addNamespace(id);
-      }*/
-      else if (m_currentArraySizeRef.length() > 0) {
-        if (NULL == strchr(m_currentArraySizeRef.c_str(), ',')) {
-          m_arraySizeRefMap[m_currentArraySizeRef] = id;
-        } else {
-          m_currentArraySizeRef.erase(m_currentArraySizeRef.begin());
-          m_currentArraySizeRef.erase(m_currentArraySizeRef.end() - 1);
-          char* p =
-              strtok(const_cast<char*>(m_currentArraySizeRef.c_str()), ",");
-          while (p) {
-            m_arraySizeRefMap[p] = id;
-            p = strtok(NULL, ",");
-          }
-        }
-      } else if (m_currentArrayElemSizeRef.length() > 0) {
-        // std::cout << "Map Entries --> " << "m_arrayElemSizeRefMap[" <<
-        // m_currentArrayElemSizeRef <<"] = " << id << std::endl;
-        m_arrayElemSizeRefMap[m_currentArrayElemSizeRef] = id;
-      }
-    }
-  }
-  // m_currentInclude = true;
-  m_currentArraySizeRef = "";
-  m_currentArrayElemSizeRef = "";
-}
-
-void CPPHeaderParser::declarationSpecifier(bool td, bool fd, StorageClass sc,
-                                           TypeQualifier tq, TypeSpecifier ts,
-                                           FunctionSpecifier fs) {
-  CPPParser::declarationSpecifier(td, fd, sc, tq, ts, fs);
-  if ((tq & tqCONST) || ((tq & tqGFEXCLUDE) && !(tq & tqGFINCLUDE))) {
-    m_currentInclude = false;
-  } else {
-    m_currentInclude = true;
-  }
-  if (tq & tqGFID) {
-    m_markIdentityField = true;
-  } else {
-    m_markIdentityField = false;
-  }
-  if (tq & tqGFUNREAD) {
-    m_markPdxUnreadField = true;
-  } else {
-    m_markPdxUnreadField = false;
-  }
-}
-
-void CPPHeaderParser::gfArraySize(const char* id) {
-  m_currentArraySizeRef = id;
-}
-
-void CPPHeaderParser::gfArrayElemSize(const char* id) {
-  m_currentArrayElemSizeRef = id;
-}
-
-CPPHeaderParser::CPPHeaderParser(CPPLexer& lexer, ASClassFlagMap& classes,
-                                 const bool selectAll)
-    : CPPParser(lexer),
-      m_classes(classes),
-      m_selectAll(selectAll),
-      m_currentClassesVector(std::vector<CPPClassInfo*>()),
-      m_currentClassScope(-1),
-      m_currentInclude(true),
-      m_markIdentityField(false),
-      m_markPdxUnreadField(false) {}
-
-// CPPInputParser definitions
-
-void CPPInputParser::getOptions(OptionMap& options) const {}
-
-void CPPInputParser::init(PropertyMap& properties) {}
-
-void CPPInputParser::selectClasses(const StringVector& resources,
-                                   const StringVector& classNames) {
-#ifndef _DEBUG
-  statementTrace = 0;
-#endif
-  statementTrace = 0;
-  bool selectAll = (classNames.size() == 0);
-  for (StringVectorIterator resourceIterator = resources.begin();
-       resourceIterator != resources.end(); ++resourceIterator) {
-    try {
-      std::ifstream istream(resourceIterator->c_str());
-      CPPLexer lexer(istream);
-      CPPHeaderParser parser(lexer, m_classes, selectAll);
-      parser.init();
-      parser.setFilename(*resourceIterator);
-      parser.translation_unit();
-    } catch (const ANTLRException& ex) {
-      throw std::invalid_argument(ex.getMessage());
-    }
-  }
-
-  for (StringVectorIterator classIterator = classNames.begin();
-       classIterator != classNames.end(); ++classIterator) {
-    if (!select(*classIterator)) {
-      std::string warnMsg =
-          "Could not load class '" + *classIterator + "'; skipping it.";
-      Log::warn(ModuleName, warnMsg);
-    }
-  }
-}
-
-CPPInputParser::CPPInputParser() {}
-
-InputParser* CPPInputParser::create() { return new CPPInputParser(); }
-
-CPPInputParser::~CPPInputParser() {}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.hpp
deleted file mode 100644
index 030ff07..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPInputParser.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _GFAS_CPPINPUTPARSER_HPP_
-#define _GFAS_CPPINPUTPARSER_HPP_
-
-#include "../../InputParser.hpp"
-#include "CPPLexer.hpp"
-#include "CPPParser.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-class CPPHeaderParser;
-
-/**
- * This class implements <code>ClassInfo</code> interface for C++.
- */
-class CPPClassInfo : public ClassInfo {
- public:
-  // ClassInfo implementations
-
-  virtual std::string getName() const;
-
-  virtual void getReferences(ReferenceVector& references) const;
-
-  virtual void getTypeInfo(TypeInfo& classType) const;
-
-  virtual void getMembers(VariableVector& members) const;
-
-  // Setter methods for various fields.
-
-  void setHeaderName(const std::string headerName);
-
-  void setClassName(const std::string className);
-
-  void addMember(const VariableInfo& member);
-
-  void addNamespace(std::vector<std::string>& inNamespaceVector);
-
-  /** Default constructor. */
-  CPPClassInfo();
-
-  /** Virtual destructor. */
-  virtual ~CPPClassInfo();
-
-  void setMethodPrefix(const std::string className);
-  virtual std::string getMethodPrefix() const;
-
- private:
-  /** The name of the header file containing this class. */
-  std::string m_headerName;
-
-  /** The name of the class. */
-  std::string m_className;
-
-  /** Vector of the members of the class. */
-  VariableVector m_members;
-
-  std::vector<std::string> m_NamespacesList;
-
-  std::string m_method_prefix;
-
-  friend class CPPHeaderParser;
-  friend class CPPInputParser;
-};
-
-/** This class parses the classes from header files. */
-class CPPHeaderParser : public CPPParser {
- public:
-  /**
-   * Construct the object using the given <code>CPPLexer</code>.
-   *
-   * @param lexer The <code>CPPLexer</code> used as the tokenizer.
-   * @param classes The global classes map to be populated.
-   * @param selectAll True to mark all the classes as selected.
-   */
-  CPPHeaderParser(CPPLexer& lexer, ASClassFlagMap& classes,
-                  const bool selectAll);
-
-  // CPPParser overrides
-
-  virtual void beginClassDefinition(TypeSpecifier ts, const char* tag);
-
-  virtual void exitNamespaceScope();
-
-  virtual void endClassDefinition();
-
-  virtual void declaratorID(const char* id, QualifiedItem item);
-
-  virtual void declarationSpecifier(bool td, bool fd, StorageClass sc,
-                                    TypeQualifier tq, TypeSpecifier ts,
-                                    FunctionSpecifier fs);
-
-  virtual void gfArraySize(const char* id);
-
-  virtual void gfArrayElemSize(const char* id);
-
- private:
-  /** Accumulates the classes as the classes are parsed. */
-  ASClassFlagMap& m_classes;
-
-  /** True to mark all the classes as selected. */
-  const bool m_selectAll;
-
-  /** Stores the current class being parsed. */
-  std::vector<CPPClassInfo*> m_currentClassesVector;
-
-  /** The scope of the current class. */
-  int m_currentClassScope;
-
-  /** True when the current field has to be excluded. */
-  bool m_currentInclude;
-
-  /** True when the current fiels is marked as identify field */
-  bool m_markIdentityField;
-
-  bool m_markPdxUnreadField;
-
-  /**
-   * If the current field is an array size specification of field 'x',
-   * then this stores the name of 'x'.
-   */
-  std::string m_currentArraySizeRef;
-
-  std::string m_currentArrayElemSizeRef;
-
-  /**
-   * The map of all fields that are array sizes for other fields.
-   */
-  StringMap m_arraySizeRefMap;
-  StringMap m_arrayElemSizeRefMap;
-
-  std::vector<std::string> m_namespaceVector;
-};
-
-/**
- * This class implements <code>InputParser</code> interface for C++.
- */
-class CPPInputParser : public InputParser {
- public:
-  // InputParser implementations
-
-  virtual void getOptions(OptionMap& options) const;
-
-  virtual void init(PropertyMap& properties);
-
-  virtual void selectClasses(const StringVector& resources,
-                             const StringVector& classNames);
-
-  /**
-   * Defines the static function returning an <code>InputParser</code>
-   * object, which is registered with <code>InputParserFactory</code>.
-   *
-   * @return The <code>InputParser</code> object.
-   */
-  static InputParser* create();
-
-  /** @brief Virtual destructor. */
-  virtual ~CPPInputParser();
-
- private:
-  /**
-   * Default constructor -- this is not exposed to public which should use
-   * the {@link CPPInputParser::create} function.
-   */
-  CPPInputParser();
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // _GFAS_CPPINPUTPARSER_HPP_
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.cpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.cpp
deleted file mode 100644
index 2094032..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.cpp
+++ /dev/null
@@ -1,2832 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* $ANTLR 2.7.7 (20130409): "CPP_parser.g" -> "CPPLexer.cpp"$ */
-#ifndef _WIN32
-#include <stdio.h>
-#include <strings.h>
-#endif
-#include "CPPLexer.hpp"
-#include <antlr/CharBuffer.hpp>
-#include <antlr/TokenStreamException.hpp>
-#include <antlr/TokenStreamIOException.hpp>
-#include <antlr/TokenStreamRecognitionException.hpp>
-#include <antlr/CharStreamException.hpp>
-#include <antlr/CharStreamIOException.hpp>
-#include <antlr/NoViableAltForCharException.hpp>
-
-#line 1 "CPP_parser.g"
-#line 13 "CPPLexer.cpp"
-CPPLexer::CPPLexer(ANTLR_USE_NAMESPACE(std) istream& in)
-    : ANTLR_USE_NAMESPACE(antlr)
-          CharScanner(new ANTLR_USE_NAMESPACE(antlr) CharBuffer(in), true) {
-  initLiterals();
-}
-
-CPPLexer::CPPLexer(ANTLR_USE_NAMESPACE(antlr) InputBuffer& ib)
-    : ANTLR_USE_NAMESPACE(antlr) CharScanner(ib, true) {
-  initLiterals();
-}
-
-CPPLexer::CPPLexer(const ANTLR_USE_NAMESPACE(antlr)
-                       LexerSharedInputState& state)
-    : ANTLR_USE_NAMESPACE(antlr) CharScanner(state, true) {
-  initLiterals();
-}
-
-void CPPLexer::initLiterals() {
-  literals["_cdecl"] = 164;
-  literals["__stdcall"] = 26;
-  literals["extern"] = 20;
-  literals["public"] = 82;
-  literals["namespace"] = 14;
-  literals["case"] = 98;
-  literals["short"] = 48;
-  literals["break"] = 108;
-  literals["while"] = 103;
-  literals["__int8"] = 51;
-  literals["delete"] = 174;
-  literals["new"] = 163;
-  literals["__declspec"] = 75;
-  literals["uint32_t"] = 64;
-  literals["int16_t"] = 55;
-  literals["_int32"] = 56;
-  literals["GFID"] = 29;
-  literals["GFARRAYSIZE"] = 31;
-  literals["__pascal"] = 173;
-  literals["template"] = 4;
-  literals["GFEXCLUDE"] = 27;
-  literals["reinterpret_cast"] = 152;
-  literals["inline"] = 12;
-  literals["unsigned"] = 70;
-  literals["const"] = 76;
-  literals["float"] = 71;
-  literals["_int8"] = 50;
-  literals["__int16"] = 54;
-  literals["static_cast"] = 151;
-  literals["return"] = 109;
-  literals["throw"] = 96;
-  literals["int64_t"] = 61;
-  literals["typename"] = 44;
-  literals["using"] = 97;
-  literals["operator"] = 85;
-  literals["__far"] = 169;
-  literals["sizeof"] = 145;
-  literals["protected"] = 83;
-  literals["class"] = 24;
-  literals["_stdcall"] = 25;
-  literals["friend"] = 13;
-  literals["do"] = 104;
-  literals["__interrupt"] = 170;
-  literals["_far"] = 168;
-  literals["typeid"] = 154;
-  literals["__volatile__"] = 79;
-  literals["__alignof__"] = 146;
-  literals["__cdecl"] = 165;
-  literals["_int64"] = 59;
-  literals["__asm"] = 114;
-  literals["pascal"] = 171;
-  literals["typedef"] = 7;
-  literals["__const"] = 77;
-  literals["const_cast"] = 153;
-  literals["__asm__"] = 115;
-  literals["uint16_t"] = 63;
-  literals["explicit"] = 43;
-  literals["_asm"] = 113;
-  literals["if"] = 100;
-  literals["__int32"] = 57;
-  literals["double"] = 72;
-  literals["volatile"] = 78;
-  literals["catch"] = 111;
-  literals["dynamic_cast"] = 150;
-  literals["union"] = 23;
-  literals["try"] = 110;
-  literals["register"] = 37;
-  literals["_inline"] = 40;
-  literals["auto"] = 36;
-  literals["GFINCLUDE"] = 28;
-  literals["goto"] = 106;
-  literals["enum"] = 9;
-  literals["int"] = 49;
-  literals["for"] = 105;
-  literals["int32_t"] = 58;
-  literals["uint64_t"] = 65;
-  literals["char"] = 45;
-  literals["__near"] = 167;
-  literals["private"] = 84;
-  literals["GFARRAYELEMSIZE"] = 35;
-  literals["default"] = 99;
-  literals["false"] = 88;
-  literals["this"] = 86;
-  literals["static"] = 38;
-  literals["mutable"] = 39;
-  literals["int8_t"] = 52;
-  literals["GFARRAYSIZES"] = 34;
-  literals["uint8_t"] = 62;
-  literals["_int16"] = 53;
-  literals["continue"] = 107;
-  literals["bool"] = 47;
-  literals["struct"] = 22;
-  literals["GFUNREAD"] = 30;
-  literals["_near"] = 166;
-  literals["__int64"] = 60;
-  literals["signed"] = 69;
-  literals["GFIGNORE"] = 80;
-  literals["else"] = 101;
-  literals["_declspec"] = 74;
-  literals["_pascal"] = 172;
-  literals["__w64"] = 67;
-  literals["antlrTrace_on"] = 15;
-  literals["void"] = 73;
-  literals["antlrTrace_off"] = 16;
-  literals["wchar_t"] = 46;
-  literals["switch"] = 102;
-  literals["__inline"] = 41;
-  literals["true"] = 87;
-  literals["long"] = 68;
-  literals["asm"] = 112;
-  literals["virtual"] = 42;
-  literals["_w64"] = 66;
-}
-
-ANTLR_USE_NAMESPACE(antlr) RefToken CPPLexer::nextToken() {
-  ANTLR_USE_NAMESPACE(antlr) RefToken theRetToken;
-  for (;;) {
-    ANTLR_USE_NAMESPACE(antlr) RefToken theRetToken;
-    int _ttype = ANTLR_USE_NAMESPACE(antlr) Token::INVALID_TYPE;
-    resetText();
-    try {  // for lexical and char stream error handling
-      switch (LA(1)) {
-        case 0x2c /* ',' */: {
-          mCOMMA(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x3f /* '?' */: {
-          mQUESTIONMARK(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x3b /* ';' */: {
-          mSEMICOLON(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x28 /* '(' */: {
-          mLPAREN(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x29 /* ')' */: {
-          mRPAREN(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x5b /* '[' */: {
-          mLSQUARE(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x5d /* ']' */: {
-          mRSQUARE(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x7b /* '{' */: {
-          mLCURLY(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x7d /* '}' */: {
-          mRCURLY(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x7e /* '~' */: {
-          mTILDE(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x9 /* '\t' */:
-        case 0xa /* '\n' */:
-        case 0xc /* '\14' */:
-        case 0xd /* '\r' */:
-        case 0x20 /* ' ' */:
-        case 0x5c /* '\\' */: {
-          mWhitespace(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x23 /* '#' */: {
-          mPREPROC_DIRECTIVE(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x22 /* '\"' */: {
-          mStringLiteral(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        case 0x27 /* '\'' */: {
-          mCharLiteral(true);
-          theRetToken = _returnToken;
-          break;
-        }
-        default:
-          if ((LA(1) == 0x3e /* '>' */) && (LA(2) == 0x3e /* '>' */) &&
-              (LA(3) == 0x3d /* '=' */)) {
-            mSHIFTRIGHTEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3c /* '<' */) && (LA(2) == 0x3c /* '<' */) &&
-                     (LA(3) == 0x3d /* '=' */)) {
-            mSHIFTLEFTEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2d /* '-' */) && (LA(2) == 0x3e /* '>' */) &&
-                     (LA(3) == 0x2a /* '*' */)) {
-            mPOINTERTOMBR(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2d /* '-' */) && (LA(2) == 0x3e /* '>' */) &&
-                     (true)) {
-            mPOINTERTO(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3d /* '=' */) && (LA(2) == 0x3d /* '=' */)) {
-            mEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x21 /* '!' */) && (LA(2) == 0x3d /* '=' */)) {
-            mNOTEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3c /* '<' */) && (LA(2) == 0x3d /* '=' */)) {
-            mLESSTHANOREQUALTO(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3e /* '>' */) && (LA(2) == 0x3d /* '=' */)) {
-            mGREATERTHANOREQUALTO(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2f /* '/' */) && (LA(2) == 0x3d /* '=' */)) {
-            mDIVIDEEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2b /* '+' */) && (LA(2) == 0x3d /* '=' */)) {
-            mPLUSEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2b /* '+' */) && (LA(2) == 0x2b /* '+' */)) {
-            mPLUSPLUS(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2d /* '-' */) && (LA(2) == 0x3d /* '=' */)) {
-            mMINUSEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2d /* '-' */) && (LA(2) == 0x2d /* '-' */)) {
-            mMINUSMINUS(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2a /* '*' */) && (LA(2) == 0x3d /* '=' */)) {
-            mTIMESEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x25 /* '%' */) && (LA(2) == 0x3d /* '=' */)) {
-            mMODEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3e /* '>' */) && (LA(2) == 0x3e /* '>' */) &&
-                     (true)) {
-            mSHIFTRIGHT(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3c /* '<' */) && (LA(2) == 0x3c /* '<' */) &&
-                     (true)) {
-            mSHIFTLEFT(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x26 /* '&' */) && (LA(2) == 0x26 /* '&' */)) {
-            mAND(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x7c /* '|' */) && (LA(2) == 0x7c /* '|' */)) {
-            mOR(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x26 /* '&' */) && (LA(2) == 0x3d /* '=' */)) {
-            mBITWISEANDEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x7c /* '|' */) && (LA(2) == 0x3d /* '=' */)) {
-            mBITWISEOREQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x5e /* '^' */) && (LA(2) == 0x3d /* '=' */)) {
-            mBITWISEXOREQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2e /* '.' */) && (LA(2) == 0x2a /* '*' */)) {
-            mDOTMBR(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3a /* ':' */) && (LA(2) == 0x3a /* ':' */)) {
-            mSCOPE(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2f /* '/' */) && (LA(2) == 0x2a /* '*' */)) {
-            mComment(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2f /* '/' */) && (LA(2) == 0x2f /* '/' */)) {
-            mCPPComment(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x4c /* 'L' */) && (LA(2) == 0x27 /* '\'' */)) {
-            mWCharLiteral(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x4c /* 'L' */) && (LA(2) == 0x22 /* '\"' */)) {
-            mWStringLiteral(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3d /* '=' */) && (true)) {
-            mASSIGNEQUAL(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3a /* ':' */) && (true)) {
-            mCOLON(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3c /* '<' */) && (true)) {
-            mLESSTHAN(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x3e /* '>' */) && (true)) {
-            mGREATERTHAN(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2f /* '/' */) && (true)) {
-            mDIVIDE(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2b /* '+' */) && (true)) {
-            mPLUS(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2d /* '-' */) && (true)) {
-            mMINUS(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x2a /* '*' */) && (true)) {
-            mSTAR(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x25 /* '%' */) && (true)) {
-            mMOD(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x21 /* '!' */) && (true)) {
-            mNOT(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x26 /* '&' */) && (true)) {
-            mAMPERSAND(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x7c /* '|' */) && (true)) {
-            mBITWISEOR(true);
-            theRetToken = _returnToken;
-          } else if ((LA(1) == 0x5e /* '^' */) && (true)) {
-            mBITWISEXOR(true);
-            theRetToken = _returnToken;
-          } else if ((_tokenSet_0.member(LA(1))) && (true)) {
-            mNumber(true);
-            theRetToken = _returnToken;
-          } else if ((_tokenSet_1.member(LA(1))) && (true)) {
-            mID(true);
-            theRetToken = _returnToken;
-          } else {
-            if (LA(1) == EOF_CHAR) {
-              uponEOF();
-              _returnToken =
-                  makeToken(ANTLR_USE_NAMESPACE(antlr) Token::EOF_TYPE);
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                  LA(1), getFilename(), getLine(), getColumn());
-            }
-          }
-      }
-      if (!_returnToken) goto tryAgain;  // found SKIP token
-
-      _ttype = _returnToken->getType();
-      _ttype = testLiteralsTable(_ttype);
-      _returnToken->setType(_ttype);
-      return _returnToken;
-    } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& e) {
-      throw ANTLR_USE_NAMESPACE(antlr) TokenStreamRecognitionException(e);
-    } catch (ANTLR_USE_NAMESPACE(antlr) CharStreamIOException& csie) {
-      throw ANTLR_USE_NAMESPACE(antlr) TokenStreamIOException(csie.io);
-    } catch (ANTLR_USE_NAMESPACE(antlr) CharStreamException& cse) {
-      throw ANTLR_USE_NAMESPACE(antlr) TokenStreamException(cse.getMessage());
-    }
-  tryAgain:;
-  }
-}
-
-void CPPLexer::mASSIGNEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = ASSIGNEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('=' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mCOLON(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = COLON;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(':' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mCOMMA(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = COMMA;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(',' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mQUESTIONMARK(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = QUESTIONMARK;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('?' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSEMICOLON(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SEMICOLON;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(';' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPOINTERTO(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = POINTERTO;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("->");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLPAREN(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LPAREN;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('(' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mRPAREN(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = RPAREN;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(')' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLSQUARE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LSQUARE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('[' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mRSQUARE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = RSQUARE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(']' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLCURLY(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LCURLY;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('{' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mRCURLY(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = RCURLY;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('}' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = EQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("==");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mNOTEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = NOTEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("!=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLESSTHANOREQUALTO(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LESSTHANOREQUALTO;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("<=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLESSTHAN(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LESSTHAN;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("<");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mGREATERTHANOREQUALTO(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = GREATERTHANOREQUALTO;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(">=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mGREATERTHAN(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = GREATERTHAN;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(">");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mDIVIDE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = DIVIDE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('/' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mDIVIDEEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = DIVIDEEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("/=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPLUS(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = PLUS;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('+' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPLUSEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = PLUSEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("+=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPLUSPLUS(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = PLUSPLUS;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("++");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mMINUS(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = MINUS;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('-' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mMINUSEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = MINUSEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("-=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mMINUSMINUS(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = MINUSMINUS;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("--");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSTAR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = STAR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('*' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mTIMESEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = TIMESEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("*=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mMOD(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = MOD;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('%' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mMODEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = MODEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("%=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSHIFTRIGHT(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SHIFTRIGHT;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(">>");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSHIFTRIGHTEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SHIFTRIGHTEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(">>=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSHIFTLEFT(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SHIFTLEFT;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("<<");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSHIFTLEFTEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SHIFTLEFTEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("<<=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mAND(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = AND;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("&&");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mNOT(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = NOT;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('!' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mOR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = OR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("||");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mAMPERSAND(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = AMPERSAND;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('&' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mBITWISEANDEQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = BITWISEANDEQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("&=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mTILDE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = TILDE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('~' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mBITWISEOR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = BITWISEOR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('|' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mBITWISEOREQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = BITWISEOREQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("|=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mBITWISEXOR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = BITWISEXOR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('^' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mBITWISEXOREQUAL(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = BITWISEXOREQUAL;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("^=");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPOINTERTOMBR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = POINTERTOMBR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("->*");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mDOTMBR(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = DOTMBR;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match(".*");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSCOPE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = SCOPE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("::");
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mWhitespace(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Whitespace;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    switch (LA(1)) {
-      case 0x9 /* '\t' */:
-      case 0xc /* '\14' */:
-      case 0x20 /* ' ' */: {
-        {
-          switch (LA(1)) {
-            case 0x20 /* ' ' */: {
-              match(' ' /* charlit */);
-              break;
-            }
-            case 0x9 /* '\t' */: {
-              match('\t' /* charlit */);
-              break;
-            }
-            case 0xc /* '\14' */: {
-              match('\14' /* charlit */);
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                  LA(1), getFilename(), getLine(), getColumn());
-            }
-          }
-        }
-        break;
-      }
-      case 0xa /* '\n' */:
-      case 0xd /* '\r' */: {
-        {
-          if ((LA(1) == 0xd /* '\r' */) && (LA(2) == 0xa /* '\n' */)) {
-            match('\r' /* charlit */);
-            match('\n' /* charlit */);
-          } else if ((LA(1) == 0xd /* '\r' */) && (true)) {
-            match('\r' /* charlit */);
-          } else if ((LA(1) == 0xa /* '\n' */)) {
-            match('\n' /* charlit */);
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-        if (inputState->guessing == 0) {
-#line 2391 "CPP_parser.g"
-          newline();
-#line 1165 "CPPLexer.cpp"
-        }
-        break;
-      }
-      case 0x5c /* '\\' */: {
-        {
-          if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xd /* '\r' */) &&
-              (LA(3) == 0xa /* '\n' */)) {
-            match('\\' /* charlit */);
-            match('\r' /* charlit */);
-            match('\n' /* charlit */);
-          } else if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xd /* '\r' */) &&
-                     (true)) {
-            match('\\' /* charlit */);
-            match('\r' /* charlit */);
-          } else if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xa /* '\n' */)) {
-            match('\\' /* charlit */);
-            match('\n' /* charlit */);
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-        if (inputState->guessing == 0) {
-#line 2396 "CPP_parser.g"
-          printf("CPP_parser.g continuation line detected\n");
-          deferredNewline();
-#line 1194 "CPPLexer.cpp"
-        }
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  if (inputState->guessing == 0) {
-#line 2399 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-#line 1207 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mComment(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Comment;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("/*");
-  {  // ( ... )*
-    for (;;) {
-      if (((LA(1) == 0x2a /* '*' */) &&
-           ((LA(2) >= 0x0 /* '\0' */ && LA(2) <= 0xff)) &&
-           ((LA(3) >= 0x0 /* '\0' */ && LA(3) <= 0xff))) &&
-          (LA(2) != '/')) {
-        match('*' /* charlit */);
-      } else if ((LA(1) == 0xa /* '\n' */ || LA(1) == 0xd /* '\r' */)) {
-        mEndOfLine(false);
-        if (inputState->guessing == 0) {
-#line 2406 "CPP_parser.g"
-          deferredNewline();
-#line 1233 "CPPLexer.cpp"
-        }
-      } else if ((_tokenSet_2.member(LA(1)))) {
-        { match(_tokenSet_2); }
-      } else {
-        goto _loop653;
-      }
-    }
-  _loop653:;
-  }  // ( ... )*
-  match("*/");
-  if (inputState->guessing == 0) {
-#line 2409 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-#line 1252 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mEndOfLine(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = EndOfLine;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    if ((LA(1) == 0xd /* '\r' */) && (LA(2) == 0xa /* '\n' */) && (true)) {
-      match("\r\n");
-    } else if ((LA(1) == 0xd /* '\r' */) && (true) && (true)) {
-      match('\r' /* charlit */);
-    } else if ((LA(1) == 0xa /* '\n' */)) {
-      match('\n' /* charlit */);
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mCPPComment(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = CPPComment;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match("//");
-  {  // ( ... )*
-    for (;;) {
-      if ((_tokenSet_3.member(LA(1)))) {
-        { match(_tokenSet_3); }
-      } else {
-        goto _loop657;
-      }
-    }
-  _loop657:;
-  }  // ( ... )*
-  mEndOfLine(false);
-  if (inputState->guessing == 0) {
-#line 2415 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-    newline();
-#line 1314 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPREPROC_DIRECTIVE(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = PREPROC_DIRECTIVE;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    match('#' /* charlit */);
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_3.member(LA(1)))) {
-          { match(_tokenSet_3); }
-        } else {
-          goto _loop662;
-        }
-      }
-    _loop662:;
-    }  // ( ... )*
-    mEndOfLine(false);
-  }
-  if (inputState->guessing == 0) {
-#line 2422 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-    newline();
-#line 1350 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLineDirective(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LineDirective;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-  ANTLR_USE_NAMESPACE(antlr) RefToken n;
-  ANTLR_USE_NAMESPACE(antlr) RefToken sl;
-
-  {
-    switch (LA(1)) {
-      case 0x6c /* 'l' */: {
-        match("line");
-        break;
-      }
-      case 0x9 /* '\t' */:
-      case 0xc /* '\14' */:
-      case 0x20 /* ' ' */: {
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  {  // ( ... )+
-    int _cnt666 = 0;
-    for (;;) {
-      if ((LA(1) == 0x9 /* '\t' */ || LA(1) == 0xc /* '\14' */ ||
-           LA(1) == 0x20 /* ' ' */)) {
-        mSpace(false);
-      } else {
-        if (_cnt666 >= 1) {
-          goto _loop666;
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-              LA(1), getFilename(), getLine(), getColumn());
-        }
-      }
-
-      _cnt666++;
-    }
-  _loop666:;
-  }  // ( ... )+
-  mDecimal(true);
-  n = _returnToken;
-  {  // ( ... )+
-    int _cnt668 = 0;
-    for (;;) {
-      if ((LA(1) == 0x9 /* '\t' */ || LA(1) == 0xc /* '\14' */ ||
-           LA(1) == 0x20 /* ' ' */)) {
-        mSpace(false);
-      } else {
-        if (_cnt668 >= 1) {
-          goto _loop668;
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-              LA(1), getFilename(), getLine(), getColumn());
-        }
-      }
-
-      _cnt668++;
-    }
-  _loop668:;
-  }  // ( ... )+
-  {
-    mStringLiteral(true);
-    sl = _returnToken;
-  }
-  {  // ( ... )*
-    for (;;) {
-      if ((LA(1) == 0x9 /* '\t' */ || LA(1) == 0xc /* '\14' */ ||
-           LA(1) == 0x20 /* ' ' */)) {
-        {  // ( ... )+
-          int _cnt672 = 0;
-          for (;;) {
-            if ((LA(1) == 0x9 /* '\t' */ || LA(1) == 0xc /* '\14' */ ||
-                 LA(1) == 0x20 /* ' ' */)) {
-              mSpace(false);
-            } else {
-              if (_cnt672 >= 1) {
-                goto _loop672;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                    LA(1), getFilename(), getLine(), getColumn());
-              }
-            }
-
-            _cnt672++;
-          }
-        _loop672:;
-        }  // ( ... )+
-        mDecimal(false);
-      } else {
-        goto _loop673;
-      }
-    }
-  _loop673:;
-  }  // ( ... )*
-  if (inputState->guessing == 0) {
-#line 2434 "CPP_parser.g"
-
-    process_line_directive((sl->getText()).data(),
-                           (n->getText()).data());  // see main()
-
-#line 1451 "CPPLexer.cpp"
-  }
-  mEndOfLine(false);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mSpace(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Space;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    switch (LA(1)) {
-      case 0x20 /* ' ' */: {
-        match(' ' /* charlit */);
-        break;
-      }
-      case 0x9 /* '\t' */: {
-        match('\t' /* charlit */);
-        break;
-      }
-      case 0xc /* '\14' */: {
-        match('\14' /* charlit */);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mDecimal(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Decimal;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {  // ( ... )+
-    int _cnt710 = 0;
-    for (;;) {
-      if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-        matchRange('0', '9');
-      } else {
-        if (_cnt710 >= 1) {
-          goto _loop710;
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-              LA(1), getFilename(), getLine(), getColumn());
-        }
-      }
-
-      _cnt710++;
-    }
-  _loop710:;
-  }  // ( ... )+
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mStringLiteral(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = StringLiteral;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('\"' /* charlit */);
-  {  // ( ... )*
-    for (;;) {
-      if ((LA(1) == 0x5c /* '\\' */) && (_tokenSet_4.member(LA(2)))) {
-        mEscape(false);
-      } else if ((LA(1) == 0x5c /* '\\' */) &&
-                 (LA(2) == 0xa /* '\n' */ || LA(2) == 0xd /* '\r' */)) {
-        {
-          if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xd /* '\r' */) &&
-              (LA(3) == 0xa /* '\n' */)) {
-            match("\\\r\n");
-          } else if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xd /* '\r' */) &&
-                     (_tokenSet_3.member(LA(3)))) {
-            match("\\\r");
-          } else if ((LA(1) == 0x5c /* '\\' */) && (LA(2) == 0xa /* '\n' */)) {
-            match("\\\n");
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-        if (inputState->guessing == 0) {
-#line 2496 "CPP_parser.g"
-          deferredNewline();
-#line 1555 "CPPLexer.cpp"
-        }
-      } else if ((_tokenSet_5.member(LA(1)))) {
-        { match(_tokenSet_5); }
-      } else {
-        goto _loop694;
-      }
-    }
-  _loop694:;
-  }  // ( ... )*
-  match('\"' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mPragma(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Pragma;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    match('#' /* charlit */);
-    match("pragma");
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_3.member(LA(1)))) {
-          { match(_tokenSet_3); }
-        } else {
-          goto _loop680;
-        }
-      }
-    _loop680:;
-    }  // ( ... )*
-    mEndOfLine(false);
-  }
-  if (inputState->guessing == 0) {
-#line 2451 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-    newline();
-#line 1606 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mError(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Error;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    match('#' /* charlit */);
-    match("error");
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_3.member(LA(1)))) {
-          { match(_tokenSet_3); }
-        } else {
-          goto _loop685;
-        }
-      }
-    _loop685:;
-    }  // ( ... )*
-    mEndOfLine(false);
-  }
-  if (inputState->guessing == 0) {
-#line 2458 "CPP_parser.g"
-    _ttype = ANTLR_USE_NAMESPACE(antlr) Token::SKIP;
-    newline();
-#line 1643 "CPPLexer.cpp"
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mCharLiteral(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = CharLiteral;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('\'' /* charlit */);
-  {
-    if ((LA(1) == 0x5c /* '\\' */) && (_tokenSet_4.member(LA(2))) &&
-        (_tokenSet_6.member(LA(3)))) {
-      mEscape(false);
-    } else if ((_tokenSet_7.member(LA(1))) && (LA(2) == 0x27 /* '\'' */) &&
-               (true)) {
-      { match(_tokenSet_7); }
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  match('\'' /* charlit */);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mEscape(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Escape;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('\\' /* charlit */);
-  {
-    switch (LA(1)) {
-      case 0x61 /* 'a' */: {
-        match('a' /* charlit */);
-        break;
-      }
-      case 0x62 /* 'b' */: {
-        match('b' /* charlit */);
-        break;
-      }
-      case 0x66 /* 'f' */: {
-        match('f' /* charlit */);
-        break;
-      }
-      case 0x6e /* 'n' */: {
-        match('n' /* charlit */);
-        break;
-      }
-      case 0x72 /* 'r' */: {
-        match('r' /* charlit */);
-        break;
-      }
-      case 0x74 /* 't' */: {
-        match('t' /* charlit */);
-        break;
-      }
-      case 0x76 /* 'v' */: {
-        match('v' /* charlit */);
-        break;
-      }
-      case 0x22 /* '\"' */: {
-        match('\"' /* charlit */);
-        break;
-      }
-      case 0x27 /* '\'' */: {
-        match('\'' /* charlit */);
-        break;
-      }
-      case 0x5c /* '\\' */: {
-        match('\\' /* charlit */);
-        break;
-      }
-      case 0x3f /* '?' */: {
-        match('?' /* charlit */);
-        break;
-      }
-      case 0x30 /* '0' */:
-      case 0x31 /* '1' */:
-      case 0x32 /* '2' */:
-      case 0x33 /* '3' */: {
-        { matchRange('0', '3'); }
-        {
-          if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */)) &&
-              (_tokenSet_3.member(LA(2))) && (true)) {
-            mDigit(false);
-            {
-              if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */)) &&
-                  (_tokenSet_3.member(LA(2))) && (true)) {
-                mDigit(false);
-              } else if ((_tokenSet_3.member(LA(1))) && (true) && (true)) {
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                    LA(1), getFilename(), getLine(), getColumn());
-              }
-            }
-          } else if ((_tokenSet_3.member(LA(1))) && (true) && (true)) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-        break;
-      }
-      case 0x34 /* '4' */:
-      case 0x35 /* '5' */:
-      case 0x36 /* '6' */:
-      case 0x37 /* '7' */: {
-        { matchRange('4', '7'); }
-        {
-          if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */)) &&
-              (_tokenSet_3.member(LA(2))) && (true)) {
-            mDigit(false);
-          } else if ((_tokenSet_3.member(LA(1))) && (true) && (true)) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-        break;
-      }
-      case 0x78 /* 'x' */: {
-        match('x' /* charlit */);
-        {  // ( ... )+
-          int _cnt706 = 0;
-          for (;;) {
-            if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */)) &&
-                (_tokenSet_3.member(LA(2))) && (true)) {
-              mDigit(false);
-            } else if (((LA(1) >= 0x61 /* 'a' */ && LA(1) <= 0x66 /* 'f' */)) &&
-                       (_tokenSet_3.member(LA(2))) && (true)) {
-              matchRange('a', 'f');
-            } else if (((LA(1) >= 0x41 /* 'A' */ && LA(1) <= 0x46 /* 'F' */)) &&
-                       (_tokenSet_3.member(LA(2))) && (true)) {
-              matchRange('A', 'F');
-            } else {
-              if (_cnt706 >= 1) {
-                goto _loop706;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                    LA(1), getFilename(), getLine(), getColumn());
-              }
-            }
-
-            _cnt706++;
-          }
-        _loop706:;
-        }  // ( ... )+
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mWCharLiteral(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = WCharLiteral;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('L' /* charlit */);
-  mCharLiteral(false);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mWStringLiteral(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = WStringLiteral;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  match('L' /* charlit */);
-  mStringLiteral(false);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mDigit(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Digit;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  matchRange('0', '9');
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mLongSuffix(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = LongSuffix;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  switch (LA(1)) {
-    case 0x6c /* 'l' */: {
-      match('l' /* charlit */);
-      break;
-    }
-    case 0x4c /* 'L' */: {
-      match('L' /* charlit */);
-      break;
-    }
-    default: {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mUnsignedSuffix(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = UnsignedSuffix;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  switch (LA(1)) {
-    case 0x75 /* 'u' */: {
-      match('u' /* charlit */);
-      break;
-    }
-    case 0x55 /* 'U' */: {
-      match('U' /* charlit */);
-      break;
-    }
-    default: {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mFloatSuffix(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = FloatSuffix;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  switch (LA(1)) {
-    case 0x66 /* 'f' */: {
-      match('f' /* charlit */);
-      break;
-    }
-    case 0x46 /* 'F' */: {
-      match('F' /* charlit */);
-      break;
-    }
-    default: {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mExponent(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Exponent;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    switch (LA(1)) {
-      case 0x65 /* 'e' */: {
-        match('e' /* charlit */);
-        break;
-      }
-      case 0x45 /* 'E' */: {
-        match('E' /* charlit */);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  {
-    switch (LA(1)) {
-      case 0x2b /* '+' */: {
-        match('+' /* charlit */);
-        break;
-      }
-      case 0x2d /* '-' */: {
-        match('-' /* charlit */);
-        break;
-      }
-      case 0x30 /* '0' */:
-      case 0x31 /* '1' */:
-      case 0x32 /* '2' */:
-      case 0x33 /* '3' */:
-      case 0x34 /* '4' */:
-      case 0x35 /* '5' */:
-      case 0x36 /* '6' */:
-      case 0x37 /* '7' */:
-      case 0x38 /* '8' */:
-      case 0x39 /* '9' */: {
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  {  // ( ... )+
-    int _cnt718 = 0;
-    for (;;) {
-      if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-        mDigit(false);
-      } else {
-        if (_cnt718 >= 1) {
-          goto _loop718;
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-              LA(1), getFilename(), getLine(), getColumn());
-        }
-      }
-
-      _cnt718++;
-    }
-  _loop718:;
-  }  // ( ... )+
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mVocabulary(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Vocabulary;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  matchRange('\3', static_cast<unsigned char>('\377'));
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mNumber(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = Number;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  bool synPredMatched725 = false;
-  if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */)) &&
-       (_tokenSet_8.member(LA(2))) && (true))) {
-    int _m725 = mark();
-    synPredMatched725 = true;
-    inputState->guessing++;
-    try {
-      {
-        {  // ( ... )+
-          int _cnt723 = 0;
-          for (;;) {
-            if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-              mDigit(false);
-            } else {
-              if (_cnt723 >= 1) {
-                goto _loop723;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                    LA(1), getFilename(), getLine(), getColumn());
-              }
-            }
-
-            _cnt723++;
-          }
-        _loop723:;
-        }  // ( ... )+
-        {
-          switch (LA(1)) {
-            case 0x2e /* '.' */: {
-              match('.' /* charlit */);
-              break;
-            }
-            case 0x65 /* 'e' */: {
-              match('e' /* charlit */);
-              break;
-            }
-            case 0x45 /* 'E' */: {
-              match('E' /* charlit */);
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                  LA(1), getFilename(), getLine(), getColumn());
-            }
-          }
-        }
-      }
-    } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-      synPredMatched725 = false;
-    }
-    rewind(_m725);
-    inputState->guessing--;
-  }
-  if (synPredMatched725) {
-    {  // ( ... )+
-      int _cnt727 = 0;
-      for (;;) {
-        if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-          mDigit(false);
-        } else {
-          if (_cnt727 >= 1) {
-            goto _loop727;
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-
-        _cnt727++;
-      }
-    _loop727:;
-    }  // ( ... )+
-    {
-      switch (LA(1)) {
-        case 0x2e /* '.' */: {
-          match('.' /* charlit */);
-          {  // ( ... )*
-            for (;;) {
-              if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-                mDigit(false);
-              } else {
-                goto _loop730;
-              }
-            }
-          _loop730:;
-          }  // ( ... )*
-          {
-            if ((LA(1) == 0x45 /* 'E' */ || LA(1) == 0x65 /* 'e' */)) {
-              mExponent(false);
-            } else {
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 2606 "CPP_parser.g"
-            _ttype = FLOATONE;
-#line 2158 "CPPLexer.cpp"
-          }
-          break;
-        }
-        case 0x45 /* 'E' */:
-        case 0x65 /* 'e' */: {
-          mExponent(false);
-          if (inputState->guessing == 0) {
-#line 2607 "CPP_parser.g"
-            _ttype = FLOATTWO;
-#line 2169 "CPPLexer.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-              LA(1), getFilename(), getLine(), getColumn());
-        }
-      }
-    }
-    {
-      switch (LA(1)) {
-        case 0x46 /* 'F' */:
-        case 0x66 /* 'f' */: {
-          mFloatSuffix(false);
-          break;
-        }
-        case 0x4c /* 'L' */:
-        case 0x6c /* 'l' */: {
-          mLongSuffix(false);
-          break;
-        }
-        default: {}
-      }
-    }
-  } else {
-    bool synPredMatched734 = false;
-    if (((LA(1) == 0x2e /* '.' */) && (LA(2) == 0x2e /* '.' */))) {
-      int _m734 = mark();
-      synPredMatched734 = true;
-      inputState->guessing++;
-      try {
-        { match("..."); }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched734 = false;
-      }
-      rewind(_m734);
-      inputState->guessing--;
-    }
-    if (synPredMatched734) {
-      match("...");
-      if (inputState->guessing == 0) {
-#line 2613 "CPP_parser.g"
-        _ttype = ELLIPSIS;
-#line 2221 "CPPLexer.cpp"
-      }
-    } else if ((LA(1) == 0x30 /* '0' */) &&
-               (LA(2) == 0x58 /* 'X' */ || LA(2) == 0x78 /* 'x' */)) {
-      match('0' /* charlit */);
-      {
-        switch (LA(1)) {
-          case 0x78 /* 'x' */: {
-            match('x' /* charlit */);
-            break;
-          }
-          case 0x58 /* 'X' */: {
-            match('X' /* charlit */);
-            break;
-          }
-          default: {
-            throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                LA(1), getFilename(), getLine(), getColumn());
-          }
-        }
-      }
-      {  // ( ... )+
-        int _cnt750 = 0;
-        for (;;) {
-          switch (LA(1)) {
-            case 0x61 /* 'a' */:
-            case 0x62 /* 'b' */:
-            case 0x63 /* 'c' */:
-            case 0x64 /* 'd' */:
-            case 0x65 /* 'e' */:
-            case 0x66 /* 'f' */: {
-              matchRange('a', 'f');
-              break;
-            }
-            case 0x41 /* 'A' */:
-            case 0x42 /* 'B' */:
-            case 0x43 /* 'C' */:
-            case 0x44 /* 'D' */:
-            case 0x45 /* 'E' */:
-            case 0x46 /* 'F' */: {
-              matchRange('A', 'F');
-              break;
-            }
-            case 0x30 /* '0' */:
-            case 0x31 /* '1' */:
-            case 0x32 /* '2' */:
-            case 0x33 /* '3' */:
-            case 0x34 /* '4' */:
-            case 0x35 /* '5' */:
-            case 0x36 /* '6' */:
-            case 0x37 /* '7' */:
-            case 0x38 /* '8' */:
-            case 0x39 /* '9' */: {
-              mDigit(false);
-              break;
-            }
-            default: {
-              if (_cnt750 >= 1) {
-                goto _loop750;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                    LA(1), getFilename(), getLine(), getColumn());
-              }
-            }
-          }
-          _cnt750++;
-        }
-      _loop750:;
-      }  // ( ... )+
-      {  // ( ... )*
-        for (;;) {
-          switch (LA(1)) {
-            case 0x4c /* 'L' */:
-            case 0x6c /* 'l' */: {
-              mLongSuffix(false);
-              break;
-            }
-            case 0x55 /* 'U' */:
-            case 0x75 /* 'u' */: {
-              mUnsignedSuffix(false);
-              break;
-            }
-            default: { goto _loop752; }
-          }
-        }
-      _loop752:;
-      }  // ( ... )*
-      if (inputState->guessing == 0) {
-#line 2637 "CPP_parser.g"
-        _ttype = HEXADECIMALINT;
-#line 2317 "CPPLexer.cpp"
-      }
-    } else if ((LA(1) == 0x2e /* '.' */) && (true)) {
-      match('.' /* charlit */);
-      if (inputState->guessing == 0) {
-#line 2615 "CPP_parser.g"
-        _ttype = DOT;
-#line 2325 "CPPLexer.cpp"
-      }
-      {
-        if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-          {  // ( ... )+
-            int _cnt737 = 0;
-            for (;;) {
-              if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-                mDigit(false);
-              } else {
-                if (_cnt737 >= 1) {
-                  goto _loop737;
-                } else {
-                  throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-                      LA(1), getFilename(), getLine(), getColumn());
-                }
-              }
-
-              _cnt737++;
-            }
-          _loop737:;
-          }  // ( ... )+
-          {
-            if ((LA(1) == 0x45 /* 'E' */ || LA(1) == 0x65 /* 'e' */)) {
-              mExponent(false);
-            } else {
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 2616 "CPP_parser.g"
-            _ttype = FLOATONE;
-#line 2354 "CPPLexer.cpp"
-          }
-          {
-            switch (LA(1)) {
-              case 0x46 /* 'F' */:
-              case 0x66 /* 'f' */: {
-                mFloatSuffix(false);
-                break;
-              }
-              case 0x4c /* 'L' */:
-              case 0x6c /* 'l' */: {
-                mLongSuffix(false);
-                break;
-              }
-              default: {}
-            }
-          }
-        } else {
-        }
-      }
-    } else if ((LA(1) == 0x30 /* '0' */) && (true) && (true)) {
-      match('0' /* charlit */);
-      {  // ( ... )*
-        for (;;) {
-          if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x37 /* '7' */))) {
-            matchRange('0', '7');
-          } else {
-            goto _loop741;
-          }
-        }
-      _loop741:;
-      }  // ( ... )*
-      {  // ( ... )*
-        for (;;) {
-          switch (LA(1)) {
-            case 0x4c /* 'L' */:
-            case 0x6c /* 'l' */: {
-              mLongSuffix(false);
-              break;
-            }
-            case 0x55 /* 'U' */:
-            case 0x75 /* 'u' */: {
-              mUnsignedSuffix(false);
-              break;
-            }
-            default: { goto _loop743; }
-          }
-        }
-      _loop743:;
-      }  // ( ... )*
-      if (inputState->guessing == 0) {
-#line 2626 "CPP_parser.g"
-        _ttype = OCTALINT;
-#line 2421 "CPPLexer.cpp"
-      }
-    } else if (((LA(1) >= 0x31 /* '1' */ && LA(1) <= 0x39 /* '9' */)) &&
-               (true) && (true)) {
-      matchRange('1', '9');
-      {  // ( ... )*
-        for (;;) {
-          if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */))) {
-            mDigit(false);
-          } else {
-            goto _loop745;
-          }
-        }
-      _loop745:;
-      }  // ( ... )*
-      {  // ( ... )*
-        for (;;) {
-          switch (LA(1)) {
-            case 0x4c /* 'L' */:
-            case 0x6c /* 'l' */: {
-              mLongSuffix(false);
-              break;
-            }
-            case 0x55 /* 'U' */:
-            case 0x75 /* 'u' */: {
-              mUnsignedSuffix(false);
-              break;
-            }
-            default: { goto _loop747; }
-          }
-        }
-      _loop747:;
-      }  // ( ... )*
-      if (inputState->guessing == 0) {
-#line 2631 "CPP_parser.g"
-        _ttype = DECIMALINT;
-#line 2464 "CPPLexer.cpp"
-      }
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-          LA(1), getFilename(), getLine(), getColumn());
-    }
-  }
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-void CPPLexer::mID(bool _createToken) {
-  int _ttype;
-  ANTLR_USE_NAMESPACE(antlr) RefToken _token;
-  ANTLR_USE_NAMESPACE(std) string::size_type _begin = text.length();
-  _ttype = ID;
-  ANTLR_USE_NAMESPACE(std) string::size_type _saveIndex;
-
-  {
-    switch (LA(1)) {
-      case 0x61 /* 'a' */:
-      case 0x62 /* 'b' */:
-      case 0x63 /* 'c' */:
-      case 0x64 /* 'd' */:
-      case 0x65 /* 'e' */:
-      case 0x66 /* 'f' */:
-      case 0x67 /* 'g' */:
-      case 0x68 /* 'h' */:
-      case 0x69 /* 'i' */:
-      case 0x6a /* 'j' */:
-      case 0x6b /* 'k' */:
-      case 0x6c /* 'l' */:
-      case 0x6d /* 'm' */:
-      case 0x6e /* 'n' */:
-      case 0x6f /* 'o' */:
-      case 0x70 /* 'p' */:
-      case 0x71 /* 'q' */:
-      case 0x72 /* 'r' */:
-      case 0x73 /* 's' */:
-      case 0x74 /* 't' */:
-      case 0x75 /* 'u' */:
-      case 0x76 /* 'v' */:
-      case 0x77 /* 'w' */:
-      case 0x78 /* 'x' */:
-      case 0x79 /* 'y' */:
-      case 0x7a /* 'z' */: {
-        matchRange('a', 'z');
-        break;
-      }
-      case 0x41 /* 'A' */:
-      case 0x42 /* 'B' */:
-      case 0x43 /* 'C' */:
-      case 0x44 /* 'D' */:
-      case 0x45 /* 'E' */:
-      case 0x46 /* 'F' */:
-      case 0x47 /* 'G' */:
-      case 0x48 /* 'H' */:
-      case 0x49 /* 'I' */:
-      case 0x4a /* 'J' */:
-      case 0x4b /* 'K' */:
-      case 0x4c /* 'L' */:
-      case 0x4d /* 'M' */:
-      case 0x4e /* 'N' */:
-      case 0x4f /* 'O' */:
-      case 0x50 /* 'P' */:
-      case 0x51 /* 'Q' */:
-      case 0x52 /* 'R' */:
-      case 0x53 /* 'S' */:
-      case 0x54 /* 'T' */:
-      case 0x55 /* 'U' */:
-      case 0x56 /* 'V' */:
-      case 0x57 /* 'W' */:
-      case 0x58 /* 'X' */:
-      case 0x59 /* 'Y' */:
-      case 0x5a /* 'Z' */: {
-        matchRange('A', 'Z');
-        break;
-      }
-      case 0x5f /* '_' */: {
-        match('_' /* charlit */);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr) NoViableAltForCharException(
-            LA(1), getFilename(), getLine(), getColumn());
-      }
-    }
-  }
-  {  // ( ... )*
-    for (;;) {
-      switch (LA(1)) {
-        case 0x61 /* 'a' */:
-        case 0x62 /* 'b' */:
-        case 0x63 /* 'c' */:
-        case 0x64 /* 'd' */:
-        case 0x65 /* 'e' */:
-        case 0x66 /* 'f' */:
-        case 0x67 /* 'g' */:
-        case 0x68 /* 'h' */:
-        case 0x69 /* 'i' */:
-        case 0x6a /* 'j' */:
-        case 0x6b /* 'k' */:
-        case 0x6c /* 'l' */:
-        case 0x6d /* 'm' */:
-        case 0x6e /* 'n' */:
-        case 0x6f /* 'o' */:
-        case 0x70 /* 'p' */:
-        case 0x71 /* 'q' */:
-        case 0x72 /* 'r' */:
-        case 0x73 /* 's' */:
-        case 0x74 /* 't' */:
-        case 0x75 /* 'u' */:
-        case 0x76 /* 'v' */:
-        case 0x77 /* 'w' */:
-        case 0x78 /* 'x' */:
-        case 0x79 /* 'y' */:
-        case 0x7a /* 'z' */: {
-          matchRange('a', 'z');
-          break;
-        }
-        case 0x41 /* 'A' */:
-        case 0x42 /* 'B' */:
-        case 0x43 /* 'C' */:
-        case 0x44 /* 'D' */:
-        case 0x45 /* 'E' */:
-        case 0x46 /* 'F' */:
-        case 0x47 /* 'G' */:
-        case 0x48 /* 'H' */:
-        case 0x49 /* 'I' */:
-        case 0x4a /* 'J' */:
-        case 0x4b /* 'K' */:
-        case 0x4c /* 'L' */:
-        case 0x4d /* 'M' */:
-        case 0x4e /* 'N' */:
-        case 0x4f /* 'O' */:
-        case 0x50 /* 'P' */:
-        case 0x51 /* 'Q' */:
-        case 0x52 /* 'R' */:
-        case 0x53 /* 'S' */:
-        case 0x54 /* 'T' */:
-        case 0x55 /* 'U' */:
-        case 0x56 /* 'V' */:
-        case 0x57 /* 'W' */:
-        case 0x58 /* 'X' */:
-        case 0x59 /* 'Y' */:
-        case 0x5a /* 'Z' */: {
-          matchRange('A', 'Z');
-          break;
-        }
-        case 0x5f /* '_' */: {
-          match('_' /* charlit */);
-          break;
-        }
-        case 0x30 /* '0' */:
-        case 0x31 /* '1' */:
-        case 0x32 /* '2' */:
-        case 0x33 /* '3' */:
-        case 0x34 /* '4' */:
-        case 0x35 /* '5' */:
-        case 0x36 /* '6' */:
-        case 0x37 /* '7' */:
-        case 0x38 /* '8' */:
-        case 0x39 /* '9' */: {
-          matchRange('0', '9');
-          break;
-        }
-        default: { goto _loop756; }
-      }
-    }
-  _loop756:;
-  }  // ( ... )*
-  _ttype = testLiteralsTable(_ttype);
-  if (_createToken && _token == ANTLR_USE_NAMESPACE(antlr) nullToken &&
-      _ttype != ANTLR_USE_NAMESPACE(antlr) Token::SKIP) {
-    _token = makeToken(_ttype);
-    _token->setText(text.substr(_begin, text.length() - _begin));
-  }
-  _returnToken = _token;
-  _saveIndex = 0;
-}
-
-const unsigned long CPPLexer::_tokenSet_0_data_[] = {
-    0UL, 67059712UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// . 0 1 2 3 4 5 6 7 8 9
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_0(_tokenSet_0_data_,
-                                                              10);
-const unsigned long CPPLexer::_tokenSet_1_data_[] = {
-    0UL, 0UL, 2281701374UL, 134217726UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g
-// h i j k l m n o p q r s t u v w x y z
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_1(_tokenSet_1_data_,
-                                                              10);
-const unsigned long CPPLexer::_tokenSet_2_data_[] = {
-    4294958079UL, 4294966271UL, 4294967295UL, 4294967295UL,
-    4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL,
-    0UL,          0UL,          0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12
-// 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f   !
-// \" # $ % & \' ( ) + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C
-// D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d
-// e f g h i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80 0x81 0x82
-// 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90
-// 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e
-// 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac
-// 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba
-// 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_2(_tokenSet_2_data_,
-                                                              16);
-const unsigned long CPPLexer::_tokenSet_3_data_[] = {
-    4294958079UL, 4294967295UL, 4294967295UL, 4294967295UL,
-    4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL,
-    0UL,          0UL,          0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12
-// 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f   !
-// \" # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
-// C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c
-// d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80 0x81
-// 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f
-// 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d
-// 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab
-// 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9
-// 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_3(_tokenSet_3_data_,
-                                                              16);
-const unsigned long CPPLexer::_tokenSet_4_data_[] = {
-    0UL, 2164195460UL, 268435456UL, 22298694UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// \" \' 0 1 2 3 4 5 6 7 ? 0x5c a b f n r t v x
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_4(_tokenSet_4_data_,
-                                                              10);
-const unsigned long CPPLexer::_tokenSet_5_data_[] = {
-    4294958079UL, 4294967291UL, 4026531839UL, 4294967295UL,
-    4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL,
-    0UL,          0UL,          0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12
-// 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f   !
-// # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D
-// E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g
-// h i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80 0x81 0x82 0x83
-// 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91
-// 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f
-// 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad
-// 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb
-// 0xbc 0xbd 0xbe 0xbf 0xc0
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_5(_tokenSet_5_data_,
-                                                              16);
-const unsigned long CPPLexer::_tokenSet_6_data_[] = {
-    0UL, 67043456UL, 126UL, 126UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// \' 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_6(_tokenSet_6_data_,
-                                                              10);
-const unsigned long CPPLexer::_tokenSet_7_data_[] = {
-    4294967295UL, 4294967167UL, 4294967295UL, 4294967295UL,
-    4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL,
-    0UL,          0UL,          0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10
-// 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e
-// 0x1f   ! \" # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
-// @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ `
-// a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80
-// 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e
-// 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c
-// 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa
-// 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8
-// 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_7(_tokenSet_7_data_,
-                                                              16);
-const unsigned long CPPLexer::_tokenSet_8_data_[] = {
-    0UL, 67059712UL, 32UL, 32UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// . 0 1 2 3 4 5 6 7 8 9 E e
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPLexer::_tokenSet_8(_tokenSet_8_data_,
-                                                              10);
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.hpp
deleted file mode 100644
index 2955256..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPLexer.hpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef INC_CPPLexer_hpp_
-#define INC_CPPLexer_hpp_
-
-#include <antlr/config.hpp>
-/* $ANTLR 2.7.7 (20130409): "CPP_parser.g" -> "CPPLexer.hpp"$ */
-#include <antlr/CommonToken.hpp>
-#include <antlr/InputBuffer.hpp>
-#include <antlr/BitSet.hpp>
-#include "STDCTokenTypes.hpp"
-#include <antlr/CharScanner.hpp>
-#line 79 "CPP_parser.g"
-
-// File generated from CPP_parser.g
-// Version 3.1 November 2005
-// This file is best viewed in courier font with tabs set to 4 spaces
-//
-// The statements in this block appear in both CPPLexer.hpp and CPPParser.hpp
-#include <stdio.h>
-#include <string.h>
-#include "antlr/CharScanner.hpp"
-#include "CPPDictionary.hpp"
-
-// Defined in main.cpp
-extern void process_line_directive(const char*, const char*);
-
-// Declared in main.cpp
-extern int deferredLineCount;
-
-#line 30 "CPPLexer.hpp"
-class CUSTOM_API CPPLexer : public ANTLR_USE_NAMESPACE(antlr) CharScanner,
-                            public STDCTokenTypes {
-#line 2303 "CPP_parser.g"
-
-  void deferredNewline() {
-    deferredLineCount++;  // Declared and initialised in main.cpp
-  }
-
-  void newline() {
-    for (; deferredLineCount > 0; deferredLineCount--) {
-      CharScanner::newline();
-    }
-    CharScanner::newline();
-  }
-#line 34 "CPPLexer.hpp"
- private:
-  void initLiterals();
-
- public:
-  bool getCaseSensitiveLiterals() const { return true; }
-
- public:
-  CPPLexer(ANTLR_USE_NAMESPACE(std) istream& in);
-  CPPLexer(ANTLR_USE_NAMESPACE(antlr) InputBuffer& ib);
-  CPPLexer(const ANTLR_USE_NAMESPACE(antlr) LexerSharedInputState& state);
-  ANTLR_USE_NAMESPACE(antlr) RefToken nextToken();
-
- public:
-  void mASSIGNEQUAL(bool _createToken);
-
- public:
-  void mCOLON(bool _createToken);
-
- public:
-  void mCOMMA(bool _createToken);
-
- public:
-  void mQUESTIONMARK(bool _createToken);
-
- public:
-  void mSEMICOLON(bool _createToken);
-
- public:
-  void mPOINTERTO(bool _createToken);
-
- public:
-  void mLPAREN(bool _createToken);
-
- public:
-  void mRPAREN(bool _createToken);
-
- public:
-  void mLSQUARE(bool _createToken);
-
- public:
-  void mRSQUARE(bool _createToken);
-
- public:
-  void mLCURLY(bool _createToken);
-
- public:
-  void mRCURLY(bool _createToken);
-
- public:
-  void mEQUAL(bool _createToken);
-
- public:
-  void mNOTEQUAL(bool _createToken);
-
- public:
-  void mLESSTHANOREQUALTO(bool _createToken);
-
- public:
-  void mLESSTHAN(bool _createToken);
-
- public:
-  void mGREATERTHANOREQUALTO(bool _createToken);
-
- public:
-  void mGREATERTHAN(bool _createToken);
-
- public:
-  void mDIVIDE(bool _createToken);
-
- public:
-  void mDIVIDEEQUAL(bool _createToken);
-
- public:
-  void mPLUS(bool _createToken);
-
- public:
-  void mPLUSEQUAL(bool _createToken);
-
- public:
-  void mPLUSPLUS(bool _createToken);
-
- public:
-  void mMINUS(bool _createToken);
-
- public:
-  void mMINUSEQUAL(bool _createToken);
-
- public:
-  void mMINUSMINUS(bool _createToken);
-
- public:
-  void mSTAR(bool _createToken);
-
- public:
-  void mTIMESEQUAL(bool _createToken);
-
- public:
-  void mMOD(bool _createToken);
-
- public:
-  void mMODEQUAL(bool _createToken);
-
- public:
-  void mSHIFTRIGHT(bool _createToken);
-
- public:
-  void mSHIFTRIGHTEQUAL(bool _createToken);
-
- public:
-  void mSHIFTLEFT(bool _createToken);
-
- public:
-  void mSHIFTLEFTEQUAL(bool _createToken);
-
- public:
-  void mAND(bool _createToken);
-
- public:
-  void mNOT(bool _createToken);
-
- public:
-  void mOR(bool _createToken);
-
- public:
-  void mAMPERSAND(bool _createToken);
-
- public:
-  void mBITWISEANDEQUAL(bool _createToken);
-
- public:
-  void mTILDE(bool _createToken);
-
- public:
-  void mBITWISEOR(bool _createToken);
-
- public:
-  void mBITWISEOREQUAL(bool _createToken);
-
- public:
-  void mBITWISEXOR(bool _createToken);
-
- public:
-  void mBITWISEXOREQUAL(bool _createToken);
-
- public:
-  void mPOINTERTOMBR(bool _createToken);
-
- public:
-  void mDOTMBR(bool _createToken);
-
- public:
-  void mSCOPE(bool _createToken);
-
- public:
-  void mWhitespace(bool _createToken);
-
- public:
-  void mComment(bool _createToken);
-
- protected:
-  void mEndOfLine(bool _createToken);
-
- public:
-  void mCPPComment(bool _createToken);
-
- public:
-  void mPREPROC_DIRECTIVE(bool _createToken);
-
- protected:
-  void mLineDirective(bool _createToken);
-
- protected:
-  void mSpace(bool _createToken);
-
- protected:
-  void mDecimal(bool _createToken);
-
- public:
-  void mStringLiteral(bool _createToken);
-
- protected:
-  void mPragma(bool _createToken);
-
- protected:
-  void mError(bool _createToken);
-
- public:
-  void mCharLiteral(bool _createToken);
-
- protected:
-  void mEscape(bool _createToken);
-
- public:
-  void mWCharLiteral(bool _createToken);
-
- public:
-  void mWStringLiteral(bool _createToken);
-
- protected:
-  void mDigit(bool _createToken);
-
- protected:
-  void mLongSuffix(bool _createToken);
-
- protected:
-  void mUnsignedSuffix(bool _createToken);
-
- protected:
-  void mFloatSuffix(bool _createToken);
-
- protected:
-  void mExponent(bool _createToken);
-
- protected:
-  void mVocabulary(bool _createToken);
-
- public:
-  void mNumber(bool _createToken);
-
- public:
-  void mID(bool _createToken);
-
- private:
-  static const unsigned long _tokenSet_0_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_0;
-  static const unsigned long _tokenSet_1_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_1;
-  static const unsigned long _tokenSet_2_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_2;
-  static const unsigned long _tokenSet_3_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_3;
-  static const unsigned long _tokenSet_4_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_4;
-  static const unsigned long _tokenSet_5_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_5;
-  static const unsigned long _tokenSet_6_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_6;
-  static const unsigned long _tokenSet_7_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_7;
-  static const unsigned long _tokenSet_8_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_8;
-};
-
-#endif /*INC_CPPLexer_hpp_*/
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.cpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.cpp
deleted file mode 100644
index f0278ce..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.cpp
+++ /dev/null
@@ -1,14278 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* $ANTLR 2.7.7 (20130409): "CPP_parser.g" -> "CPPParser.cpp"$ */
-#include "CPPParser.hpp"
-#include <antlr/NoViableAltException.hpp>
-#include <antlr/SemanticException.hpp>
-#include <antlr/ASTFactory.hpp>
-#line 102 "CPP_parser.g"
-
-// File generated from CPP_parser.g
-// Version 3.1 November 2005
-// This file is best viewed in courier font with tabs set to 4 spaces
-//
-// The statements in this block appear only in CPPParser.cpp and not in
-// CPPLexer.cpp
-
-// These constants used in the previous version (3.0 July 2004) have now been
-// replaced by the following,
-// ID_VAR_NAME is now CPPSymbol::otVariable
-// ID_FUN_NAME is now CPPSymbol::otFunction
-// ID_INPUT_PARAMETER is now not used
-// ID_CLASS_DEF is now CPPSymbol::otClass
-// ID_SYSTEM_FUNCTION is now not used
-// ID_CONST_DECL is now not used
-// ID_TYPEDEF_VAR is now CPPSymbol::otTypedef
-
-int statementTrace =
-    2;  // Used to control selected (level) tracing (see support.cpp)
-// 1 Shows which external and member statements selected
-// 2 Shows above plus all declarations/definitions
-// 3 reserved for future use
-// 4 and above available for user
-
-void CPPParser::init() {
-  antlrTrace(false);  // This is a dynamic trace facility for use with
-                      // -traceParser etc.
-  // It requires modification in LLkParser.cpp and LLkParser.hpp
-  // otherwise it should be commented out (see MyReadMe.txt)
-  // true shows antlr trace (or can be set and reset during parsing)
-  // false stops showing antlr trace
-  // Provided the parser is always generated with -traceParser this
-  // facility allows trace output to be turned on or off by changing
-  // the setting here from false to true or vice versa and then
-  // recompiling and linking CPPParser only thus avoiding the need
-  // to use antlr.Tool to re-generate the lexer and parser again
-  // with (or without) -traceParser.
-  // Antlr trace can also be turned on and off dynamically using
-  // antlrTrace_on or antlrTrace_off statements inserted into the
-  // source code being parsed (See below).
-
-  // Creates a dictionary to hold symbols with 4001 buckets, 200 scopes and
-  // 800,000 characters
-  // These can be changed to suit the size of program(s) being parsed
-  symbols = new CPPDictionary(4001, 200, 800000);
-
-  // Set template parameter scope - Not used at present
-  templateParameterScope =
-      symbols->getCurrentScopeIndex();  // Set template parameter scope to 0
-
-  symbols->saveScope();  // Advance currentScope from 0 to 1
-  // Set "external" scope for all types
-  externalScope =
-      symbols->getCurrentScopeIndex();  // Set "external" scope to 1 for types
-
-  // Declare predefined scope "std" in external scope
-  CPPSymbol* a = new CPPSymbol("std", CPPSymbol::otTypedef);
-  symbols->define("std", a);
-
-  symbols->saveScope();  // Advance currentScope from 1 to 2 (and higher) for
-                         // all other symbols
-  // treated as locals
-
-  // Global flags to allow for nested declarations
-  _td = false;      // For typedef
-  _fd = false;      // For friend
-  _sc = scInvalid;  // For StorageClass
-  _tq = tqInvalid;  // For TypeQualifier
-  _ts = tsInvalid;  // For TypeSpecifier
-  _fs = fsInvalid;  // For FunctionSpecifier
-
-  functionDefinition = 0;
-  qualifierPrefix[0] = '\0';
-  enclosingClass = (char*)"";
-  assign_stmt_RHS_found = 0;
-  in_parameter_list = false;
-  K_and_R = false;  // used to distinguish old K & R parameter definitions
-  in_return = false;
-  is_address = false;
-  is_pointer = false;
-}
-
-#line 85 "CPPParser.cpp"
-CPPParser::CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenBuffer& tokenBuf, int k)
-    : ANTLR_USE_NAMESPACE(antlr) LLkParser(tokenBuf, k) {}
-
-CPPParser::CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenBuffer& tokenBuf)
-    : ANTLR_USE_NAMESPACE(antlr) LLkParser(tokenBuf, 2) {}
-
-CPPParser::CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenStream& lexer, int k)
-    : ANTLR_USE_NAMESPACE(antlr) LLkParser(lexer, k) {}
-
-CPPParser::CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenStream& lexer)
-    : ANTLR_USE_NAMESPACE(antlr) LLkParser(lexer, 2) {}
-
-CPPParser::CPPParser(const ANTLR_USE_NAMESPACE(antlr)
-                         ParserSharedInputState& state)
-    : ANTLR_USE_NAMESPACE(antlr) LLkParser(state, 2) {}
-
-void CPPParser::translation_unit() {
-  try {  // for error handling
-    if (inputState->guessing == 0) {
-#line 376 "CPP_parser.g"
-      enterExternalScope();
-#line 117 "CPPParser.cpp"
-    }
-    {  // ( ... )+
-      int _cnt3 = 0;
-      for (;;) {
-        if ((_tokenSet_0.member(LA(1)))) {
-          external_declaration();
-        } else {
-          if (_cnt3 >= 1) {
-            goto _loop3;
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-
-        _cnt3++;
-      }
-    _loop3:;
-    }  // ( ... )+
-    match(ANTLR_USE_NAMESPACE(antlr) Token::EOF_TYPE);
-    if (inputState->guessing == 0) {
-#line 378 "CPP_parser.g"
-      exitExternalScope();
-#line 137 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_1);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::external_declaration() {
-#line 381 "CPP_parser.g"
-  char* s;
-  K_and_R = false;
-  FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-
-#line 156 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_namespace: {
-          if (inputState->guessing == 0) {
-#line 539 "CPP_parser.g"
-            if (statementTrace >= 1) {
-              printf("%d external_declaration Namespace definition\n",
-                     LT(1)->getLine());
-            }
-
-#line 168 "CPPParser.cpp"
-          }
-          match(LITERAL_namespace);
-          namespace_definition();
-          break;
-        }
-        case SEMICOLON: {
-          if (inputState->guessing == 0) {
-#line 551 "CPP_parser.g"
-            if (statementTrace >= 1) {
-              printf("%d external_declaration Semicolon\n", LT(1)->getLine());
-            }
-
-#line 181 "CPPParser.cpp"
-          }
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 554 "CPP_parser.g"
-            end_of_stmt();
-#line 187 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_antlrTrace_on: {
-          match(LITERAL_antlrTrace_on);
-          if (inputState->guessing == 0) {
-#line 558 "CPP_parser.g"
-            antlrTrace(true);
-#line 197 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_antlrTrace_off: {
-          match(LITERAL_antlrTrace_off);
-          if (inputState->guessing == 0) {
-#line 561 "CPP_parser.g"
-            antlrTrace(false);
-#line 207 "CPPParser.cpp"
-          }
-          break;
-        }
-        default:
-          bool synPredMatched7 = false;
-          if (((LA(1) == LITERAL_template) && (LA(2) == LESSTHAN))) {
-            int _m7 = mark();
-            synPredMatched7 = true;
-            inputState->guessing++;
-            try {
-              {
-                match(LITERAL_template);
-                match(LESSTHAN);
-                match(GREATERTHAN);
-              }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched7 = false;
-            }
-            rewind(_m7);
-            inputState->guessing--;
-          }
-          if (synPredMatched7) {
-            if (inputState->guessing == 0) {
-#line 390 "CPP_parser.g"
-              if (statementTrace >= 1) {
-                printf(
-                    "%d external_declaration template "
-                    "explicit-specialisation\n",
-                    LT(1)->getLine());
-              }
-
-#line 236 "CPPParser.cpp"
-            }
-            match(LITERAL_template);
-            match(LESSTHAN);
-            match(GREATERTHAN);
-            external_declaration();
-          } else {
-            bool synPredMatched9 = false;
-            if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
-              int _m9 = mark();
-              synPredMatched9 = true;
-              inputState->guessing++;
-              try {
-                { match(LITERAL_typedef); }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched9 = false;
-              }
-              rewind(_m9);
-              inputState->guessing--;
-            }
-            if (synPredMatched9) {
-              {
-                bool synPredMatched12 = false;
-                if (((LA(1) == LITERAL_typedef) &&
-                     ((LA(2) >= LITERAL_struct && LA(2) <= LITERAL_class)))) {
-                  int _m12 = mark();
-                  synPredMatched12 = true;
-                  inputState->guessing++;
-                  try {
-                    {
-                      match(LITERAL_typedef);
-                      class_specifier();
-                    }
-                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                               RecognitionException& pe) {
-                    synPredMatched12 = false;
-                  }
-                  rewind(_m12);
-                  inputState->guessing--;
-                }
-                if (synPredMatched12) {
-                  if (inputState->guessing == 0) {
-#line 399 "CPP_parser.g"
-                    if (statementTrace >= 1) {
-                      printf("%d external_declaration Typedef class type\n",
-                             LT(1)->getLine());
-                    }
-
-#line 285 "CPPParser.cpp"
-                  }
-                  match(LITERAL_typedef);
-                  class_decl_or_def(fs);
-                  if (inputState->guessing == 0) {
-#line 402 "CPP_parser.g"
-                    _td = true;
-#line 292 "CPPParser.cpp"
-                  }
-                  {
-                    switch (LA(1)) {
-                      case ID:
-                      case LITERAL__stdcall:
-                      case LITERAL___stdcall:
-                      case LPAREN:
-                      case OPERATOR:
-                      case LITERAL_this:
-                      case LITERAL_true:
-                      case LITERAL_false:
-                      case TILDE:
-                      case STAR:
-                      case AMPERSAND:
-                      case SCOPE:
-                      case LITERAL__cdecl:
-                      case LITERAL___cdecl:
-                      case LITERAL__near:
-                      case LITERAL___near:
-                      case LITERAL__far:
-                      case LITERAL___far:
-                      case LITERAL___interrupt:
-                      case LITERAL_pascal:
-                      case LITERAL__pascal:
-                      case LITERAL___pascal: {
-                        init_declarator_list();
-                        break;
-                      }
-                      case SEMICOLON: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(SEMICOLON);
-                  if (inputState->guessing == 0) {
-#line 402 "CPP_parser.g"
-                    end_of_stmt();
-#line 336 "CPPParser.cpp"
-                  }
-                } else {
-                  bool synPredMatched15 = false;
-                  if (((LA(1) == LITERAL_typedef) && (LA(2) == LITERAL_enum))) {
-                    int _m15 = mark();
-                    synPredMatched15 = true;
-                    inputState->guessing++;
-                    try {
-                      {
-                        match(LITERAL_typedef);
-                        match(LITERAL_enum);
-                      }
-                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                 RecognitionException& pe) {
-                      synPredMatched15 = false;
-                    }
-                    rewind(_m15);
-                    inputState->guessing--;
-                  }
-                  if (synPredMatched15) {
-                    if (inputState->guessing == 0) {
-#line 405 "CPP_parser.g"
-                      if (statementTrace >= 1) {
-                        printf("%d external_declaration Typedef enum type\n",
-                               LT(1)->getLine());
-                      }
-
-#line 363 "CPPParser.cpp"
-                    }
-                    match(LITERAL_typedef);
-                    enum_specifier();
-                    if (inputState->guessing == 0) {
-#line 408 "CPP_parser.g"
-                      _td = true;
-#line 370 "CPPParser.cpp"
-                    }
-                    {
-                      switch (LA(1)) {
-                        case ID:
-                        case LITERAL__stdcall:
-                        case LITERAL___stdcall:
-                        case LPAREN:
-                        case OPERATOR:
-                        case LITERAL_this:
-                        case LITERAL_true:
-                        case LITERAL_false:
-                        case TILDE:
-                        case STAR:
-                        case AMPERSAND:
-                        case SCOPE:
-                        case LITERAL__cdecl:
-                        case LITERAL___cdecl:
-                        case LITERAL__near:
-                        case LITERAL___near:
-                        case LITERAL__far:
-                        case LITERAL___far:
-                        case LITERAL___interrupt:
-                        case LITERAL_pascal:
-                        case LITERAL__pascal:
-                        case LITERAL___pascal: {
-                          init_declarator_list();
-                          break;
-                        }
-                        case SEMICOLON: {
-                          break;
-                        }
-                        default: {
-                          throw ANTLR_USE_NAMESPACE(antlr)
-                              NoViableAltException(LT(1), getFilename());
-                        }
-                      }
-                    }
-                    match(SEMICOLON);
-                    if (inputState->guessing == 0) {
-#line 408 "CPP_parser.g"
-                      end_of_stmt();
-#line 414 "CPPParser.cpp"
-                    }
-                  } else {
-                    bool synPredMatched18 = false;
-                    if (((_tokenSet_2.member(LA(1))) &&
-                         (_tokenSet_3.member(LA(2))))) {
-                      int _m18 = mark();
-                      synPredMatched18 = true;
-                      inputState->guessing++;
-                      try {
-                        {
-                          declaration_specifiers();
-                          function_declarator(0);
-                          match(SEMICOLON);
-                        }
-                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                   RecognitionException& pe) {
-                        synPredMatched18 = false;
-                      }
-                      rewind(_m18);
-                      inputState->guessing--;
-                    }
-                    if (synPredMatched18) {
-                      if (inputState->guessing == 0) {
-#line 411 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d external_declaration Typedef function type\n",
-                              LT(1)->getLine());
-                        }
-
-#line 442 "CPPParser.cpp"
-                      }
-                      declaration();
-                    } else if ((_tokenSet_2.member(LA(1))) &&
-                               (_tokenSet_3.member(LA(2)))) {
-                      if (inputState->guessing == 0) {
-#line 416 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d external_declaration Typedef variable type\n",
-                              LT(1)->getLine());
-                        }
-
-#line 452 "CPPParser.cpp"
-                      }
-                      declaration();
-                    } else {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-              }
-            } else {
-              bool synPredMatched22 = false;
-              if (((LA(1) == LITERAL_template) && (LA(2) == LESSTHAN))) {
-                int _m22 = mark();
-                synPredMatched22 = true;
-                inputState->guessing++;
-                try {
-                  {
-                    template_head();
-                    {  // ( ... )*
-                      for (;;) {
-                        if ((_tokenSet_4.member(LA(1)))) {
-                          fs = function_specifier();
-                        } else {
-                          goto _loop21;
-                        }
-                      }
-                    _loop21:;
-                    }  // ( ... )*
-                    class_specifier();
-                  }
-                } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                  synPredMatched22 = false;
-                }
-                rewind(_m22);
-                inputState->guessing--;
-              }
-              if (synPredMatched22) {
-                if (inputState->guessing == 0) {
-#line 424 "CPP_parser.g"
-                  if (statementTrace >= 1) {
-                    printf(
-                        "%d external_declaration Templated class decl or def\n",
-                        LT(1)->getLine());
-                  }
-
-#line 498 "CPPParser.cpp"
-                }
-                template_head();
-                {  // ( ... )*
-                  for (;;) {
-                    if ((_tokenSet_4.member(LA(1)))) {
-                      fs = function_specifier();
-                    } else {
-                      goto _loop24;
-                    }
-                  }
-                _loop24:;
-                }  // ( ... )*
-                class_decl_or_def(fs);
-                {
-                  switch (LA(1)) {
-                    case ID:
-                    case LITERAL__stdcall:
-                    case LITERAL___stdcall:
-                    case LPAREN:
-                    case OPERATOR:
-                    case LITERAL_this:
-                    case LITERAL_true:
-                    case LITERAL_false:
-                    case TILDE:
-                    case STAR:
-                    case AMPERSAND:
-                    case SCOPE:
-                    case LITERAL__cdecl:
-                    case LITERAL___cdecl:
-                    case LITERAL__near:
-                    case LITERAL___near:
-                    case LITERAL__far:
-                    case LITERAL___far:
-                    case LITERAL___interrupt:
-                    case LITERAL_pascal:
-                    case LITERAL__pascal:
-                    case LITERAL___pascal: {
-                      init_declarator_list();
-                      break;
-                    }
-                    case SEMICOLON: {
-                      break;
-                    }
-                    default: {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-                match(SEMICOLON);
-                if (inputState->guessing == 0) {
-#line 427 "CPP_parser.g"
-                  end_of_stmt();
-#line 556 "CPPParser.cpp"
-                }
-              } else {
-                bool synPredMatched28 = false;
-                if (((LA(1) == LITERAL_enum) && (_tokenSet_5.member(LA(2))))) {
-                  int _m28 = mark();
-                  synPredMatched28 = true;
-                  inputState->guessing++;
-                  try {
-                    {
-                      match(LITERAL_enum);
-                      {
-                        switch (LA(1)) {
-                          case ID: {
-                            match(ID);
-                            break;
-                          }
-                          case LCURLY: {
-                            break;
-                          }
-                          default: {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                      }
-                      match(LCURLY);
-                    }
-                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                               RecognitionException& pe) {
-                    synPredMatched28 = false;
-                  }
-                  rewind(_m28);
-                  inputState->guessing--;
-                }
-                if (synPredMatched28) {
-                  if (inputState->guessing == 0) {
-#line 431 "CPP_parser.g"
-                    if (statementTrace >= 1) {
-                      printf("%d external_declaration Enum definition\n",
-                             LT(1)->getLine());
-                    }
-
-#line 600 "CPPParser.cpp"
-                  }
-                  enum_specifier();
-                  {
-                    switch (LA(1)) {
-                      case ID:
-                      case LITERAL__stdcall:
-                      case LITERAL___stdcall:
-                      case LPAREN:
-                      case OPERATOR:
-                      case LITERAL_this:
-                      case LITERAL_true:
-                      case LITERAL_false:
-                      case TILDE:
-                      case STAR:
-                      case AMPERSAND:
-                      case SCOPE:
-                      case LITERAL__cdecl:
-                      case LITERAL___cdecl:
-                      case LITERAL__near:
-                      case LITERAL___near:
-                      case LITERAL__far:
-                      case LITERAL___far:
-                      case LITERAL___interrupt:
-                      case LITERAL_pascal:
-                      case LITERAL__pascal:
-                      case LITERAL___pascal: {
-                        init_declarator_list();
-                        break;
-                      }
-                      case SEMICOLON: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(SEMICOLON);
-                  if (inputState->guessing == 0) {
-#line 434 "CPP_parser.g"
-                    end_of_stmt();
-#line 645 "CPPParser.cpp"
-                  }
-                } else {
-                  bool synPredMatched32 = false;
-                  if (((_tokenSet_6.member(LA(1))) &&
-                       (_tokenSet_7.member(LA(2))))) {
-                    int _m32 = mark();
-                    synPredMatched32 = true;
-                    inputState->guessing++;
-                    try {
-                      {
-                        {
-                          switch (LA(1)) {
-                            case LITERAL_template: {
-                              template_head();
-                              break;
-                            }
-                            case ID:
-                            case LITERAL_inline:
-                            case LITERAL__inline:
-                            case LITERAL___inline:
-                            case LITERAL_virtual:
-                            case TILDE:
-                            case SCOPE: {
-                              break;
-                            }
-                            default: {
-                              throw ANTLR_USE_NAMESPACE(antlr)
-                                  NoViableAltException(LT(1), getFilename());
-                            }
-                          }
-                        }
-                        dtor_head(1);
-                        match(LCURLY);
-                      }
-                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                 RecognitionException& pe) {
-                      synPredMatched32 = false;
-                    }
-                    rewind(_m32);
-                    inputState->guessing--;
-                  }
-                  if (synPredMatched32) {
-                    if (inputState->guessing == 0) {
-#line 438 "CPP_parser.g"
-                      if (statementTrace >= 1) {
-                        printf(
-                            "%d external_declaration Destructor definition\n",
-                            LT(1)->getLine());
-                      }
-
-#line 695 "CPPParser.cpp"
-                    }
-                    {
-                      switch (LA(1)) {
-                        case LITERAL_template: {
-                          template_head();
-                          break;
-                        }
-                        case ID:
-                        case LITERAL_inline:
-                        case LITERAL__inline:
-                        case LITERAL___inline:
-                        case LITERAL_virtual:
-                        case TILDE:
-                        case SCOPE: {
-                          break;
-                        }
-                        default: {
-                          throw ANTLR_USE_NAMESPACE(antlr)
-                              NoViableAltException(LT(1), getFilename());
-                        }
-                      }
-                    }
-                    dtor_head(1);
-                    dtor_body();
-                  } else {
-                    bool synPredMatched36 = false;
-                    if (((_tokenSet_8.member(LA(1))) &&
-                         (_tokenSet_9.member(LA(2))))) {
-                      int _m36 = mark();
-                      synPredMatched36 = true;
-                      inputState->guessing++;
-                      try {
-                        {
-                          {
-                            if ((true) && (true)) {
-                              ctor_decl_spec();
-                            } else {
-                            }
-                          }
-                          if (!(qualifiedItemIsOneOf(qiCtor))) {
-                            throw ANTLR_USE_NAMESPACE(antlr) SemanticException(
-                                "qualifiedItemIsOneOf(qiCtor)");
-                          }
-                        }
-                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                   RecognitionException& pe) {
-                        synPredMatched36 = false;
-                      }
-                      rewind(_m36);
-                      inputState->guessing--;
-                    }
-                    if (synPredMatched36) {
-                      if (inputState->guessing == 0) {
-#line 451 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d external_declaration Constructor "
-                              "definition\n",
-                              LT(1)->getLine());
-                        }
-
-#line 755 "CPPParser.cpp"
-                      }
-                      ctor_definition();
-                    } else {
-                      bool synPredMatched39 = false;
-                      if (((_tokenSet_10.member(LA(1))) &&
-                           (_tokenSet_11.member(LA(2))))) {
-                        int _m39 = mark();
-                        synPredMatched39 = true;
-                        inputState->guessing++;
-                        try {
-                          {
-                            {
-                              switch (LA(1)) {
-                                case LITERAL_inline: {
-                                  match(LITERAL_inline);
-                                  break;
-                                }
-                                case ID:
-                                case OPERATOR:
-                                case SCOPE: {
-                                  break;
-                                }
-                                default: {
-                                  throw ANTLR_USE_NAMESPACE(antlr)
-                                      NoViableAltException(LT(1),
-                                                           getFilename());
-                                }
-                              }
-                            }
-                            scope_override();
-                            conversion_function_decl_or_def();
-                          }
-                        } catch (ANTLR_USE_NAMESPACE(antlr)
-                                     RecognitionException& pe) {
-                          synPredMatched39 = false;
-                        }
-                        rewind(_m39);
-                        inputState->guessing--;
-                      }
-                      if (synPredMatched39) {
-                        if (inputState->guessing == 0) {
-#line 458 "CPP_parser.g"
-                          if (statementTrace >= 1) {
-                            printf(
-                                "%d external_declaration Operator function\n",
-                                LT(1)->getLine());
-                          }
-
-#line 802 "CPPParser.cpp"
-                        }
-                        {
-                          switch (LA(1)) {
-                            case LITERAL_inline: {
-                              match(LITERAL_inline);
-                              break;
-                            }
-                            case ID:
-                            case OPERATOR:
-                            case SCOPE: {
-                              break;
-                            }
-                            default: {
-                              throw ANTLR_USE_NAMESPACE(antlr)
-                                  NoViableAltException(LT(1), getFilename());
-                            }
-                          }
-                        }
-                        s = scope_override();
-                        conversion_function_decl_or_def();
-                      } else {
-                        bool synPredMatched42 = false;
-                        if (((_tokenSet_12.member(LA(1))) &&
-                             (_tokenSet_13.member(LA(2))))) {
-                          int _m42 = mark();
-                          synPredMatched42 = true;
-                          inputState->guessing++;
-                          try {
-                            {
-                              declaration_specifiers();
-                              function_declarator(0);
-                              match(SEMICOLON);
-                            }
-                          } catch (ANTLR_USE_NAMESPACE(antlr)
-                                       RecognitionException& pe) {
-                            synPredMatched42 = false;
-                          }
-                          rewind(_m42);
-                          inputState->guessing--;
-                        }
-                        if (synPredMatched42) {
-                          if (inputState->guessing == 0) {
-#line 465 "CPP_parser.g"
-                            if (statementTrace >= 1) {
-                              printf(
-                                  "%d external_declaration Function "
-                                  "declaration\n",
-                                  LT(1)->getLine());
-                            }
-
-#line 851 "CPPParser.cpp"
-                          }
-                          declaration_specifiers();
-                          function_declarator(0);
-                          match(SEMICOLON);
-                          if (inputState->guessing == 0) {
-#line 468 "CPP_parser.g"
-                            end_of_stmt();
-#line 859 "CPPParser.cpp"
-                          }
-                        } else {
-                          bool synPredMatched44 = false;
-                          if (((_tokenSet_14.member(LA(1))) &&
-                               (_tokenSet_15.member(LA(2))))) {
-                            int _m44 = mark();
-                            synPredMatched44 = true;
-                            inputState->guessing++;
-                            try {
-                              {
-                                declaration_specifiers();
-                                function_declarator(1);
-                                match(LCURLY);
-                              }
-                            } catch (ANTLR_USE_NAMESPACE(antlr)
-                                         RecognitionException& pe) {
-                              synPredMatched44 = false;
-                            }
-                            rewind(_m44);
-                            inputState->guessing--;
-                          }
-                          if (synPredMatched44) {
-                            if (inputState->guessing == 0) {
-#line 472 "CPP_parser.g"
-                              if (statementTrace >= 1) {
-                                printf(
-                                    "%d external_declaration Function "
-                                    "definition\n",
-                                    LT(1)->getLine());
-                              }
-
-#line 887 "CPPParser.cpp"
-                            }
-                            function_definition();
-                          } else {
-                            bool synPredMatched46 = false;
-                            if (((_tokenSet_14.member(LA(1))) &&
-                                 (_tokenSet_15.member(LA(2))))) {
-                              int _m46 = mark();
-                              synPredMatched46 = true;
-                              inputState->guessing++;
-                              try {
-                                {
-                                  declaration_specifiers();
-                                  function_declarator(1);
-                                  declaration();
-                                }
-                              } catch (ANTLR_USE_NAMESPACE(antlr)
-                                           RecognitionException& pe) {
-                                synPredMatched46 = false;
-                              }
-                              rewind(_m46);
-                              inputState->guessing--;
-                            }
-                            if (synPredMatched46) {
-                              if (inputState->guessing == 0) {
-#line 479 "CPP_parser.g"
-                                K_and_R = true;
-                                if (statementTrace >= 1) {
-                                  printf(
-                                      "%d external_declaration K & R function "
-                                      "definition\n",
-                                      LT(1)->getLine());
-                                }
-
-#line 917 "CPPParser.cpp"
-                              }
-                              function_definition();
-                            } else {
-                              bool synPredMatched48 = false;
-                              if (((_tokenSet_14.member(LA(1))) &&
-                                   (_tokenSet_15.member(LA(2))))) {
-                                int _m48 = mark();
-                                synPredMatched48 = true;
-                                inputState->guessing++;
-                                try {
-                                  {
-                                    function_declarator(1);
-                                    declaration();
-                                  }
-                                } catch (ANTLR_USE_NAMESPACE(antlr)
-                                             RecognitionException& pe) {
-                                  synPredMatched48 = false;
-                                }
-                                rewind(_m48);
-                                inputState->guessing--;
-                              }
-                              if (synPredMatched48) {
-                                if (inputState->guessing == 0) {
-#line 487 "CPP_parser.g"
-                                  K_and_R = true;
-                                  if (statementTrace >= 1) {
-                                    printf(
-                                        "%d external_declaration K & R "
-                                        "function definition without return "
-                                        "type\n",
-                                        LT(1)->getLine());
-                                  }
-
-#line 946 "CPPParser.cpp"
-                                }
-                                function_definition();
-                              } else {
-                                bool synPredMatched53 = false;
-                                if (((_tokenSet_16.member(LA(1))) &&
-                                     (_tokenSet_17.member(LA(2))))) {
-                                  int _m53 = mark();
-                                  synPredMatched53 = true;
-                                  inputState->guessing++;
-                                  try {
-                                    {
-                                      {
-                                        switch (LA(1)) {
-                                          case LITERAL_friend: {
-                                            match(LITERAL_friend);
-                                            break;
-                                          }
-                                          case LITERAL_inline:
-                                          case LITERAL_struct:
-                                          case LITERAL_union:
-                                          case LITERAL_class:
-                                          case LITERAL__inline:
-                                          case LITERAL___inline:
-                                          case LITERAL_virtual:
-                                          case LITERAL_explicit: {
-                                            break;
-                                          }
-                                          default: {
-                                            throw ANTLR_USE_NAMESPACE(antlr)
-                                                NoViableAltException(
-                                                    LT(1), getFilename());
-                                          }
-                                        }
-                                      }
-                                      {  // ( ... )*
-                                        for (;;) {
-                                          if ((_tokenSet_4.member(LA(1)))) {
-                                            fs = function_specifier();
-                                          } else {
-                                            goto _loop52;
-                                          }
-                                        }
-                                      _loop52:;
-                                      }  // ( ... )*
-                                      class_specifier();
-                                    }
-                                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                                               RecognitionException& pe) {
-                                    synPredMatched53 = false;
-                                  }
-                                  rewind(_m53);
-                                  inputState->guessing--;
-                                }
-                                if (synPredMatched53) {
-                                  if (inputState->guessing == 0) {
-#line 495 "CPP_parser.g"
-                                    if (statementTrace >= 1) {
-                                      printf(
-                                          "%d external_declaration Class decl "
-                                          "or def\n",
-                                          LT(1)->getLine());
-                                    }
-
-#line 1009 "CPPParser.cpp"
-                                  }
-                                  {
-                                    switch (LA(1)) {
-                                      case LITERAL_friend: {
-                                        match(LITERAL_friend);
-                                        break;
-                                      }
-                                      case LITERAL_inline:
-                                      case LITERAL_struct:
-                                      case LITERAL_union:
-                                      case LITERAL_class:
-                                      case LITERAL__inline:
-                                      case LITERAL___inline:
-                                      case LITERAL_virtual:
-                                      case LITERAL_explicit: {
-                                        break;
-                                      }
-                                      default: {
-                                        throw ANTLR_USE_NAMESPACE(antlr)
-                                            NoViableAltException(LT(1),
-                                                                 getFilename());
-                                      }
-                                    }
-                                  }
-                                  {  // ( ... )*
-                                    for (;;) {
-                                      if ((_tokenSet_4.member(LA(1)))) {
-                                        fs = function_specifier();
-                                      } else {
-                                        goto _loop56;
-                                      }
-                                    }
-                                  _loop56:;
-                                  }  // ( ... )*
-                                  class_decl_or_def(fs);
-                                  {
-                                    switch (LA(1)) {
-                                      case ID:
-                                      case LITERAL__stdcall:
-                                      case LITERAL___stdcall:
-                                      case LPAREN:
-                                      case OPERATOR:
-                                      case LITERAL_this:
-                                      case LITERAL_true:
-                                      case LITERAL_false:
-                                      case TILDE:
-                                      case STAR:
-                                      case AMPERSAND:
-                                      case SCOPE:
-                                      case LITERAL__cdecl:
-                                      case LITERAL___cdecl:
-                                      case LITERAL__near:
-                                      case LITERAL___near:
-                                      case LITERAL__far:
-                                      case LITERAL___far:
-                                      case LITERAL___interrupt:
-                                      case LITERAL_pascal:
-                                      case LITERAL__pascal:
-                                      case LITERAL___pascal: {
-                                        init_declarator_list();
-                                        break;
-                                      }
-                                      case SEMICOLON: {
-                                        break;
-                                      }
-                                      default: {
-                                        throw ANTLR_USE_NAMESPACE(antlr)
-                                            NoViableAltException(LT(1),
-                                                                 getFilename());
-                                      }
-                                    }
-                                  }
-                                  match(SEMICOLON);
-                                  if (inputState->guessing == 0) {
-#line 498 "CPP_parser.g"
-                                    end_of_stmt();
-#line 1090 "CPPParser.cpp"
-                                  }
-                                } else if ((LA(1) == LITERAL_template) &&
-                                           (LA(2) == LESSTHAN)) {
-                                  if (inputState->guessing == 0) {
-#line 501 "CPP_parser.g"
-                                    beginTemplateDeclaration();
-#line 1097 "CPPParser.cpp"
-                                  }
-                                  template_head();
-                                  {
-                                    bool synPredMatched61 = false;
-                                    if (((_tokenSet_12.member(LA(1))) &&
-                                         (_tokenSet_18.member(LA(2))))) {
-                                      int _m61 = mark();
-                                      synPredMatched61 = true;
-                                      inputState->guessing++;
-                                      try {
-                                        {
-                                          declaration_specifiers();
-                                          {
-                                            switch (LA(1)) {
-                                              case ID:
-                                              case LITERAL__stdcall:
-                                              case LITERAL___stdcall:
-                                              case LPAREN:
-                                              case OPERATOR:
-                                              case LITERAL_this:
-                                              case LITERAL_true:
-                                              case LITERAL_false:
-                                              case TILDE:
-                                              case STAR:
-                                              case AMPERSAND:
-                                              case SCOPE:
-                                              case LITERAL__cdecl:
-                                              case LITERAL___cdecl:
-                                              case LITERAL__near:
-                                              case LITERAL___near:
-                                              case LITERAL__far:
-                                              case LITERAL___far:
-                                              case LITERAL___interrupt:
-                                              case LITERAL_pascal:
-                                              case LITERAL__pascal:
-                                              case LITERAL___pascal: {
-                                                init_declarator_list();
-                                                break;
-                                              }
-                                              case SEMICOLON: {
-                                                break;
-                                              }
-                                              default: {
-                                                throw ANTLR_USE_NAMESPACE(antlr)
-                                                    NoViableAltException(
-                                                        LT(1), getFilename());
-                                              }
-                                            }
-                                          }
-                                          match(SEMICOLON);
-                                          if (inputState->guessing == 0) {
-#line 505 "CPP_parser.g"
-                                            end_of_stmt();
-#line 1151 "CPPParser.cpp"
-                                          }
-                                        }
-                                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                                   RecognitionException& pe) {
-                                        synPredMatched61 = false;
-                                      }
-                                      rewind(_m61);
-                                      inputState->guessing--;
-                                    }
-                                    if (synPredMatched61) {
-                                      if (inputState->guessing == 0) {
-#line 506 "CPP_parser.g"
-                                        if (statementTrace >= 1) {
-                                          printf(
-                                              "%d external_declaration "
-                                              "Templated class forward "
-                                              "declaration\n",
-                                              LT(1)->getLine());
-                                        }
-
-#line 1167 "CPPParser.cpp"
-                                      }
-                                      declaration_specifiers();
-                                      {
-                                        switch (LA(1)) {
-                                          case ID:
-                                          case LITERAL__stdcall:
-                                          case LITERAL___stdcall:
-                                          case LPAREN:
-                                          case OPERATOR:
-                                          case LITERAL_this:
-                                          case LITERAL_true:
-                                          case LITERAL_false:
-                                          case TILDE:
-                                          case STAR:
-                                          case AMPERSAND:
-                                          case SCOPE:
-                                          case LITERAL__cdecl:
-                                          case LITERAL___cdecl:
-                                          case LITERAL__near:
-                                          case LITERAL___near:
-                                          case LITERAL__far:
-                                          case LITERAL___far:
-                                          case LITERAL___interrupt:
-                                          case LITERAL_pascal:
-                                          case LITERAL__pascal:
-                                          case LITERAL___pascal: {
-                                            init_declarator_list();
-                                            break;
-                                          }
-                                          case SEMICOLON: {
-                                            break;
-                                          }
-                                          default: {
-                                            throw ANTLR_USE_NAMESPACE(antlr)
-                                                NoViableAltException(
-                                                    LT(1), getFilename());
-                                          }
-                                        }
-                                      }
-                                      match(SEMICOLON);
-                                      if (inputState->guessing == 0) {
-#line 509 "CPP_parser.g"
-                                        end_of_stmt();
-#line 1212 "CPPParser.cpp"
-                                      }
-                                    } else {
-                                      bool synPredMatched64 = false;
-                                      if (((_tokenSet_2.member(LA(1))) &&
-                                           (_tokenSet_3.member(LA(2))))) {
-                                        int _m64 = mark();
-                                        synPredMatched64 = true;
-                                        inputState->guessing++;
-                                        try {
-                                          {
-                                            declaration_specifiers();
-                                            function_declarator(0);
-                                            match(SEMICOLON);
-                                          }
-                                        } catch (ANTLR_USE_NAMESPACE(antlr)
-                                                     RecognitionException& pe) {
-                                          synPredMatched64 = false;
-                                        }
-                                        rewind(_m64);
-                                        inputState->guessing--;
-                                      }
-                                      if (synPredMatched64) {
-                                        if (inputState->guessing == 0) {
-#line 513 "CPP_parser.g"
-                                          if (statementTrace >= 1) {
-                                            printf(
-                                                "%d external_declaration "
-                                                "Templated function "
-                                                "declaration\n",
-                                                LT(1)->getLine());
-                                          }
-
-#line 1240 "CPPParser.cpp"
-                                        }
-                                        declaration();
-                                      } else {
-                                        bool synPredMatched66 = false;
-                                        if (((_tokenSet_14.member(LA(1))) &&
-                                             (_tokenSet_15.member(LA(2))))) {
-                                          int _m66 = mark();
-                                          synPredMatched66 = true;
-                                          inputState->guessing++;
-                                          try {
-                                            {
-                                              declaration_specifiers();
-                                              function_declarator(1);
-                                              match(LCURLY);
-                                            }
-                                          } catch (ANTLR_USE_NAMESPACE(
-                                              antlr) RecognitionException& pe) {
-                                            synPredMatched66 = false;
-                                          }
-                                          rewind(_m66);
-                                          inputState->guessing--;
-                                        }
-                                        if (synPredMatched66) {
-                                          if (inputState->guessing == 0) {
-#line 520 "CPP_parser.g"
-                                            if (statementTrace >= 1) {
-                                              printf(
-                                                  "%d external_declaration_10c "
-                                                  "Templated function "
-                                                  "definition\n",
-                                                  LT(1)->getLine());
-                                            }
-
-#line 1269 "CPPParser.cpp"
-                                          }
-                                          function_definition();
-                                        } else {
-                                          bool synPredMatched68 = false;
-                                          if (((_tokenSet_8.member(LA(1))) &&
-                                               (_tokenSet_9.member(LA(2))))) {
-                                            int _m68 = mark();
-                                            synPredMatched68 = true;
-                                            inputState->guessing++;
-                                            try {
-                                              {
-                                                ctor_decl_spec();
-                                                if (!(qualifiedItemIsOneOf(
-                                                        qiCtor))) {
-                                                  throw ANTLR_USE_NAMESPACE(
-                                                      antlr)
-                                                      SemanticException(
-                                                          "qualifiedItemIsOneOf"
-                                                          "(qiCtor)");
-                                                }
-                                              }
-                                            } catch (
-                                                ANTLR_USE_NAMESPACE(antlr)
-                                                    RecognitionException& pe) {
-                                              synPredMatched68 = false;
-                                            }
-                                            rewind(_m68);
-                                            inputState->guessing--;
-                                          }
-                                          if (synPredMatched68) {
-                                            if (inputState->guessing == 0) {
-#line 531 "CPP_parser.g"
-                                              if (statementTrace >= 1) {
-                                                printf(
-                                                    "%d external_declaration "
-                                                    "Templated constructor "
-                                                    "definition\n",
-                                                    LT(1)->getLine());
-                                              }
-
-#line 1298 "CPPParser.cpp"
-                                            }
-                                            ctor_definition();
-                                          } else {
-                                            throw ANTLR_USE_NAMESPACE(antlr)
-                                                NoViableAltException(
-                                                    LT(1), getFilename());
-                                          }
-                                        }
-                                      }
-                                    }
-                                  }
-                                  if (inputState->guessing == 0) {
-#line 536 "CPP_parser.g"
-                                    endTemplateDeclaration();
-#line 1310 "CPPParser.cpp"
-                                  }
-                                } else if ((_tokenSet_2.member(LA(1))) &&
-                                           (_tokenSet_3.member(LA(2)))) {
-                                  if (inputState->guessing == 0) {
-#line 545 "CPP_parser.g"
-                                    if (statementTrace >= 1) {
-                                      printf(
-                                          "%d external_declaration "
-                                          "Declaration\n",
-                                          LT(1)->getLine());
-                                    }
-
-#line 1319 "CPPParser.cpp"
-                                  }
-                                  declaration();
-                                } else {
-                                  throw ANTLR_USE_NAMESPACE(antlr)
-                                      NoViableAltException(LT(1),
-                                                           getFilename());
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_19);
-    } else {
-      throw;
-    }
-  }
-}
-
-CPPParser::TypeSpecifier CPPParser::class_specifier() {
-#line 1016 "CPP_parser.g"
-  CPPParser::TypeSpecifier ts = tsInvalid;
-#line 1342 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_class: {
-          match(LITERAL_class);
-          if (inputState->guessing == 0) {
-#line 1018 "CPP_parser.g"
-            ts = tsCLASS;
-#line 1353 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_struct: {
-          match(LITERAL_struct);
-          if (inputState->guessing == 0) {
-#line 1019 "CPP_parser.g"
-            ts = tsSTRUCT;
-#line 1363 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_union: {
-          match(LITERAL_union);
-          if (inputState->guessing == 0) {
-#line 1020 "CPP_parser.g"
-            ts = tsUNION;
-#line 1373 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_12);
-    } else {
-      throw;
-    }
-  }
-  return ts;
-}
-
-void CPPParser::class_decl_or_def(FunctionSpecifier fs) {
-#line 1042 "CPP_parser.g"
-  char* saveClass;
-  char* id;
-  TypeSpecifier ts = tsInvalid;  // Available for use
-
-#line 1403 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_class: {
-          match(LITERAL_class);
-          if (inputState->guessing == 0) {
-#line 1048 "CPP_parser.g"
-            ts = tsCLASS;
-#line 1414 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_struct: {
-          match(LITERAL_struct);
-          if (inputState->guessing == 0) {
-#line 1049 "CPP_parser.g"
-            ts = tsSTRUCT;
-#line 1424 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_union: {
-          match(LITERAL_union);
-          if (inputState->guessing == 0) {
-#line 1050 "CPP_parser.g"
-            ts = tsUNION;
-#line 1434 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    class_prefix();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == LITERAL_GFIGNORE)) {
-          match(LITERAL_GFIGNORE);
-          match(LPAREN);
-          expression();
-          match(RPAREN);
-          if (inputState->guessing == 0) {
-#line 1053 "CPP_parser.g"
-#line 1454 "CPPParser.cpp"
-          }
-        } else {
-          goto _loop208;
-        }
-      }
-    _loop208:;
-    }  // ( ... )*
-    {
-      switch (LA(1)) {
-        case ID:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case SCOPE: {
-          id = qualified_id();
-          {
-            switch (LA(1)) {
-              case SEMICOLON:
-              case ID:
-              case LITERAL__stdcall:
-              case LITERAL___stdcall:
-              case LPAREN:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case TILDE:
-              case STAR:
-              case AMPERSAND:
-              case SCOPE:
-              case LITERAL__cdecl:
-              case LITERAL___cdecl:
-              case LITERAL__near:
-              case LITERAL___near:
-              case LITERAL__far:
-              case LITERAL___far:
-              case LITERAL___interrupt:
-              case LITERAL_pascal:
-              case LITERAL__pascal:
-              case LITERAL___pascal: {
-                if (inputState->guessing == 0) {
-#line 1058 "CPP_parser.g"
-                  classForwardDeclaration(ts, fs, id);
-#line 1503 "CPPParser.cpp"
-                }
-                break;
-              }
-              case LCURLY:
-              case COLON: {
-                if (inputState->guessing == 0) {
-#line 1060 "CPP_parser.g"
-                  saveClass = enclosingClass;
-                  enclosingClass = symbols->strdup(id);
-
-#line 1515 "CPPParser.cpp"
-                }
-                {
-                  switch (LA(1)) {
-                    case COLON: {
-                      base_clause();
-                      break;
-                    }
-                    case LCURLY: {
-                      break;
-                    }
-                    default: {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-                match(LCURLY);
-                if (inputState->guessing == 0) {
-#line 1065 "CPP_parser.g"
-                  beginClassDefinition(ts, id);
-#line 1538 "CPPParser.cpp"
-                }
-                {  // ( ... )*
-                  for (;;) {
-                    if ((_tokenSet_20.member(LA(1)))) {
-                      member_declaration();
-                    } else {
-                      goto _loop215;
-                    }
-                  }
-                _loop215:;
-                }  // ( ... )*
-                if (inputState->guessing == 0) {
-#line 1067 "CPP_parser.g"
-                  endClassDefinition();
-#line 1555 "CPPParser.cpp"
-                }
-                match(RCURLY);
-                if (inputState->guessing == 0) {
-#line 1069 "CPP_parser.g"
-                  enclosingClass = saveClass;
-#line 1561 "CPPParser.cpp"
-                }
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LCURLY: {
-          match(LCURLY);
-          if (inputState->guessing == 0) {
-#line 1073 "CPP_parser.g"
-            saveClass = enclosingClass;
-            enclosingClass = (char*)"__anonymous";
-#line 1579 "CPPParser.cpp"
-          }
-          if (inputState->guessing == 0) {
-#line 1074 "CPP_parser.g"
-            beginClassDefinition(ts, "anonymous");
-#line 1584 "CPPParser.cpp"
-          }
-          {  // ( ... )*
-            for (;;) {
-              if ((_tokenSet_20.member(LA(1)))) {
-                member_declaration();
-              } else {
-                goto _loop217;
-              }
-            }
-          _loop217:;
-          }  // ( ... )*
-          if (inputState->guessing == 0) {
-#line 1076 "CPP_parser.g"
-            endClassDefinition();
-#line 1601 "CPPParser.cpp"
-          }
-          match(RCURLY);
-          if (inputState->guessing == 0) {
-#line 1078 "CPP_parser.g"
-            enclosingClass = saveClass;
-#line 1607 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_21);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::init_declarator_list() {
-  try {  // for error handling
-    init_declarator();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          init_declarator();
-        } else {
-          goto _loop242;
-        }
-      }
-    _loop242:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_22);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::enum_specifier() {
-#line 1108 "CPP_parser.g"
-  char* id;
-#line 1659 "CPPParser.cpp"
-
-  try {  // for error handling
-    match(LITERAL_enum);
-    {
-      switch (LA(1)) {
-        case LCURLY: {
-          match(LCURLY);
-          enumerator_list();
-          match(RCURLY);
-          break;
-        }
-        case ID:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case SCOPE: {
-          id = qualified_id();
-          if (inputState->guessing == 0) {
-#line 1116 "CPP_parser.g"
-            beginEnumDefinition(id);
-#line 1683 "CPPParser.cpp"
-          }
-          {
-            switch (LA(1)) {
-              case LCURLY: {
-                match(LCURLY);
-                enumerator_list();
-                match(RCURLY);
-                break;
-              }
-              case SEMICOLON:
-              case ID:
-              case COLON:
-              case LITERAL__stdcall:
-              case LITERAL___stdcall:
-              case LPAREN:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case TILDE:
-              case STAR:
-              case AMPERSAND:
-              case SCOPE:
-              case LITERAL__cdecl:
-              case LITERAL___cdecl:
-              case LITERAL__near:
-              case LITERAL___near:
-              case LITERAL__far:
-              case LITERAL___far:
-              case LITERAL___interrupt:
-              case LITERAL_pascal:
-              case LITERAL__pascal:
-              case LITERAL___pascal: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 1118 "CPP_parser.g"
-            endEnumDefinition();
-#line 1730 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_23);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::declaration_specifiers() {
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken gfArr = ANTLR_USE_NAMESPACE(antlr) nullToken;
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken gfArrList = ANTLR_USE_NAMESPACE(antlr) nullToken;
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken gfArrElem = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 885 "CPP_parser.g"
-  // Locals
-  bool td = false;              // For typedef
-  bool fd = false;              // For friend
-  StorageClass sc = scInvalid;  // auto,register,static,extern,mutable
-  TypeQualifier tq =
-      tqInvalid;  // const,volatile  // aka cv_qualifier See type_qualifier
-  TypeSpecifier ts = tsInvalid;  // char,int,double, etc., class,struct,union
-  FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-
-#line 1764 "CPPParser.cpp"
-
-  try {  // for error handling
-    if (inputState->guessing == 0) {
-#line 895 "CPP_parser.g"
-
-      // Global flags to allow for nested declarations
-      _td = false;      // For typedef
-      _fd = false;      // For friend
-      _sc = scInvalid;  // For StorageClass    //
-                        // auto,register,static,extern,mutable
-      _tq = tqInvalid;  // For TypeQualifier  // aka cv_qualifier See
-                        // type_qualifier
-      _ts = tsInvalid;  // For TypeSpecifier
-      _fs = fsInvalid;  // For FunctionSpecifier  // inline,virtual,explicit
-
-#line 1779 "CPPParser.cpp"
-    }
-    {
-      {  // ( ... )*
-        for (;;) {
-          switch (LA(1)) {
-            case LITERAL_typedef: {
-              match(LITERAL_typedef);
-              if (inputState->guessing == 0) {
-#line 906 "CPP_parser.g"
-                td = true;
-#line 1791 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_friend: {
-              match(LITERAL_friend);
-              if (inputState->guessing == 0) {
-#line 907 "CPP_parser.g"
-                fd = true;
-#line 1801 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_extern:
-            case LITERAL_auto:
-            case LITERAL_register:
-            case LITERAL_static:
-            case LITERAL_mutable: {
-              sc = storage_class_specifier();
-              break;
-            }
-            case LITERAL_const:
-            case LITERAL___const:
-            case LITERAL_volatile:
-            case LITERAL___volatile__: {
-              tq = type_qualifier();
-              break;
-            }
-            case LITERAL_struct:
-            case LITERAL_union:
-            case LITERAL_class: {
-              ts = class_specifier();
-              break;
-            }
-            case LITERAL_enum: {
-              match(LITERAL_enum);
-              break;
-            }
-            case LITERAL_inline:
-            case LITERAL__inline:
-            case LITERAL___inline:
-            case LITERAL_virtual:
-            case LITERAL_explicit: {
-              fs = function_specifier();
-              break;
-            }
-            case LITERAL__stdcall:
-            case LITERAL___stdcall: {
-              {
-                switch (LA(1)) {
-                  case LITERAL__stdcall: {
-                    match(LITERAL__stdcall);
-                    break;
-                  }
-                  case LITERAL___stdcall: {
-                    match(LITERAL___stdcall);
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-              break;
-            }
-            case LITERAL_GFEXCLUDE: {
-              match(LITERAL_GFEXCLUDE);
-              if (inputState->guessing == 0) {
-#line 914 "CPP_parser.g"
-                tq |= tqGFEXCLUDE;
-                _tq |= tqGFEXCLUDE;
-#line 1872 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFINCLUDE: {
-              match(LITERAL_GFINCLUDE);
-              if (inputState->guessing == 0) {
-#line 915 "CPP_parser.g"
-                tq |= tqGFINCLUDE;
-                _tq |= tqGFINCLUDE;
-#line 1882 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFID: {
-              match(LITERAL_GFID);
-              if (inputState->guessing == 0) {
-#line 916 "CPP_parser.g"
-                tq |= tqGFID;
-                _tq |= tqGFID;
-#line 1892 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFUNREAD: {
-              match(LITERAL_GFUNREAD);
-              if (inputState->guessing == 0) {
-#line 917 "CPP_parser.g"
-                tq |= tqGFUNREAD;
-                _tq |= tqGFUNREAD;
-#line 1902 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFARRAYSIZE: {
-              match(LITERAL_GFARRAYSIZE);
-              match(LPAREN);
-              gfArr = LT(1);
-              match(ID);
-              match(RPAREN);
-              if (inputState->guessing == 0) {
-#line 918 "CPP_parser.g"
-                gfArraySize(gfArr->getText().data());
-#line 1916 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFARRAYSIZES: {
-              match(LITERAL_GFARRAYSIZES);
-              match(LPAREN);
-              gfArrList = LT(1);
-              match(StringLiteral);
-              match(RPAREN);
-              if (inputState->guessing == 0) {
-#line 919 "CPP_parser.g"
-                gfArraySize(gfArrList->getText().data());
-#line 1930 "CPPParser.cpp"
-              }
-              break;
-            }
-            case LITERAL_GFARRAYELEMSIZE: {
-              match(LITERAL_GFARRAYELEMSIZE);
-              match(LPAREN);
-              gfArrElem = LT(1);
-              match(ID);
-              match(RPAREN);
-              if (inputState->guessing == 0) {
-#line 920 "CPP_parser.g"
-                gfArrayElemSize(gfArrElem->getText().data());
-#line 1944 "CPPParser.cpp"
-              }
-              break;
-            }
-            default: { goto _loop174; }
-          }
-        }
-      _loop174:;
-      }  // ( ... )*
-      ts = type_specifier();
-    }
-    if (inputState->guessing == 0) {
-#line 924 "CPP_parser.g"
-      declarationSpecifier(td, fd, sc, tq, ts, fs);
-#line 1961 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_24);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::function_declarator(int definition) {
-  try {  // for error handling
-    bool synPredMatched298 = false;
-    if (((_tokenSet_25.member(LA(1))) && (_tokenSet_26.member(LA(2))))) {
-      int _m298 = mark();
-      synPredMatched298 = true;
-      inputState->guessing++;
-      try {
-        { ptr_operator(); }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched298 = false;
-      }
-      rewind(_m298);
-      inputState->guessing--;
-    }
-    if (synPredMatched298) {
-      ptr_operator();
-      function_declarator(definition);
-    } else if ((_tokenSet_27.member(LA(1))) && (_tokenSet_28.member(LA(2)))) {
-      function_direct_declarator(definition);
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          NoViableAltException(LT(1), getFilename());
-    }
-
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_29);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::declaration() {
-  try {  // for error handling
-    bool synPredMatched159 = false;
-    if (((LA(1) == LITERAL_extern) && (LA(2) == StringLiteral))) {
-      int _m159 = mark();
-      synPredMatched159 = true;
-      inputState->guessing++;
-      try {
-        {
-          match(LITERAL_extern);
-          match(StringLiteral);
-        }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched159 = false;
-      }
-      rewind(_m159);
-      inputState->guessing--;
-    }
-    if (synPredMatched159) {
-      linkage_specification();
-    } else if ((_tokenSet_12.member(LA(1))) && (_tokenSet_18.member(LA(2)))) {
-      if (inputState->guessing == 0) {
-#line 853 "CPP_parser.g"
-        beginDeclaration();
-#line 2044 "CPPParser.cpp"
-      }
-      declaration_specifiers();
-      {
-        switch (LA(1)) {
-          case ID:
-          case LITERAL__stdcall:
-          case LITERAL___stdcall:
-          case LPAREN:
-          case OPERATOR:
-          case LITERAL_this:
-          case LITERAL_true:
-          case LITERAL_false:
-          case TILDE:
-          case STAR:
-          case AMPERSAND:
-          case SCOPE:
-          case LITERAL__cdecl:
-          case LITERAL___cdecl:
-          case LITERAL__near:
-          case LITERAL___near:
-          case LITERAL__far:
-          case LITERAL___far:
-          case LITERAL___interrupt:
-          case LITERAL_pascal:
-          case LITERAL__pascal:
-          case LITERAL___pascal: {
-            init_declarator_list();
-            break;
-          }
-          case SEMICOLON: {
-            break;
-          }
-          default: {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-      }
-      match(SEMICOLON);
-      if (inputState->guessing == 0) {
-#line 854 "CPP_parser.g"
-        end_of_stmt();
-#line 2089 "CPPParser.cpp"
-      }
-      if (inputState->guessing == 0) {
-#line 855 "CPP_parser.g"
-        endDeclaration();
-#line 2094 "CPPParser.cpp"
-      }
-    } else if ((LA(1) == LITERAL_using)) {
-      using_statement();
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          NoViableAltException(LT(1), getFilename());
-    }
-
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_head() {
-  try {  // for error handling
-    match(LITERAL_template);
-    match(LESSTHAN);
-    template_parameter_list();
-    match(GREATERTHAN);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_31);
-    } else {
-      throw;
-    }
-  }
-}
-
-CPPParser::FunctionSpecifier CPPParser::function_specifier() {
-#line 937 "CPP_parser.g"
-  CPPParser::FunctionSpecifier fs = fsInvalid;
-#line 2136 "CPPParser.cpp"
-
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_inline:
-      case LITERAL__inline:
-      case LITERAL___inline: {
-        {
-          switch (LA(1)) {
-            case LITERAL_inline: {
-              match(LITERAL_inline);
-              break;
-            }
-            case LITERAL__inline: {
-              match(LITERAL__inline);
-              break;
-            }
-            case LITERAL___inline: {
-              match(LITERAL___inline);
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        if (inputState->guessing == 0) {
-#line 938 "CPP_parser.g"
-          fs = fsINLINE;
-#line 2170 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_virtual: {
-        match(LITERAL_virtual);
-        if (inputState->guessing == 0) {
-#line 939 "CPP_parser.g"
-          fs = fsVIRTUAL;
-#line 2180 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_explicit: {
-        match(LITERAL_explicit);
-        if (inputState->guessing == 0) {
-#line 940 "CPP_parser.g"
-          fs = fsEXPLICIT;
-#line 2190 "CPPParser.cpp"
-        }
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_14);
-    } else {
-      throw;
-    }
-  }
-  return fs;
-}
-
-void CPPParser::dtor_head(int definition) {
-  try {  // for error handling
-    dtor_decl_spec();
-    dtor_declarator(definition);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_32);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::dtor_body() {
-  try {  // for error handling
-    compound_statement();
-    if (inputState->guessing == 0) {
-#line 1476 "CPP_parser.g"
-      endDestructorDefinition();
-#line 2236 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ctor_decl_spec() {
-  try {  // for error handling
-    {    // ( ... )*
-      for (;;) {
-        switch (LA(1)) {
-          case LITERAL_inline:
-          case LITERAL__inline:
-          case LITERAL___inline: {
-            {
-              switch (LA(1)) {
-                case LITERAL_inline: {
-                  match(LITERAL_inline);
-                  break;
-                }
-                case LITERAL__inline: {
-                  match(LITERAL__inline);
-                  break;
-                }
-                case LITERAL___inline: {
-                  match(LITERAL___inline);
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-            break;
-          }
-          case LITERAL_explicit: {
-            match(LITERAL_explicit);
-            break;
-          }
-          default: { goto _loop311; }
-        }
-      }
-    _loop311:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_33);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ctor_definition() {
-  try {  // for error handling
-    ctor_head();
-    ctor_body();
-    if (inputState->guessing == 0) {
-#line 1385 "CPP_parser.g"
-      endConstructorDefinition();
-#line 2316 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-char* CPPParser::scope_override() {
-#line 2226 "CPP_parser.g"
-  char* s = NULL;
-#line 2332 "CPPParser.cpp"
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 2226 "CPP_parser.g"
-
-  static char sitem[CPPParser_MaxQualifiedItemSize + 1];
-  sitem[0] = '\0';
-
-#line 2339 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case SCOPE: {
-          match(SCOPE);
-          if (inputState->guessing == 0) {
-#line 2232 "CPP_parser.g"
-            strcat(sitem, "::");
-#line 2350 "CPPParser.cpp"
-          }
-          break;
-        }
-        case ID:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case TILDE:
-        case STAR: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {  // ( ... )*
-      for (;;) {
-        if (((LA(1) == ID) && (LA(2) == LESSTHAN || LA(2) == SCOPE)) &&
-            (scopedItem())) {
-          id = LT(1);
-          match(ID);
-          {
-            switch (LA(1)) {
-              case LESSTHAN: {
-                match(LESSTHAN);
-                template_argument_list();
-                match(GREATERTHAN);
-                break;
-              }
-              case SCOPE: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(SCOPE);
-          {
-            switch (LA(1)) {
-              case LITERAL_template: {
-                match(LITERAL_template);
-                break;
-              }
-              case ID:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case TILDE:
-              case STAR: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 2238 "CPP_parser.g"
-
-            CPPSymbol* cs = (CPPSymbol*)symbols->lookup((id->getText()).data());
-            strcat(sitem, (id->getText()).data());
-            strcat(sitem, "::");
-
-#line 2425 "CPPParser.cpp"
-          }
-        } else {
-          goto _loop587;
-        }
-      }
-    _loop587:;
-    }  // ( ... )*
-    if (inputState->guessing == 0) {
-#line 2244 "CPP_parser.g"
-      s = sitem;
-#line 2438 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_34);
-    } else {
-      throw;
-    }
-  }
-  return s;
-}
-
-void CPPParser::conversion_function_decl_or_def() {
-#line 1302 "CPP_parser.g"
-  CPPParser::TypeQualifier tq;
-#line 2455 "CPPParser.cpp"
-
-  try {  // for error handling
-    match(OPERATOR);
-    declaration_specifiers();
-    {
-      switch (LA(1)) {
-        case STAR: {
-          match(STAR);
-          break;
-        }
-        case AMPERSAND: {
-          match(AMPERSAND);
-          break;
-        }
-        case LESSTHAN:
-        case LPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {
-      switch (LA(1)) {
-        case LESSTHAN: {
-          match(LESSTHAN);
-          template_parameter_list();
-          match(GREATERTHAN);
-          break;
-        }
-        case LPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case LITERAL_typedef:
-        case LITERAL_enum:
-        case ID:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LPAREN:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case ELLIPSIS:
-        case SCOPE:
-        case LITERAL__cdecl:
-        case LITERAL___cdecl:
-        case LITERAL__near:
-        case LITERAL___near:
-        case LITERAL__far:
-        case LITERAL___far:
-        case LITERAL___interrupt:
-        case LITERAL_pascal:
-        case LITERAL__pascal:
-        case LITERAL___pascal: {
-          parameter_list();
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-    {  // ( ... )*
-      for (;;) {
-        if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-          tq = type_qualifier();
-        } else {
-          goto _loop293;
-        }
-      }
-    _loop293:;
-    }  // ( ... )*
-    {
-      switch (LA(1)) {
-        case LITERAL_throw: {
-          exception_specification();
-          break;
-        }
-        case SEMICOLON:
-        case LCURLY: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {
-      switch (LA(1)) {
-        case LCURLY: {
-          compound_statement();
-          break;
-        }
-        case SEMICOLON: {
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 1311 "CPP_parser.g"
-            end_of_stmt();
-#line 2645 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::function_definition() {
-  try {  // for error handling
-    if (inputState->guessing == 0) {
-#line 822 "CPP_parser.g"
-
-      beginFunctionDefinition();
-
-#line 2674 "CPPParser.cpp"
-    }
-    {
-      if (((_tokenSet_12.member(LA(1))) && (_tokenSet_13.member(LA(2)))) &&
-          ((!(LA(1) == SCOPE || LA(1) == ID) ||
-            qualifiedItemIsOneOf(qiType | qiCtor)))) {
-        declaration_specifiers();
-        function_declarator(1);
-        {
-          if ((_tokenSet_35.member(LA(1))) && (_tokenSet_36.member(LA(2)))) {
-            {  // ( ... )*
-              for (;;) {
-                if ((_tokenSet_2.member(LA(1)))) {
-                  declaration();
-                } else {
-                  goto _loop153;
-                }
-              }
-            _loop153:;
-            }  // ( ... )*
-            if (inputState->guessing == 0) {
-#line 831 "CPP_parser.g"
-              in_parameter_list = false;
-#line 2697 "CPPParser.cpp"
-            }
-          } else if ((LA(1) == LCURLY) && (_tokenSet_37.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        compound_statement();
-      } else if ((_tokenSet_38.member(LA(1))) && (_tokenSet_39.member(LA(2)))) {
-        function_declarator(1);
-        {
-          if ((_tokenSet_35.member(LA(1))) && (_tokenSet_36.member(LA(2)))) {
-            {  // ( ... )*
-              for (;;) {
-                if ((_tokenSet_2.member(LA(1)))) {
-                  declaration();
-                } else {
-                  goto _loop156;
-                }
-              }
-            _loop156:;
-            }  // ( ... )*
-            if (inputState->guessing == 0) {
-#line 840 "CPP_parser.g"
-              in_parameter_list = false;
-#line 2728 "CPPParser.cpp"
-            }
-          } else if ((LA(1) == LCURLY) && (_tokenSet_37.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        compound_statement();
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 844 "CPP_parser.g"
-      endFunctionDefinition();
-#line 2748 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::namespace_definition() {
-  ANTLR_USE_NAMESPACE(antlr) RefToken ns = ANTLR_USE_NAMESPACE(antlr) nullToken;
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case ID: {
-          ns = LT(1);
-          match(ID);
-          if (inputState->guessing == 0) {
-#line 568 "CPP_parser.g"
-            declaratorID((ns->getText()).data(), qiNamespace);
-#line 2774 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LCURLY: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(LCURLY);
-    if (inputState->guessing == 0) {
-#line 570 "CPP_parser.g"
-      enterNewLocalScope();
-#line 2792 "CPPParser.cpp"
-    }
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_0.member(LA(1)))) {
-          external_declaration();
-        } else {
-          goto _loop72;
-        }
-      }
-    _loop72:;
-    }  // ( ... )*
-    if (inputState->guessing == 0) {
-#line 572 "CPP_parser.g"
-      exitNamespaceScope();
-      exitLocalScope();
-#line 2809 "CPPParser.cpp"
-    }
-    match(RCURLY);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_19);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::namespace_alias_definition() {
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken ns2 = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 577 "CPP_parser.g"
-  char* qid;
-#line 2827 "CPPParser.cpp"
-
-  try {  // for error handling
-    match(LITERAL_namespace);
-    ns2 = LT(1);
-    match(ID);
-    if (inputState->guessing == 0) {
-#line 581 "CPP_parser.g"
-      declaratorID((ns2->getText()).data(), qiNamespace);
-#line 2836 "CPPParser.cpp"
-    }
-    match(ASSIGNEQUAL);
-    qid = qualified_id();
-    match(SEMICOLON);
-    if (inputState->guessing == 0) {
-#line 582 "CPP_parser.g"
-      end_of_stmt();
-#line 2844 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-char* CPPParser::qualified_id() {
-#line 1143 "CPP_parser.g"
-  char* q = NULL;
-#line 2860 "CPPParser.cpp"
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 1143 "CPP_parser.g"
-
-  char* so = NULL;
-  static char qitem[CPPParser_MaxQualifiedItemSize + 1];
-
-#line 2867 "CPPParser.cpp"
-
-  try {  // for error handling
-    so = scope_override();
-    if (inputState->guessing == 0) {
-#line 1150 "CPP_parser.g"
-      strcpy(qitem, so);
-#line 2874 "CPPParser.cpp"
-    }
-    {
-      switch (LA(1)) {
-        case ID: {
-          id = LT(1);
-          match(ID);
-          {
-            switch (LA(1)) {
-              case LESSTHAN: {
-                match(LESSTHAN);
-                template_argument_list();
-                match(GREATERTHAN);
-                break;
-              }
-              case GREATERTHAN:
-              case SEMICOLON:
-              case ID:
-              case LCURLY:
-              case ASSIGNEQUAL:
-              case COLON:
-              case LITERAL__stdcall:
-              case LITERAL___stdcall:
-              case LPAREN:
-              case RPAREN:
-              case COMMA:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case LSQUARE:
-              case TILDE:
-              case STAR:
-              case AMPERSAND:
-              case ELLIPSIS:
-              case SCOPE:
-              case LITERAL__cdecl:
-              case LITERAL___cdecl:
-              case LITERAL__near:
-              case LITERAL___near:
-              case LITERAL__far:
-              case LITERAL___far:
-              case LITERAL___interrupt:
-              case LITERAL_pascal:
-              case LITERAL__pascal:
-              case LITERAL___pascal: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 1155 "CPP_parser.g"
-            strcat(qitem, (id->getText()).data());
-#line 2934 "CPPParser.cpp"
-          }
-          break;
-        }
-        case OPERATOR: {
-          match(OPERATOR);
-          optor();
-          if (inputState->guessing == 0) {
-#line 1158 "CPP_parser.g"
-            strcat(qitem, "operator");
-            strcat(qitem, "NYI");
-#line 2945 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_this: {
-          match(LITERAL_this);
-          break;
-        }
-        case LITERAL_true:
-        case LITERAL_false: {
-          {
-            switch (LA(1)) {
-              case LITERAL_true: {
-                match(LITERAL_true);
-                break;
-              }
-              case LITERAL_false: {
-                match(LITERAL_false);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1164 "CPP_parser.g"
-      q = qitem;
-#line 2986 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_41);
-    } else {
-      throw;
-    }
-  }
-  return q;
-}
-
-void CPPParser::member_declaration() {
-#line 585 "CPP_parser.g"
-  char* q;
-  FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-
-#line 3005 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_public:
-        case LITERAL_protected:
-        case LITERAL_private: {
-          if (inputState->guessing == 0) {
-#line 799 "CPP_parser.g"
-            if (statementTrace >= 1) {
-              printf("%d member_declaration Access specifier\n",
-                     LT(1)->getLine());
-            }
-
-#line 3019 "CPPParser.cpp"
-          }
-          access_specifier();
-          match(COLON);
-          break;
-        }
-        case SEMICOLON: {
-          if (inputState->guessing == 0) {
-#line 805 "CPP_parser.g"
-            if (statementTrace >= 1) {
-              printf("%d member_declaration Semicolon\n", LT(1)->getLine());
-            }
-
-#line 3032 "CPPParser.cpp"
-          }
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 808 "CPP_parser.g"
-            end_of_stmt();
-#line 3038 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_antlrTrace_on: {
-          match(LITERAL_antlrTrace_on);
-          if (inputState->guessing == 0) {
-#line 812 "CPP_parser.g"
-            antlrTrace(true);
-#line 3048 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_antlrTrace_off: {
-          match(LITERAL_antlrTrace_off);
-          if (inputState->guessing == 0) {
-#line 815 "CPP_parser.g"
-            antlrTrace(false);
-#line 3058 "CPPParser.cpp"
-          }
-          break;
-        }
-        default:
-          bool synPredMatched77 = false;
-          if (((LA(1) == LITERAL_template) && (LA(2) == LESSTHAN))) {
-            int _m77 = mark();
-            synPredMatched77 = true;
-            inputState->guessing++;
-            try {
-              {
-                match(LITERAL_template);
-                match(LESSTHAN);
-                match(GREATERTHAN);
-              }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched77 = false;
-            }
-            rewind(_m77);
-            inputState->guessing--;
-          }
-          if (synPredMatched77) {
-            if (inputState->guessing == 0) {
-#line 593 "CPP_parser.g"
-              if (statementTrace >= 1) {
-                printf(
-                    "%d member_declaration Template explicit-specialisation\n",
-                    LT(1)->getLine());
-              }
-
-#line 3087 "CPPParser.cpp"
-            }
-            match(LITERAL_template);
-            match(LESSTHAN);
-            match(GREATERTHAN);
-            member_declaration();
-          } else {
-            bool synPredMatched79 = false;
-            if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
-              int _m79 = mark();
-              synPredMatched79 = true;
-              inputState->guessing++;
-              try {
-                { match(LITERAL_typedef); }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched79 = false;
-              }
-              rewind(_m79);
-              inputState->guessing--;
-            }
-            if (synPredMatched79) {
-              {
-                bool synPredMatched82 = false;
-                if (((LA(1) == LITERAL_typedef) &&
-                     ((LA(2) >= LITERAL_struct && LA(2) <= LITERAL_class)))) {
-                  int _m82 = mark();
-                  synPredMatched82 = true;
-                  inputState->guessing++;
-                  try {
-                    {
-                      match(LITERAL_typedef);
-                      class_specifier();
-                    }
-                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                               RecognitionException& pe) {
-                    synPredMatched82 = false;
-                  }
-                  rewind(_m82);
-                  inputState->guessing--;
-                }
-                if (synPredMatched82) {
-                  if (inputState->guessing == 0) {
-#line 602 "CPP_parser.g"
-                    if (statementTrace >= 1) {
-                      printf("%d member_declaration Typedef class type\n",
-                             LT(1)->getLine());
-                    }
-
-#line 3136 "CPPParser.cpp"
-                  }
-                  match(LITERAL_typedef);
-                  class_decl_or_def(fs);
-                  if (inputState->guessing == 0) {
-#line 605 "CPP_parser.g"
-                    _td = true;
-#line 3143 "CPPParser.cpp"
-                  }
-                  {
-                    switch (LA(1)) {
-                      case ID:
-                      case LITERAL__stdcall:
-                      case LITERAL___stdcall:
-                      case LPAREN:
-                      case OPERATOR:
-                      case LITERAL_this:
-                      case LITERAL_true:
-                      case LITERAL_false:
-                      case TILDE:
-                      case STAR:
-                      case AMPERSAND:
-                      case SCOPE:
-                      case LITERAL__cdecl:
-                      case LITERAL___cdecl:
-                      case LITERAL__near:
-                      case LITERAL___near:
-                      case LITERAL__far:
-                      case LITERAL___far:
-                      case LITERAL___interrupt:
-                      case LITERAL_pascal:
-                      case LITERAL__pascal:
-                      case LITERAL___pascal: {
-                        init_declarator_list();
-                        break;
-                      }
-                      case SEMICOLON: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(SEMICOLON);
-                  if (inputState->guessing == 0) {
-#line 605 "CPP_parser.g"
-                    end_of_stmt();
-#line 3187 "CPPParser.cpp"
-                  }
-                } else {
-                  bool synPredMatched85 = false;
-                  if (((LA(1) == LITERAL_typedef) && (LA(2) == LITERAL_enum))) {
-                    int _m85 = mark();
-                    synPredMatched85 = true;
-                    inputState->guessing++;
-                    try {
-                      {
-                        match(LITERAL_typedef);
-                        match(LITERAL_enum);
-                      }
-                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                 RecognitionException& pe) {
-                      synPredMatched85 = false;
-                    }
-                    rewind(_m85);
-                    inputState->guessing--;
-                  }
-                  if (synPredMatched85) {
-                    if (inputState->guessing == 0) {
-#line 608 "CPP_parser.g"
-                      if (statementTrace >= 1) {
-                        printf("%d member_declaration Typedef enum type\n",
-                               LT(1)->getLine());
-                      }
-
-#line 3214 "CPPParser.cpp"
-                    }
-                    match(LITERAL_typedef);
-                    enum_specifier();
-                    if (inputState->guessing == 0) {
-#line 611 "CPP_parser.g"
-                      _td = true;
-#line 3221 "CPPParser.cpp"
-                    }
-                    {
-                      switch (LA(1)) {
-                        case ID:
-                        case LITERAL__stdcall:
-                        case LITERAL___stdcall:
-                        case LPAREN:
-                        case OPERATOR:
-                        case LITERAL_this:
-                        case LITERAL_true:
-                        case LITERAL_false:
-                        case TILDE:
-                        case STAR:
-                        case AMPERSAND:
-                        case SCOPE:
-                        case LITERAL__cdecl:
-                        case LITERAL___cdecl:
-                        case LITERAL__near:
-                        case LITERAL___near:
-                        case LITERAL__far:
-                        case LITERAL___far:
-                        case LITERAL___interrupt:
-                        case LITERAL_pascal:
-                        case LITERAL__pascal:
-                        case LITERAL___pascal: {
-                          init_declarator_list();
-                          break;
-                        }
-                        case SEMICOLON: {
-                          break;
-                        }
-                        default: {
-                          throw ANTLR_USE_NAMESPACE(antlr)
-                              NoViableAltException(LT(1), getFilename());
-                        }
-                      }
-                    }
-                    match(SEMICOLON);
-                    if (inputState->guessing == 0) {
-#line 611 "CPP_parser.g"
-                      end_of_stmt();
-#line 3265 "CPPParser.cpp"
-                    }
-                  } else {
-                    bool synPredMatched88 = false;
-                    if (((_tokenSet_2.member(LA(1))) &&
-                         (_tokenSet_3.member(LA(2))))) {
-                      int _m88 = mark();
-                      synPredMatched88 = true;
-                      inputState->guessing++;
-                      try {
-                        {
-                          declaration_specifiers();
-                          function_declarator(0);
-                          match(SEMICOLON);
-                        }
-                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                   RecognitionException& pe) {
-                        synPredMatched88 = false;
-                      }
-                      rewind(_m88);
-                      inputState->guessing--;
-                    }
-                    if (synPredMatched88) {
-                      if (inputState->guessing == 0) {
-#line 614 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d member_declaration Typedef function type\n",
-                              LT(1)->getLine());
-                        }
-
-#line 3293 "CPPParser.cpp"
-                      }
-                      declaration();
-                    } else if ((_tokenSet_2.member(LA(1))) &&
-                               (_tokenSet_3.member(LA(2)))) {
-                      if (inputState->guessing == 0) {
-#line 619 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d member_declaration Typedef variable type\n",
-                              LT(1)->getLine());
-                        }
-
-#line 3303 "CPPParser.cpp"
-                      }
-                      declaration();
-                    } else {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-              }
-            } else {
-              bool synPredMatched92 = false;
-              if (((LA(1) == LITERAL_template) && (LA(2) == LESSTHAN))) {
-                int _m92 = mark();
-                synPredMatched92 = true;
-                inputState->guessing++;
-                try {
-                  {
-                    template_head();
-                    {  // ( ... )*
-                      for (;;) {
-                        if ((_tokenSet_4.member(LA(1)))) {
-                          fs = function_specifier();
-                        } else {
-                          goto _loop91;
-                        }
-                      }
-                    _loop91:;
-                    }  // ( ... )*
-                    class_specifier();
-                  }
-                } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                  synPredMatched92 = false;
-                }
-                rewind(_m92);
-                inputState->guessing--;
-              }
-              if (synPredMatched92) {
-                if (inputState->guessing == 0) {
-#line 627 "CPP_parser.g"
-                  if (statementTrace >= 1) {
-                    printf(
-                        "%d member_declaration Templated class decl or def\n",
-                        LT(1)->getLine());
-                  }
-
-#line 3349 "CPPParser.cpp"
-                }
-                template_head();
-                {  // ( ... )*
-                  for (;;) {
-                    if ((_tokenSet_4.member(LA(1)))) {
-                      fs = function_specifier();
-                    } else {
-                      goto _loop94;
-                    }
-                  }
-                _loop94:;
-                }  // ( ... )*
-                class_decl_or_def(fs);
-                {
-                  switch (LA(1)) {
-                    case ID:
-                    case LITERAL__stdcall:
-                    case LITERAL___stdcall:
-                    case LPAREN:
-                    case OPERATOR:
-                    case LITERAL_this:
-                    case LITERAL_true:
-                    case LITERAL_false:
-                    case TILDE:
-                    case STAR:
-                    case AMPERSAND:
-                    case SCOPE:
-                    case LITERAL__cdecl:
-                    case LITERAL___cdecl:
-                    case LITERAL__near:
-                    case LITERAL___near:
-                    case LITERAL__far:
-                    case LITERAL___far:
-                    case LITERAL___interrupt:
-                    case LITERAL_pascal:
-                    case LITERAL__pascal:
-                    case LITERAL___pascal: {
-                      init_declarator_list();
-                      break;
-                    }
-                    case SEMICOLON: {
-                      break;
-                    }
-                    default: {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-                match(SEMICOLON);
-                if (inputState->guessing == 0) {
-#line 630 "CPP_parser.g"
-                  end_of_stmt();
-#line 3407 "CPPParser.cpp"
-                }
-              } else {
-                bool synPredMatched98 = false;
-                if (((LA(1) == LITERAL_enum) && (_tokenSet_5.member(LA(2))))) {
-                  int _m98 = mark();
-                  synPredMatched98 = true;
-                  inputState->guessing++;
-                  try {
-                    {
-                      match(LITERAL_enum);
-                      {
-                        switch (LA(1)) {
-                          case ID: {
-                            match(ID);
-                            break;
-                          }
-                          case LCURLY: {
-                            break;
-                          }
-                          default: {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                      }
-                      match(LCURLY);
-                    }
-                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                               RecognitionException& pe) {
-                    synPredMatched98 = false;
-                  }
-                  rewind(_m98);
-                  inputState->guessing--;
-                }
-                if (synPredMatched98) {
-                  if (inputState->guessing == 0) {
-#line 634 "CPP_parser.g"
-                    if (statementTrace >= 1) {
-                      printf("%d member_declaration Enum definition\n",
-                             LT(1)->getLine());
-                    }
-
-#line 3451 "CPPParser.cpp"
-                  }
-                  enum_specifier();
-                  {
-                    switch (LA(1)) {
-                      case ID:
-                      case COLON:
-                      case LITERAL__stdcall:
-                      case LITERAL___stdcall:
-                      case LPAREN:
-                      case OPERATOR:
-                      case LITERAL_this:
-                      case LITERAL_true:
-                      case LITERAL_false:
-                      case TILDE:
-                      case STAR:
-                      case AMPERSAND:
-                      case SCOPE:
-                      case LITERAL__cdecl:
-                      case LITERAL___cdecl:
-                      case LITERAL__near:
-                      case LITERAL___near:
-                      case LITERAL__far:
-                      case LITERAL___far:
-                      case LITERAL___interrupt:
-                      case LITERAL_pascal:
-                      case LITERAL__pascal:
-                      case LITERAL___pascal: {
-                        member_declarator_list();
-                        break;
-                      }
-                      case SEMICOLON: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(SEMICOLON);
-                  if (inputState->guessing == 0) {
-#line 637 "CPP_parser.g"
-                    end_of_stmt();
-#line 3497 "CPPParser.cpp"
-                  }
-                } else {
-                  bool synPredMatched101 = false;
-                  if (((_tokenSet_8.member(LA(1))) &&
-                       (_tokenSet_9.member(LA(2))))) {
-                    int _m101 = mark();
-                    synPredMatched101 = true;
-                    inputState->guessing++;
-                    try {
-                      {
-                        ctor_decl_spec();
-                        if (!(qualifiedItemIsOneOf(qiCtor))) {
-                          throw ANTLR_USE_NAMESPACE(antlr)
-                              SemanticException("qualifiedItemIsOneOf(qiCtor)");
-                        }
-                        ctor_declarator(0);
-                        match(SEMICOLON);
-                      }
-                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                 RecognitionException& pe) {
-                      synPredMatched101 = false;
-                    }
-                    rewind(_m101);
-                    inputState->guessing--;
-                  }
-                  if (synPredMatched101) {
-                    if (inputState->guessing == 0) {
-#line 644 "CPP_parser.g"
-                      if (statementTrace >= 1) {
-                        printf("%d member_declaration Constructor declarator\n",
-                               LT(1)->getLine());
-                      }
-
-#line 3527 "CPPParser.cpp"
-                    }
-                    ctor_decl_spec();
-                    ctor_declarator(0);
-                    match(SEMICOLON);
-                    if (inputState->guessing == 0) {
-#line 647 "CPP_parser.g"
-                      end_of_stmt();
-#line 3535 "CPPParser.cpp"
-                    }
-                  } else {
-                    bool synPredMatched104 = false;
-                    if (((_tokenSet_8.member(LA(1))) &&
-                         (_tokenSet_9.member(LA(2))))) {
-                      int _m104 = mark();
-                      synPredMatched104 = true;
-                      inputState->guessing++;
-                      try {
-                        {
-                          ctor_decl_spec();
-                          if (!(qualifiedItemIsOneOf(qiCtor))) {
-                            throw ANTLR_USE_NAMESPACE(antlr) SemanticException(
-                                "qualifiedItemIsOneOf(qiCtor)");
-                          }
-                          ctor_declarator(1);
-                          {
-                            switch (LA(1)) {
-                              case COLON: {
-                                match(COLON);
-                                break;
-                              }
-                              case LCURLY: {
-                                match(LCURLY);
-                                break;
-                              }
-                              default: {
-                                throw ANTLR_USE_NAMESPACE(antlr)
-                                    NoViableAltException(LT(1), getFilename());
-                              }
-                            }
-                          }
-                        }
-                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                   RecognitionException& pe) {
-                        synPredMatched104 = false;
-                      }
-                      rewind(_m104);
-                      inputState->guessing--;
-                    }
-                    if (synPredMatched104) {
-                      if (inputState->guessing == 0) {
-#line 661 "CPP_parser.g"
-                        if (statementTrace >= 1) {
-                          printf(
-                              "%d member_declaration Constructor definition\n",
-                              LT(1)->getLine());
-                        }
-
-#line 3582 "CPPParser.cpp"
-                      }
-                      ctor_definition();
-                    } else {
-                      bool synPredMatched106 = false;
-                      if (((_tokenSet_42.member(LA(1))) &&
-                           (_tokenSet_7.member(LA(2))))) {
-                        int _m106 = mark();
-                        synPredMatched106 = true;
-                        inputState->guessing++;
-                        try {
-                          {
-                            dtor_head(0);
-                            match(SEMICOLON);
-                          }
-                        } catch (ANTLR_USE_NAMESPACE(antlr)
-                                     RecognitionException& pe) {
-                          synPredMatched106 = false;
-                        }
-                        rewind(_m106);
-                        inputState->guessing--;
-                      }
-                      if (synPredMatched106) {
-                        if (inputState->guessing == 0) {
-#line 670 "CPP_parser.g"
-                          if (statementTrace >= 1) {
-                            printf(
-                                "%d member_declaration Destructor "
-                                "declaration\n",
-                                LT(1)->getLine());
-                          }
-
-#line 3610 "CPPParser.cpp"
-                        }
-                        dtor_head(0);
-                        match(SEMICOLON);
-                        if (inputState->guessing == 0) {
-#line 673 "CPP_parser.g"
-                          end_of_stmt();
-#line 3617 "CPPParser.cpp"
-                        }
-                      } else {
-                        bool synPredMatched108 = false;
-                        if (((_tokenSet_42.member(LA(1))) &&
-                             (_tokenSet_7.member(LA(2))))) {
-                          int _m108 = mark();
-                          synPredMatched108 = true;
-                          inputState->guessing++;
-                          try {
-                            {
-                              dtor_head(1);
-                              match(LCURLY);
-                            }
-                          } catch (ANTLR_USE_NAMESPACE(antlr)
-                                       RecognitionException& pe) {
-                            synPredMatched108 = false;
-                          }
-                          rewind(_m108);
-                          inputState->guessing--;
-                        }
-                        if (synPredMatched108) {
-                          if (inputState->guessing == 0) {
-#line 679 "CPP_parser.g"
-                            if (statementTrace >= 1) {
-                              printf(
-                                  "%d member_declaration Destructor "
-                                  "definition\n",
-                                  LT(1)->getLine());
-                            }
-
-#line 3644 "CPPParser.cpp"
-                          }
-                          dtor_head(1);
-                          dtor_body();
-                        } else {
-                          bool synPredMatched110 = false;
-                          if (((_tokenSet_12.member(LA(1))) &&
-                               (_tokenSet_13.member(LA(2))))) {
-                            int _m110 = mark();
-                            synPredMatched110 = true;
-                            inputState->guessing++;
-                            try {
-                              {
-                                declaration_specifiers();
-                                function_declarator(0);
-                                match(SEMICOLON);
-                              }
-                            } catch (ANTLR_USE_NAMESPACE(antlr)
-                                         RecognitionException& pe) {
-                              synPredMatched110 = false;
-                            }
-                            rewind(_m110);
-                            inputState->guessing--;
-                          }
-                          if (synPredMatched110) {
-                            if (inputState->guessing == 0) {
-#line 686 "CPP_parser.g"
-                              if (statementTrace >= 1) {
-                                printf(
-                                    "%d member_declaration Function "
-                                    "declaration\n",
-                                    LT(1)->getLine());
-                              }
-
-#line 3674 "CPPParser.cpp"
-                            }
-                            declaration_specifiers();
-                            function_declarator(0);
-                            match(SEMICOLON);
-                            if (inputState->guessing == 0) {
-#line 689 "CPP_parser.g"
-                              end_of_stmt();
-#line 3682 "CPPParser.cpp"
-                            }
-                          } else {
-                            bool synPredMatched112 = false;
-                            if (((_tokenSet_14.member(LA(1))) &&
-                                 (_tokenSet_15.member(LA(2))))) {
-                              int _m112 = mark();
-                              synPredMatched112 = true;
-                              inputState->guessing++;
-                              try {
-                                {
-                                  declaration_specifiers();
-                                  function_declarator(1);
-                                  match(LCURLY);
-                                }
-                              } catch (ANTLR_USE_NAMESPACE(antlr)
-                                           RecognitionException& pe) {
-                                synPredMatched112 = false;
-                              }
-                              rewind(_m112);
-                              inputState->guessing--;
-                            }
-                            if (synPredMatched112) {
-                              if (inputState->guessing == 0) {
-#line 693 "CPP_parser.g"
-                                beginFieldDeclaration();
-                                if (statementTrace >= 1) {
-                                  printf(
-                                      "%d member_declaration Function "
-                                      "definition\n",
-                                      LT(1)->getLine());
-                                }
-
-#line 3711 "CPPParser.cpp"
-                              }
-                              function_definition();
-                            } else {
-                              bool synPredMatched115 = false;
-                              if (((LA(1) == LITERAL_inline ||
-                                    LA(1) == OPERATOR) &&
-                                   (_tokenSet_43.member(LA(2))))) {
-                                int _m115 = mark();
-                                synPredMatched115 = true;
-                                inputState->guessing++;
-                                try {
-                                  {
-                                    {
-                                      switch (LA(1)) {
-                                        case LITERAL_inline: {
-                                          match(LITERAL_inline);
-                                          break;
-                                        }
-                                        case OPERATOR: {
-                                          break;
-                                        }
-                                        default: {
-                                          throw ANTLR_USE_NAMESPACE(antlr)
-                                              NoViableAltException(
-                                                  LT(1), getFilename());
-                                        }
-                                      }
-                                    }
-                                    conversion_function_decl_or_def();
-                                  }
-                                } catch (ANTLR_USE_NAMESPACE(antlr)
-                                             RecognitionException& pe) {
-                                  synPredMatched115 = false;
-                                }
-                                rewind(_m115);
-                                inputState->guessing--;
-                              }
-                              if (synPredMatched115) {
-                                if (inputState->guessing == 0) {
-#line 701 "CPP_parser.g"
-                                  if (statementTrace >= 1) {
-                                    printf(
-                                        "%d member_declaration Operator "
-                                        "function\n",
-                                        LT(1)->getLine());
-                                  }
-
-#line 3755 "CPPParser.cpp"
-                                }
-                                {
-                                  switch (LA(1)) {
-                                    case LITERAL_inline: {
-                                      match(LITERAL_inline);
-                                      break;
-                                    }
-                                    case OPERATOR: {
-                                      break;
-                                    }
-                                    default: {
-                                      throw ANTLR_USE_NAMESPACE(antlr)
-                                          NoViableAltException(LT(1),
-                                                               getFilename());
-                                    }
-                                  }
-                                }
-                                conversion_function_decl_or_def();
-                              } else {
-                                bool synPredMatched118 = false;
-                                if (((_tokenSet_44.member(LA(1))) &&
-                                     (_tokenSet_45.member(LA(2))))) {
-                                  int _m118 = mark();
-                                  synPredMatched118 = true;
-                                  inputState->guessing++;
-                                  try {
-                                    {
-                                      qualified_id();
-                                      match(SEMICOLON);
-                                    }
-                                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                                               RecognitionException& pe) {
-                                    synPredMatched118 = false;
-                                  }
-                                  rewind(_m118);
-                                  inputState->guessing--;
-                                }
-                                if (synPredMatched118) {
-                                  if (inputState->guessing == 0) {
-#line 710 "CPP_parser.g"
-                                    if (statementTrace >= 1) {
-                                      printf(
-                                          "%d member_declaration Qualified "
-                                          "ID\n",
-                                          LT(1)->getLine());
-                                    }
-
-#line 3800 "CPPParser.cpp"
-                                  }
-                                  q = qualified_id();
-                                  match(SEMICOLON);
-                                  if (inputState->guessing == 0) {
-#line 713 "CPP_parser.g"
-                                    end_of_stmt();
-#line 3807 "CPPParser.cpp"
-                                  }
-                                } else {
-                                  bool synPredMatched121 = false;
-                                  if (((_tokenSet_2.member(LA(1))) &&
-                                       (_tokenSet_3.member(LA(2))))) {
-                                    int _m121 = mark();
-                                    synPredMatched121 = true;
-                                    inputState->guessing++;
-                                    try {
-                                      {
-                                        declaration_specifiers();
-                                        {
-                                          switch (LA(1)) {
-                                            case ID:
-                                            case LITERAL__stdcall:
-                                            case LITERAL___stdcall:
-                                            case LPAREN:
-                                            case OPERATOR:
-                                            case LITERAL_this:
-                                            case LITERAL_true:
-                                            case LITERAL_false:
-                                            case TILDE:
-                                            case STAR:
-                                            case AMPERSAND:
-                                            case SCOPE:
-                                            case LITERAL__cdecl:
-                                            case LITERAL___cdecl:
-                                            case LITERAL__near:
-                                            case LITERAL___near:
-                                            case LITERAL__far:
-                                            case LITERAL___far:
-                                            case LITERAL___interrupt:
-                                            case LITERAL_pascal:
-                                            case LITERAL__pascal:
-                                            case LITERAL___pascal: {
-                                              init_declarator_list();
-                                              break;
-                                            }
-                                            case SEMICOLON: {
-                                              break;
-                                            }
-                                            default: {
-                                              throw ANTLR_USE_NAMESPACE(antlr)
-                                                  NoViableAltException(
-                                                      LT(1), getFilename());
-                                            }
-                                          }
-                                        }
-                                        match(SEMICOLON);
-                                      }
-                                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                                 RecognitionException& pe) {
-                                      synPredMatched121 = false;
-                                    }
-                                    rewind(_m121);
-                                    inputState->guessing--;
-                                  }
-                                  if (synPredMatched121) {
-                                    if (inputState->guessing == 0) {
-#line 718 "CPP_parser.g"
-                                      beginFieldDeclaration();
-                                      if (statementTrace >= 1) {
-                                        printf(
-                                            "%d member_declaration "
-                                            "Declaration\n",
-                                            LT(1)->getLine());
-                                      }
-
-#line 3873 "CPPParser.cpp"
-                                    }
-                                    declaration();
-                                  } else {
-                                    bool synPredMatched126 = false;
-                                    if (((_tokenSet_16.member(LA(1))) &&
-                                         (_tokenSet_17.member(LA(2))))) {
-                                      int _m126 = mark();
-                                      synPredMatched126 = true;
-                                      inputState->guessing++;
-                                      try {
-                                        {
-                                          {
-                                            switch (LA(1)) {
-                                              case LITERAL_friend: {
-                                                match(LITERAL_friend);
-                                                break;
-                                              }
-                                              case LITERAL_inline:
-                                              case LITERAL_struct:
-                                              case LITERAL_union:
-                                              case LITERAL_class:
-                                              case LITERAL__inline:
-                                              case LITERAL___inline:
-                                              case LITERAL_virtual:
-                                              case LITERAL_explicit: {
-                                                break;
-                                              }
-                                              default: {
-                                                throw ANTLR_USE_NAMESPACE(antlr)
-                                                    NoViableAltException(
-                                                        LT(1), getFilename());
-                                              }
-                                            }
-                                          }
-                                          {  // ( ... )*
-                                            for (;;) {
-                                              if ((_tokenSet_4.member(LA(1)))) {
-                                                fs = function_specifier();
-                                              } else {
-                                                goto _loop125;
-                                              }
-                                            }
-                                          _loop125:;
-                                          }  // ( ... )*
-                                          class_specifier();
-                                        }
-                                      } catch (ANTLR_USE_NAMESPACE(antlr)
-                                                   RecognitionException& pe) {
-                                        synPredMatched126 = false;
-                                      }
-                                      rewind(_m126);
-                                      inputState->guessing--;
-                                    }
-                                    if (synPredMatched126) {
-                                      if (inputState->guessing == 0) {
-#line 726 "CPP_parser.g"
-                                        if (statementTrace >= 1) {
-                                          printf(
-                                              "%d member_declaration Class "
-                                              "decl or def\n",
-                                              LT(1)->getLine());
-                                        }
-
-#line 3936 "CPPParser.cpp"
-                                      }
-                                      {
-                                        switch (LA(1)) {
-                                          case LITERAL_friend: {
-                                            match(LITERAL_friend);
-                                            break;
-                                          }
-                                          case LITERAL_inline:
-                                          case LITERAL_struct:
-                                          case LITERAL_union:
-                                          case LITERAL_class:
-                                          case LITERAL__inline:
-                                          case LITERAL___inline:
-                                          case LITERAL_virtual:
-                                          case LITERAL_explicit: {
-                                            break;
-                                          }
-                                          default: {
-                                            throw ANTLR_USE_NAMESPACE(antlr)
-                                                NoViableAltException(
-                                                    LT(1), getFilename());
-                                          }
-                                        }
-                                      }
-                                      {  // ( ... )*
-                                        for (;;) {
-                                          if ((_tokenSet_4.member(LA(1)))) {
-                                            fs = function_specifier();
-                                          } else {
-                                            goto _loop129;
-                                          }
-                                        }
-                                      _loop129:;
-                                      }  // ( ... )*
-                                      class_decl_or_def(fs);
-                                      {
-                                        switch (LA(1)) {
-                                          case ID:
-                                          case LITERAL__stdcall:
-                                          case LITERAL___stdcall:
-                                          case LPAREN:
-                                          case OPERATOR:
-                                          case LITERAL_this:
-                                          case LITERAL_true:
-                                          case LITERAL_false:
-                                          case TILDE:
-                                          case STAR:
-                                          case AMPERSAND:
-                                          case SCOPE:
-                                          case LITERAL__cdecl:
-                                          case LITERAL___cdecl:
-                                          case LITERAL__near:
-                                          case LITERAL___near:
-                                          case LITERAL__far:
-                                          case LITERAL___far:
-                                          case LITERAL___interrupt:
-                                          case LITERAL_pascal:
-                                          case LITERAL__pascal:
-                                          case LITERAL___pascal: {
-                                            init_declarator_list();
-                                            break;
-                                          }
-                                          case SEMICOLON: {
-                                            break;
-                                          }
-                                          default: {
-                                            throw ANTLR_USE_NAMESPACE(antlr)
-                                                NoViableAltException(
-                                                    LT(1), getFilename());
-                                          }
-                                        }
-                                      }
-                                      match(SEMICOLON);
-                                      if (inputState->guessing == 0) {
-#line 729 "CPP_parser.g"
-                                        end_of_stmt();
-#line 4017 "CPPParser.cpp"
-                                      }
-                                    } else {
-                                      bool synPredMatched134 = false;
-                                      if (((_tokenSet_46.member(LA(1))) &&
-                                           (_tokenSet_47.member(LA(2))))) {
-                                        int _m134 = mark();
-                                        synPredMatched134 = true;
-                                        inputState->guessing++;
-                                        try {
-                                          {
-                                            {  // ( ... )*
-                                              for (;;) {
-                                                if ((_tokenSet_4.member(
-                                                        LA(1)))) {
-                                                  fs = function_specifier();
-                                                } else {
-                                                  goto _loop133;
-                                                }
-                                              }
-                                            _loop133:;
-                                            }  // ( ... )*
-                                            function_declarator(0);
-                                            match(SEMICOLON);
-                                          }
-                                        } catch (ANTLR_USE_NAMESPACE(antlr)
-                                                     RecognitionException& pe) {
-                                          synPredMatched134 = false;
-                                        }
-                                        rewind(_m134);
-                                        inputState->guessing--;
-                                      }
-                                      if (synPredMatched134) {
-                                        if (inputState->guessing == 0) {
-#line 733 "CPP_parser.g"
-                                          beginFieldDeclaration();
-                                          fprintf(stderr,
-                                                  "%d warning Function "
-                                                  "declaration found without "
-                                                  "return type\n",
-                                                  LT(1)->getLine());
-                                          if (statementTrace >= 1) {
-                                            printf(
-                                                "%d member_declaration "
-                                                "Function declaration\n",
-                                                LT(1)->getLine());
-                                          }
-
-#line 4058 "CPPParser.cpp"
-                                        }
-                                        {  // ( ... )*
-                                          for (;;) {
-                                            if ((_tokenSet_4.member(LA(1)))) {
-                                              fs = function_specifier();
-                                            } else {
-                                              goto _loop136;
-                                            }
-                                          }
-                                        _loop136:;
-                                        }  // ( ... )*
-                                        function_declarator(0);
-                                        match(SEMICOLON);
-                                        if (inputState->guessing == 0) {
-#line 738 "CPP_parser.g"
-                                          end_of_stmt();
-#line 4077 "CPPParser.cpp"
-                                        }
-                                      } else if ((_tokenSet_38.member(LA(1))) &&
-                                                 (_tokenSet_39.member(LA(2)))) {
-                                        if (inputState->guessing == 0) {
-#line 742 "CPP_parser.g"
-
-                                          fprintf(stderr,
-                                                  "%d warning Function "
-                                                  "definition found without "
-                                                  "return type\n",
-                                                  LT(1)->getLine());
-                                          if (statementTrace >= 1) {
-                                            printf(
-                                                "%d member_declaration "
-                                                "Function definition without "
-                                                "return type\n",
-                                                LT(1)->getLine());
-                                          }
-
-#line 4088 "CPPParser.cpp"
-                                        }
-                                        function_declarator(1);
-                                        compound_statement();
-                                        if (inputState->guessing == 0) {
-#line 747 "CPP_parser.g"
-                                          endFunctionDefinition();
-#line 4095 "CPPParser.cpp"
-                                        }
-                                      } else if ((LA(1) == LITERAL_template) &&
-                                                 (LA(2) == LESSTHAN)) {
-                                        if (inputState->guessing == 0) {
-#line 750 "CPP_parser.g"
-                                          beginTemplateDeclaration();
-#line 4102 "CPPParser.cpp"
-                                        }
-                                        template_head();
-                                        {
-                                          bool synPredMatched140 = false;
-                                          if (((_tokenSet_12.member(LA(1))) &&
-                                               (_tokenSet_18.member(LA(2))))) {
-                                            int _m140 = mark();
-                                            synPredMatched140 = true;
-                                            inputState->guessing++;
-                                            try {
-                                              {
-                                                declaration_specifiers();
-                                                {
-                                                  switch (LA(1)) {
-                                                    case ID:
-                                                    case LITERAL__stdcall:
-                                                    case LITERAL___stdcall:
-                                                    case LPAREN:
-                                                    case OPERATOR:
-                                                    case LITERAL_this:
-                                                    case LITERAL_true:
-                                                    case LITERAL_false:
-                                                    case TILDE:
-                                                    case STAR:
-                                                    case AMPERSAND:
-                                                    case SCOPE:
-                                                    case LITERAL__cdecl:
-                                                    case LITERAL___cdecl:
-                                                    case LITERAL__near:
-                                                    case LITERAL___near:
-                                                    case LITERAL__far:
-                                                    case LITERAL___far:
-                                                    case LITERAL___interrupt:
-                                                    case LITERAL_pascal:
-                                                    case LITERAL__pascal:
-                                                    case LITERAL___pascal: {
-                                                      init_declarator_list();
-                                                      break;
-                                                    }
-                                                    case SEMICOLON: {
-                                                      break;
-                                                    }
-                                                    default: {
-                                                      throw ANTLR_USE_NAMESPACE(
-                                                          antlr)
-                                                          NoViableAltException(
-                                                              LT(1),
-                                                              getFilename());
-                                                    }
-                                                  }
-                                                }
-                                                match(SEMICOLON);
-                                              }
-                                            } catch (
-                                                ANTLR_USE_NAMESPACE(antlr)
-                                                    RecognitionException& pe) {
-                                              synPredMatched140 = false;
-                                            }
-                                            rewind(_m140);
-                                            inputState->guessing--;
-                                          }
-                                          if (synPredMatched140) {
-                                            if (inputState->guessing == 0) {
-#line 755 "CPP_parser.g"
-                                              if (statementTrace >= 1) {
-                                                printf(
-                                                    "%d member_declaration "
-                                                    "Templated forward "
-                                                    "declaration\n",
-                                                    LT(1)->getLine());
-                                              }
-
-#line 4167 "CPPParser.cpp"
-                                            }
-                                            declaration_specifiers();
-                                            {
-                                              switch (LA(1)) {
-                                                case ID:
-                                                case LITERAL__stdcall:
-                                                case LITERAL___stdcall:
-                                                case LPAREN:
-                                                case OPERATOR:
-                                                case LITERAL_this:
-                                                case LITERAL_true:
-                                                case LITERAL_false:
-                                                case TILDE:
-                                                case STAR:
-                                                case AMPERSAND:
-                                                case SCOPE:
-                                                case LITERAL__cdecl:
-                                                case LITERAL___cdecl:
-                                                case LITERAL__near:
-                                                case LITERAL___near:
-                                                case LITERAL__far:
-                                                case LITERAL___far:
-                                                case LITERAL___interrupt:
-                                                case LITERAL_pascal:
-                                                case LITERAL__pascal:
-                                                case LITERAL___pascal: {
-                                                  init_declarator_list();
-                                                  break;
-                                                }
-                                                case SEMICOLON: {
-                                                  break;
-                                                }
-                                                default: {
-                                                  throw ANTLR_USE_NAMESPACE(
-                                                      antlr)
-                                                      NoViableAltException(
-                                                          LT(1), getFilename());
-                                                }
-                                              }
-                                            }
-                                            match(SEMICOLON);
-                                            if (inputState->guessing == 0) {
-#line 758 "CPP_parser.g"
-                                              end_of_stmt();
-#line 4212 "CPPParser.cpp"
-                                            }
-                                          } else {
-                                            bool synPredMatched143 = false;
-                                            if (((_tokenSet_2.member(LA(1))) &&
-                                                 (_tokenSet_3.member(LA(2))))) {
-                                              int _m143 = mark();
-                                              synPredMatched143 = true;
-                                              inputState->guessing++;
-                                              try {
-                                                {
-                                                  declaration_specifiers();
-                                                  function_declarator(0);
-                                                  match(SEMICOLON);
-                                                }
-                                              } catch (ANTLR_USE_NAMESPACE(
-                                                  antlr) RecognitionException&
-                                                           pe) {
-                                                synPredMatched143 = false;
-                                              }
-                                              rewind(_m143);
-                                              inputState->guessing--;
-                                            }
-                                            if (synPredMatched143) {
-                                              if (inputState->guessing == 0) {
-#line 762 "CPP_parser.g"
-                                                if (statementTrace >= 1) {
-                                                  printf(
-                                                      "%d member_declaration "
-                                                      "Templated function "
-                                                      "declaration\n",
-                                                      LT(1)->getLine());
-                                                }
-
-#line 4240 "CPPParser.cpp"
-                                              }
-                                              declaration();
-                                            } else {
-                                              bool synPredMatched145 = false;
-                                              if (((_tokenSet_14.member(
-                                                       LA(1))) &&
-                                                   (_tokenSet_15.member(
-                                                       LA(2))))) {
-                                                int _m145 = mark();
-                                                synPredMatched145 = true;
-                                                inputState->guessing++;
-                                                try {
-                                                  {
-                                                    declaration_specifiers();
-                                                    function_declarator(1);
-                                                    match(LCURLY);
-                                                  }
-                                                } catch (ANTLR_USE_NAMESPACE(
-                                                    antlr) RecognitionException&
-                                                             pe) {
-                                                  synPredMatched145 = false;
-                                                }
-                                                rewind(_m145);
-                                                inputState->guessing--;
-                                              }
-                                              if (synPredMatched145) {
-                                                if (inputState->guessing == 0) {
-#line 769 "CPP_parser.g"
-                                                  if (statementTrace >= 1) {
-                                                    printf(
-                                                        "%d member_declaration "
-                                                        "Templated function "
-                                                        "definition\n",
-                                                        LT(1)->getLine());
-                                                  }
-
-#line 4269 "CPPParser.cpp"
-                                                }
-                                                function_definition();
-                                              } else {
-                                                bool synPredMatched147 = false;
-                                                if (((_tokenSet_8.member(
-                                                         LA(1))) &&
-                                                     (_tokenSet_9.member(
-                                                         LA(2))))) {
-                                                  int _m147 = mark();
-                                                  synPredMatched147 = true;
-                                                  inputState->guessing++;
-                                                  try {
-                                                    {
-                                                      ctor_decl_spec();
-                                                      if (!(qualifiedItemIsOneOf(
-                                                              qiCtor))) {
-                                                        throw ANTLR_USE_NAMESPACE(
-                                                            antlr)
-                                                            SemanticException(
-                                                                "qualifiedItemI"
-                                                                "sOneOf("
-                                                                "qiCtor)");
-                                                      }
-                                                    }
-                                                  } catch (
-                                                      ANTLR_USE_NAMESPACE(antlr)
-                                                          RecognitionException&
-                                                              pe) {
-                                                    synPredMatched147 = false;
-                                                  }
-                                                  rewind(_m147);
-                                                  inputState->guessing--;
-                                                }
-                                                if (synPredMatched147) {
-                                                  if (inputState->guessing ==
-                                                      0) {
-#line 779 "CPP_parser.g"
-                                                    if (statementTrace >= 1) {
-                                                      printf(
-                                                          "%d "
-                                                          "member_declaration "
-                                                          "Templated "
-                                                          "constructor "
-                                                          "definition\n",
-                                                          LT(1)->getLine());
-                                                    }
-
-#line 4298 "CPPParser.cpp"
-                                                  }
-                                                  ctor_definition();
-                                                } else if ((LA(1) ==
-                                                            OPERATOR) &&
-                                                           (_tokenSet_12.member(
-                                                               LA(2)))) {
-                                                  if (inputState->guessing ==
-                                                      0) {
-#line 785 "CPP_parser.g"
-                                                    if (statementTrace >= 1) {
-                                                      printf(
-                                                          "%d "
-                                                          "member_declaration "
-                                                          "Templated operator "
-                                                          "function\n",
-                                                          LT(1)->getLine());
-                                                    }
-
-#line 4308 "CPPParser.cpp"
-                                                  }
-                                                  conversion_function_decl_or_def();
-                                                } else if (
-                                                    ((LA(1) >= LITERAL_struct &&
-                                                      LA(1) <=
-                                                          LITERAL_class)) &&
-                                                    (LA(2) == ID ||
-                                                     LA(2) == LCURLY)) {
-                                                  if (inputState->guessing ==
-                                                      0) {
-#line 791 "CPP_parser.g"
-                                                    if (statementTrace >= 1) {
-                                                      printf(
-                                                          "%d "
-                                                          "member_declaration "
-                                                          "Templated class "
-                                                          "definition\n",
-                                                          LT(1)->getLine());
-                                                    }
-
-#line 4318 "CPPParser.cpp"
-                                                  }
-                                                  class_head();
-                                                  declaration_specifiers();
-                                                  {
-                                                    switch (LA(1)) {
-                                                      case ID:
-                                                      case LITERAL__stdcall:
-                                                      case LITERAL___stdcall:
-                                                      case LPAREN:
-                                                      case OPERATOR:
-                                                      case LITERAL_this:
-                                                      case LITERAL_true:
-                                                      case LITERAL_false:
-                                                      case TILDE:
-                                                      case STAR:
-                                                      case AMPERSAND:
-                                                      case SCOPE:
-                                                      case LITERAL__cdecl:
-                                                      case LITERAL___cdecl:
-                                                      case LITERAL__near:
-                                                      case LITERAL___near:
-                                                      case LITERAL__far:
-                                                      case LITERAL___far:
-                                                      case LITERAL___interrupt:
-                                                      case LITERAL_pascal:
-                                                      case LITERAL__pascal:
-                                                      case LITERAL___pascal: {
-                                                        init_declarator_list();
-                                                        break;
-                                                      }
-                                                      case SEMICOLON: {
-                                                        break;
-                                                      }
-                                                      default: {
-                                                        throw ANTLR_USE_NAMESPACE(
-                                                            antlr)
-                                                            NoViableAltException(
-                                                                LT(1),
-                                                                getFilename());
-                                                      }
-                                                    }
-                                                  }
-                                                  match(SEMICOLON);
-                                                  if (inputState->guessing ==
-                                                      0) {
-#line 794 "CPP_parser.g"
-                                                    end_of_stmt();
-#line 4364 "CPPParser.cpp"
-                                                  }
-                                                } else {
-                                                  throw ANTLR_USE_NAMESPACE(
-                                                      antlr)
-                                                      NoViableAltException(
-                                                          LT(1), getFilename());
-                                                }
-                                              }
-                                            }
-                                          }
-                                        }
-                                        if (inputState->guessing == 0) {
-#line 796 "CPP_parser.g"
-                                          endTemplateDeclaration();
-#line 4375 "CPPParser.cpp"
-                                        }
-                                      } else {
-                                        throw ANTLR_USE_NAMESPACE(antlr)
-                                            NoViableAltException(LT(1),
-                                                                 getFilename());
-                                      }
-                                    }
-                                  }
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::member_declarator_list() {
-  try {  // for error handling
-    member_declarator();
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          match(OCTALINT);
-          break;
-        }
-        case SEMICOLON:
-        case COMMA: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          member_declarator();
-          {
-            switch (LA(1)) {
-              case ASSIGNEQUAL: {
-                match(ASSIGNEQUAL);
-                match(OCTALINT);
-                break;
-              }
-              case SEMICOLON:
-              case COMMA: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-        } else {
-          goto _loop253;
-        }
-      }
-    _loop253:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_22);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ctor_declarator(int definition) {
-#line 1402 "CPP_parser.g"
-  char* q;
-#line 4465 "CPPParser.cpp"
-
-  try {  // for error handling
-    q = qualified_ctor_id();
-    if (inputState->guessing == 0) {
-#line 1406 "CPP_parser.g"
-      declaratorParameterList(definition);
-#line 4472 "CPPParser.cpp"
-    }
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case LITERAL_typedef:
-        case LITERAL_enum:
-        case ID:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LPAREN:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case ELLIPSIS:
-        case SCOPE:
-        case LITERAL__cdecl:
-        case LITERAL___cdecl:
-        case LITERAL__near:
-        case LITERAL___near:
-        case LITERAL__far:
-        case LITERAL___far:
-        case LITERAL___interrupt:
-        case LITERAL_pascal:
-        case LITERAL__pascal:
-        case LITERAL___pascal: {
-          parameter_list();
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-    if (inputState->guessing == 0) {
-#line 1408 "CPP_parser.g"
-      declaratorEndParameterList(definition);
-#line 4577 "CPPParser.cpp"
-    }
-    {
-      switch (LA(1)) {
-        case LITERAL_throw: {
-          exception_specification();
-          break;
-        }
-        case SEMICOLON:
-        case LCURLY:
-        case COLON: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_48);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::compound_statement() {
-  try {  // for error handling
-    match(LCURLY);
-    if (inputState->guessing == 0) {
-#line 1746 "CPP_parser.g"
-      end_of_stmt();
-      enterNewLocalScope();
-
-#line 4618 "CPPParser.cpp"
-    }
-    {
-      if ((_tokenSet_49.member(LA(1)))) {
-        statement_list();
-      } else if ((LA(1) == RCURLY)) {
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-    match(RCURLY);
-    if (inputState->guessing == 0) {
-#line 1751 "CPP_parser.g"
-      exitLocalScope();
-#line 4635 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_50);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::class_head() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_struct: {
-          match(LITERAL_struct);
-          break;
-        }
-        case LITERAL_union: {
-          match(LITERAL_union);
-          break;
-        }
-        case LITERAL_class: {
-          match(LITERAL_class);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {
-      switch (LA(1)) {
-        case ID: {
-          match(ID);
-          {
-            switch (LA(1)) {
-              case LESSTHAN: {
-                match(LESSTHAN);
-                template_argument_list();
-                match(GREATERTHAN);
-                break;
-              }
-              case LCURLY:
-              case COLON: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          {
-            switch (LA(1)) {
-              case COLON: {
-                base_clause();
-                break;
-              }
-              case LCURLY: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LCURLY: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(LCURLY);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_12);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::access_specifier() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_public: {
-          match(LITERAL_public);
-          break;
-        }
-        case LITERAL_protected: {
-          match(LITERAL_protected);
-          break;
-        }
-        case LITERAL_private: {
-          match(LITERAL_private);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_51);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::linkage_specification() {
-  try {  // for error handling
-    match(LITERAL_extern);
-    match(StringLiteral);
-    {
-      switch (LA(1)) {
-        case LCURLY: {
-          match(LCURLY);
-          {  // ( ... )*
-            for (;;) {
-              if ((_tokenSet_0.member(LA(1)))) {
-                external_declaration();
-              } else {
-                goto _loop164;
-              }
-            }
-          _loop164:;
-          }  // ( ... )*
-          match(RCURLY);
-          break;
-        }
-        case LITERAL_typedef:
-        case LITERAL_enum:
-        case ID:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case LITERAL_using:
-        case SCOPE: {
-          declaration();
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::using_statement() {
-#line 1836 "CPP_parser.g"
-  char* qid;
-#line 4890 "CPPParser.cpp"
-
-  try {  // for error handling
-    match(LITERAL_using);
-    {
-      switch (LA(1)) {
-        case LITERAL_namespace: {
-          match(LITERAL_namespace);
-          qid = qualified_id();
-          break;
-        }
-        case ID:
-        case LITERAL_typename:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case SCOPE: {
-          {
-            switch (LA(1)) {
-              case LITERAL_typename: {
-                match(LITERAL_typename);
-                break;
-              }
-              case ID:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case SCOPE: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          qid = qualified_id();
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(SEMICOLON);
-    if (inputState->guessing == 0) {
-#line 1843 "CPP_parser.g"
-      end_of_stmt();
-#line 4945 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_argument_list() {
-  try {  // for error handling
-    template_argument();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          template_argument();
-        } else {
-          goto _loop385;
-        }
-      }
-    _loop385:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_52);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::base_clause() {
-  try {  // for error handling
-    match(COLON);
-    base_specifier();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          base_specifier();
-        } else {
-          goto _loop220;
-        }
-      }
-    _loop220:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_53);
-    } else {
-      throw;
-    }
-  }
-}
-
-CPPParser::StorageClass CPPParser::storage_class_specifier() {
-#line 928 "CPP_parser.g"
-  CPPParser::StorageClass sc = scInvalid;
-#line 5018 "CPPParser.cpp"
-
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_auto: {
-        match(LITERAL_auto);
-        if (inputState->guessing == 0) {
-#line 929 "CPP_parser.g"
-          sc = scAUTO;
-#line 5028 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_register: {
-        match(LITERAL_register);
-        if (inputState->guessing == 0) {
-#line 930 "CPP_parser.g"
-          sc = scREGISTER;
-#line 5038 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_static: {
-        match(LITERAL_static);
-        if (inputState->guessing == 0) {
-#line 931 "CPP_parser.g"
-          sc = scSTATIC;
-#line 5048 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_extern: {
-        match(LITERAL_extern);
-        if (inputState->guessing == 0) {
-#line 932 "CPP_parser.g"
-          sc = scEXTERN;
-#line 5058 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_mutable: {
-        match(LITERAL_mutable);
-        if (inputState->guessing == 0) {
-#line 933 "CPP_parser.g"
-          sc = scMUTABLE;
-#line 5068 "CPPParser.cpp"
-        }
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_12);
-    } else {
-      throw;
-    }
-  }
-  return sc;
-}
-
-CPPParser::TypeQualifier CPPParser::type_qualifier() {
-#line 1025 "CPP_parser.g"
-  CPPParser::TypeQualifier tq = tqInvalid;
-#line 5092 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_const:
-        case LITERAL___const: {
-          {
-            switch (LA(1)) {
-              case LITERAL_const: {
-                match(LITERAL_const);
-                break;
-              }
-              case LITERAL___const: {
-                match(LITERAL___const);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 1027 "CPP_parser.g"
-            tq = tqCONST;
-#line 5121 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_volatile:
-        case LITERAL___volatile__: {
-          {
-            switch (LA(1)) {
-              case LITERAL_volatile: {
-                match(LITERAL_volatile);
-                break;
-              }
-              case LITERAL___volatile__: {
-                match(LITERAL___volatile__);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          if (inputState->guessing == 0) {
-#line 1028 "CPP_parser.g"
-            tq = tqVOLATILE;
-#line 5149 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_54);
-    } else {
-      throw;
-    }
-  }
-  return tq;
-}
-
-CPPParser::TypeSpecifier CPPParser::type_specifier() {
-#line 944 "CPP_parser.g"
-  CPPParser::TypeSpecifier ts = tsInvalid;
-#line 5174 "CPPParser.cpp"
-#line 944 "CPP_parser.g"
-
-  TypeQualifier tq = tqInvalid;
-
-#line 5179 "CPPParser.cpp"
-
-  try {  // for error handling
-    ts = simple_type_specifier();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_24);
-    } else {
-      throw;
-    }
-  }
-  return ts;
-}
-
-CPPParser::TypeSpecifier CPPParser::simple_type_specifier() {
-#line 953 "CPP_parser.g"
-  CPPParser::TypeSpecifier ts = tsInvalid;
-#line 5198 "CPPParser.cpp"
-#line 953 "CPP_parser.g"
-  char* s;
-  ts = tsInvalid;
-
-#line 5203 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_typename: {
-          match(LITERAL_typename);
-          s = qualified_type();
-          if (inputState->guessing == 0) {
-#line 962 "CPP_parser.g"
-            declaratorID(s, qiType);
-#line 5215 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec: {
-          {  // ( ... )+
-            int _cnt192 = 0;
-            for (;;) {
-              switch (LA(1)) {
-                case LITERAL_char: {
-                  match(LITERAL_char);
-                  if (inputState->guessing == 0) {
-#line 964 "CPP_parser.g"
-                    ts |= tsCHAR;
-#line 5261 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_wchar_t: {
-                  match(LITERAL_wchar_t);
-                  if (inputState->guessing == 0) {
-#line 965 "CPP_parser.g"
-                    ts |= tsWCHAR_T;
-#line 5271 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_bool: {
-                  match(LITERAL_bool);
-                  if (inputState->guessing == 0) {
-#line 966 "CPP_parser.g"
-                    ts |= tsBOOL;
-#line 5281 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_short: {
-                  match(LITERAL_short);
-                  if (inputState->guessing == 0) {
-#line 967 "CPP_parser.g"
-                    ts |= tsSHORT;
-#line 5291 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_int: {
-                  match(LITERAL_int);
-                  if (inputState->guessing == 0) {
-#line 968 "CPP_parser.g"
-                    ts |= tsINT;
-#line 5301 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 50:
-                case 51:
-                case 52: {
-                  {
-                    switch (LA(1)) {
-                      case 50: {
-                        match(50);
-                        break;
-                      }
-                      case 51: {
-                        match(51);
-                        break;
-                      }
-                      case 52: {
-                        match(52);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  if (inputState->guessing == 0) {
-#line 969 "CPP_parser.g"
-                    ts |= tsINT;
-#line 5335 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 53:
-                case 54:
-                case 55: {
-                  {
-                    switch (LA(1)) {
-                      case 53: {
-                        match(53);
-                        break;
-                      }
-                      case 54: {
-                        match(54);
-                        break;
-                      }
-                      case 55: {
-                        match(55);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  if (inputState->guessing == 0) {
-#line 970 "CPP_parser.g"
-                    ts |= tsINT;
-#line 5369 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 56:
-                case 57:
-                case 58: {
-                  {
-                    switch (LA(1)) {
-                      case 56: {
-                        match(56);
-                        break;
-                      }
-                      case 57: {
-                        match(57);
-                        break;
-                      }
-                      case 58: {
-                        match(58);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  if (inputState->guessing == 0) {
-#line 971 "CPP_parser.g"
-                    ts |= tsLONG;
-#line 5403 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 59:
-                case 60:
-                case 61: {
-                  {
-                    switch (LA(1)) {
-                      case 59: {
-                        match(59);
-                        break;
-                      }
-                      case 60: {
-                        match(60);
-                        break;
-                      }
-                      case 61: {
-                        match(61);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  if (inputState->guessing == 0) {
-#line 972 "CPP_parser.g"
-                    ts |= tsLONG;
-#line 5437 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 62: {
-                  { match(62); }
-                  if (inputState->guessing == 0) {
-#line 973 "CPP_parser.g"
-                    ts |= (tsUNSIGNED | tsINT);
-#line 5449 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 63: {
-                  { match(63); }
-                  if (inputState->guessing == 0) {
-#line 974 "CPP_parser.g"
-                    ts |= (tsUNSIGNED | tsINT);
-#line 5461 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 64: {
-                  { match(64); }
-                  if (inputState->guessing == 0) {
-#line 975 "CPP_parser.g"
-                    ts |= (tsUNSIGNED | tsLONG);
-#line 5473 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 65: {
-                  { match(65); }
-                  if (inputState->guessing == 0) {
-#line 976 "CPP_parser.g"
-                    ts |= (tsUNSIGNED | tsLONG);
-#line 5485 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case 66:
-                case 67: {
-                  {
-                    switch (LA(1)) {
-                      case 66: {
-                        match(66);
-                        break;
-                      }
-                      case 67: {
-                        match(67);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  if (inputState->guessing == 0) {
-#line 977 "CPP_parser.g"
-                    ts |= tsLONG;
-#line 5513 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_long: {
-                  match(LITERAL_long);
-                  if (inputState->guessing == 0) {
-#line 978 "CPP_parser.g"
-                    ts |= tsLONG;
-#line 5523 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_signed: {
-                  match(LITERAL_signed);
-                  if (inputState->guessing == 0) {
-#line 979 "CPP_parser.g"
-                    ts |= tsSIGNED;
-#line 5533 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_unsigned: {
-                  match(LITERAL_unsigned);
-                  if (inputState->guessing == 0) {
-#line 980 "CPP_parser.g"
-                    ts |= tsUNSIGNED;
-#line 5543 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_float: {
-                  match(LITERAL_float);
-                  if (inputState->guessing == 0) {
-#line 981 "CPP_parser.g"
-                    ts |= tsFLOAT;
-#line 5553 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_double: {
-                  match(LITERAL_double);
-                  if (inputState->guessing == 0) {
-#line 982 "CPP_parser.g"
-                    ts |= tsDOUBLE;
-#line 5563 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL_void: {
-                  match(LITERAL_void);
-                  if (inputState->guessing == 0) {
-#line 983 "CPP_parser.g"
-                    ts |= tsVOID;
-#line 5573 "CPPParser.cpp"
-                  }
-                  break;
-                }
-                case LITERAL__declspec:
-                case LITERAL___declspec: {
-                  {
-                    switch (LA(1)) {
-                      case LITERAL__declspec: {
-                        match(LITERAL__declspec);
-                        break;
-                      }
-                      case LITERAL___declspec: {
-                        match(LITERAL___declspec);
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(LPAREN);
-                  match(ID);
-                  match(RPAREN);
-                  break;
-                }
-                default: {
-                  if (_cnt192 >= 1) {
-                    goto _loop192;
-                  } else {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-              _cnt192++;
-            }
-          _loop192:;
-          }  // ( ... )+
-          break;
-        }
-        default:
-          if (((LA(1) == ID || LA(1) == SCOPE)) &&
-              (qualifiedItemIsOneOf(qiType | qiCtor))) {
-            s = qualified_type();
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_24);
-    } else {
-      throw;
-    }
-  }
-  return ts;
-}
-
-char* CPPParser::qualified_type() {
-#line 994 "CPP_parser.g"
-  char* q = NULL;
-#line 5638 "CPPParser.cpp"
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 994 "CPP_parser.g"
-  char* s;
-  static char qitem[CPPParser_MaxQualifiedItemSize + 1];
-#line 5642 "CPPParser.cpp"
-
-  try {  // for error handling
-    s = scope_override();
-    id = LT(1);
-    match(ID);
-    {
-      if ((LA(1) == LESSTHAN) && (_tokenSet_55.member(LA(2)))) {
-        match(LESSTHAN);
-        template_argument_list();
-        match(GREATERTHAN);
-      } else if ((_tokenSet_56.member(LA(1))) && (_tokenSet_57.member(LA(2)))) {
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1008 "CPP_parser.g"
-
-      strcpy(qitem, s);
-      strcat(qitem, (id->getText()).data());
-      q = qitem;
-
-#line 5668 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_56);
-    } else {
-      throw;
-    }
-  }
-  return q;
-}
-
-void CPPParser::class_prefix() {
-  try {  // for error handling
-    {    // ( ... )*
-      for (;;) {
-        if ((LA(1) == LITERAL__declspec || LA(1) == LITERAL___declspec)) {
-          {
-            switch (LA(1)) {
-              case LITERAL__declspec: {
-                match(LITERAL__declspec);
-                break;
-              }
-              case LITERAL___declspec: {
-                match(LITERAL___declspec);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(LPAREN);
-          expression();
-          match(RPAREN);
-        } else {
-          goto _loop204;
-        }
-      }
-    _loop204:;
-    }  // ( ... )*
-    if (inputState->guessing == 0) {
-#line 1036 "CPP_parser.g"
-
-#line 5721 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_58);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::expression() {
-  try {  // for error handling
-    assignment_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          assignment_expression();
-        } else {
-          goto _loop444;
-        }
-      }
-    _loop444:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_59);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::base_specifier() {
-#line 1089 "CPP_parser.g"
-  char* qt;
-#line 5765 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_virtual: {
-          match(LITERAL_virtual);
-          {
-            switch (LA(1)) {
-              case LITERAL_public:
-              case LITERAL_protected:
-              case LITERAL_private: {
-                access_specifier();
-                break;
-              }
-              case ID:
-              case SCOPE: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          qt = qualified_type();
-          break;
-        }
-        case LITERAL_public:
-        case LITERAL_protected:
-        case LITERAL_private: {
-          access_specifier();
-          {
-            switch (LA(1)) {
-              case LITERAL_virtual: {
-                match(LITERAL_virtual);
-                break;
-              }
-              case ID:
-              case SCOPE: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          qt = qualified_type();
-          break;
-        }
-        case ID:
-        case SCOPE: {
-          qt = qualified_type();
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_60);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::enumerator_list() {
-  try {  // for error handling
-    enumerator();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          enumerator();
-        } else {
-          goto _loop232;
-        }
-      }
-    _loop232:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_61);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::enumerator() {
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-
-  try {  // for error handling
-    id = LT(1);
-    match(ID);
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          constant_expression();
-          break;
-        }
-        case RCURLY:
-        case COMMA: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1132 "CPP_parser.g"
-      enumElement((id->getText()).data());
-#line 5901 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_62);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::constant_expression() {
-  try {  // for error handling
-    conditional_expression();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_63);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::optor() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_new: {
-        match(LITERAL_new);
-        {
-          if ((LA(1) == LSQUARE) && (LA(2) == RSQUARE)) {
-            match(LSQUARE);
-            match(RSQUARE);
-          } else if ((_tokenSet_64.member(LA(1))) &&
-                     (_tokenSet_57.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        break;
-      }
-      case LITERAL_delete: {
-        match(LITERAL_delete);
-        {
-          if ((LA(1) == LSQUARE) && (LA(2) == RSQUARE)) {
-            match(LSQUARE);
-            match(RSQUARE);
-          } else if ((_tokenSet_64.member(LA(1))) &&
-                     (_tokenSet_57.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        break;
-      }
-      case LPAREN: {
-        match(LPAREN);
-        match(RPAREN);
-        break;
-      }
-      case LSQUARE: {
-        match(LSQUARE);
-        match(RSQUARE);
-        break;
-      }
-      case LESSTHAN:
-      case GREATERTHAN:
-      case ASSIGNEQUAL:
-      case COMMA:
-      case TILDE:
-      case STAR:
-      case AMPERSAND:
-      case TIMESEQUAL:
-      case DIVIDEEQUAL:
-      case MINUSEQUAL:
-      case PLUSEQUAL:
-      case MODEQUAL:
-      case SHIFTLEFTEQUAL:
-      case SHIFTRIGHTEQUAL:
-      case BITWISEANDEQUAL:
-      case BITWISEXOREQUAL:
-      case BITWISEOREQUAL:
-      case OR:
-      case AND:
-      case BITWISEOR:
-      case BITWISEXOR:
-      case NOTEQUAL:
-      case EQUAL:
-      case LESSTHANOREQUALTO:
-      case GREATERTHANOREQUALTO:
-      case SHIFTLEFT:
-      case SHIFTRIGHT:
-      case PLUS:
-      case MINUS:
-      case DIVIDE:
-      case MOD:
-      case POINTERTOMBR:
-      case PLUSPLUS:
-      case MINUSMINUS:
-      case POINTERTO:
-      case NOT: {
-        optor_simple_tokclass();
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_64);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::typeID() {
-  try {  // for error handling
-    if (!(isTypeName((LT(1)->getText()).data()))) {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          SemanticException("isTypeName((LT(1)->getText()).data())");
-    }
-    match(ID);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_1);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::init_declarator() {
-  try {  // for error handling
-    declarator();
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          initializer();
-          break;
-        }
-        case LPAREN: {
-          match(LPAREN);
-          expression_list();
-          match(RPAREN);
-          break;
-        }
-        case SEMICOLON:
-        case COMMA: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_65);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::declarator() {
-  try {  // for error handling
-    bool synPredMatched261 = false;
-    if (((_tokenSet_25.member(LA(1))) && (_tokenSet_66.member(LA(2))))) {
-      int _m261 = mark();
-      synPredMatched261 = true;
-      inputState->guessing++;
-      try {
-        { ptr_operator(); }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched261 = false;
-      }
-      rewind(_m261);
-      inputState->guessing--;
-    }
-    if (synPredMatched261) {
-      ptr_operator();
-      declarator();
-    } else if ((_tokenSet_67.member(LA(1))) && (_tokenSet_68.member(LA(2)))) {
-      direct_declarator();
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          NoViableAltException(LT(1), getFilename());
-    }
-
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_69);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::initializer() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case ID:
-      case StringLiteral:
-      case LPAREN:
-      case LITERAL_typename:
-      case LITERAL_char:
-      case LITERAL_wchar_t:
-      case LITERAL_bool:
-      case LITERAL_short:
-      case LITERAL_int:
-      case 50:
-      case 51:
-      case 52:
-      case 53:
-      case 54:
-      case 55:
-      case 56:
-      case 57:
-      case 58:
-      case 59:
-      case 60:
-      case 61:
-      case 62:
-      case 63:
-      case 64:
-      case 65:
-      case 66:
-      case 67:
-      case LITERAL_long:
-      case LITERAL_signed:
-      case LITERAL_unsigned:
-      case LITERAL_float:
-      case LITERAL_double:
-      case LITERAL_void:
-      case LITERAL__declspec:
-      case LITERAL___declspec:
-      case OPERATOR:
-      case LITERAL_this:
-      case LITERAL_true:
-      case LITERAL_false:
-      case OCTALINT:
-      case TILDE:
-      case STAR:
-      case AMPERSAND:
-      case PLUS:
-      case MINUS:
-      case PLUSPLUS:
-      case MINUSMINUS:
-      case LITERAL_sizeof:
-      case LITERAL___alignof__:
-      case SCOPE:
-      case LITERAL_dynamic_cast:
-      case LITERAL_static_cast:
-      case LITERAL_reinterpret_cast:
-      case LITERAL_const_cast:
-      case LITERAL_typeid:
-      case DECIMALINT:
-      case HEXADECIMALINT:
-      case CharLiteral:
-      case WCharLiteral:
-      case WStringLiteral:
-      case FLOATONE:
-      case FLOATTWO:
-      case NOT:
-      case LITERAL_new:
-      case LITERAL_delete: {
-        remainder_expression();
-        break;
-      }
-      case LCURLY: {
-        match(LCURLY);
-        initializer();
-        {  // ( ... )*
-          for (;;) {
-            if ((LA(1) == COMMA)) {
-              match(COMMA);
-              {
-                switch (LA(1)) {
-                  case ID:
-                  case LCURLY:
-                  case StringLiteral:
-                  case LPAREN:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case OPERATOR:
-                  case LITERAL_this:
-                  case LITERAL_true:
-                  case LITERAL_false:
-                  case OCTALINT:
-                  case TILDE:
-                  case STAR:
-                  case AMPERSAND:
-                  case PLUS:
-                  case MINUS:
-                  case PLUSPLUS:
-                  case MINUSMINUS:
-                  case LITERAL_sizeof:
-                  case LITERAL___alignof__:
-                  case SCOPE:
-                  case LITERAL_dynamic_cast:
-                  case LITERAL_static_cast:
-                  case LITERAL_reinterpret_cast:
-                  case LITERAL_const_cast:
-                  case LITERAL_typeid:
-                  case DECIMALINT:
-                  case HEXADECIMALINT:
-                  case CharLiteral:
-                  case WCharLiteral:
-                  case WStringLiteral:
-                  case FLOATONE:
-                  case FLOATTWO:
-                  case NOT:
-                  case LITERAL_new:
-                  case LITERAL_delete: {
-                    initializer();
-                    break;
-                  }
-                  case RCURLY:
-                  case COMMA: {
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-            } else {
-              goto _loop248;
-            }
-          }
-        _loop248:;
-        }  // ( ... )*
-        match(RCURLY);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_70);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::expression_list() {
-  try {  // for error handling
-    assignment_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          assignment_expression();
-        } else {
-          goto _loop592;
-        }
-      }
-    _loop592:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_71);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::remainder_expression() {
-  try {  // for error handling
-    {
-      bool synPredMatched452 = false;
-      if (((_tokenSet_72.member(LA(1))) && (_tokenSet_73.member(LA(2))))) {
-        int _m452 = mark();
-        synPredMatched452 = true;
-        inputState->guessing++;
-        try {
-          {
-            conditional_expression();
-            {
-              switch (LA(1)) {
-                case COMMA: {
-                  match(COMMA);
-                  break;
-                }
-                case SEMICOLON: {
-                  match(SEMICOLON);
-                  break;
-                }
-                case RPAREN: {
-                  match(RPAREN);
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-          }
-        } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-          synPredMatched452 = false;
-        }
-        rewind(_m452);
-        inputState->guessing--;
-      }
-      if (synPredMatched452) {
-        if (inputState->guessing == 0) {
-#line 1879 "CPP_parser.g"
-          assign_stmt_RHS_found += 1;
-#line 6400 "CPPParser.cpp"
-        }
-        assignment_expression();
-        if (inputState->guessing == 0) {
-#line 1881 "CPP_parser.g"
-
-          if (assign_stmt_RHS_found > 0) {
-            assign_stmt_RHS_found -= 1;
-          } else {
-            fprintf(stderr, "%d warning Error in assign_stmt_RHS_found = %d\n",
-                    LT(1)->getLine(), assign_stmt_RHS_found);
-            fprintf(stderr, "Press return to continue\n");
-            getchar();
-          }
-
-#line 6416 "CPPParser.cpp"
-        }
-      } else if ((_tokenSet_72.member(LA(1))) && (_tokenSet_73.member(LA(2)))) {
-        assignment_expression();
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_74);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::member_declarator() {
-  try {  // for error handling
-    bool synPredMatched257 = false;
-    if (((LA(1) == ID || LA(1) == COLON) && (_tokenSet_75.member(LA(2))))) {
-      int _m257 = mark();
-      synPredMatched257 = true;
-      inputState->guessing++;
-      try {
-        {
-          {
-            switch (LA(1)) {
-              case ID: {
-                match(ID);
-                break;
-              }
-              case COLON: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(COLON);
-          constant_expression();
-        }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched257 = false;
-      }
-      rewind(_m257);
-      inputState->guessing--;
-    }
-    if (synPredMatched257) {
-      {
-        switch (LA(1)) {
-          case ID: {
-            match(ID);
-            break;
-          }
-          case COLON: {
-            break;
-          }
-          default: {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-      }
-      match(COLON);
-      constant_expression();
-    } else if ((_tokenSet_76.member(LA(1))) && (_tokenSet_77.member(LA(2)))) {
-      declarator();
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          NoViableAltException(LT(1), getFilename());
-    }
-
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_78);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ptr_operator() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case AMPERSAND: {
-          match(AMPERSAND);
-          if (inputState->guessing == 0) {
-#line 2198 "CPP_parser.g"
-            is_address = true;
-#line 6525 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL__cdecl:
-        case LITERAL___cdecl: {
-          {
-            switch (LA(1)) {
-              case LITERAL__cdecl: {
-                match(LITERAL__cdecl);
-                break;
-              }
-              case LITERAL___cdecl: {
-                match(LITERAL___cdecl);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LITERAL__near:
-        case LITERAL___near: {
-          {
-            switch (LA(1)) {
-              case LITERAL__near: {
-                match(LITERAL__near);
-                break;
-              }
-              case LITERAL___near: {
-                match(LITERAL___near);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LITERAL__far:
-        case LITERAL___far: {
-          {
-            switch (LA(1)) {
-              case LITERAL__far: {
-                match(LITERAL__far);
-                break;
-              }
-              case LITERAL___far: {
-                match(LITERAL___far);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LITERAL___interrupt: {
-          match(LITERAL___interrupt);
-          break;
-        }
-        case LITERAL_pascal:
-        case LITERAL__pascal:
-        case LITERAL___pascal: {
-          {
-            switch (LA(1)) {
-              case LITERAL_pascal: {
-                match(LITERAL_pascal);
-                break;
-              }
-              case LITERAL__pascal: {
-                match(LITERAL__pascal);
-                break;
-              }
-              case LITERAL___pascal: {
-                match(LITERAL___pascal);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LITERAL__stdcall:
-        case LITERAL___stdcall: {
-          {
-            switch (LA(1)) {
-              case LITERAL__stdcall: {
-                match(LITERAL__stdcall);
-                break;
-              }
-              case LITERAL___stdcall: {
-                match(LITERAL___stdcall);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case ID:
-        case STAR:
-        case SCOPE: {
-          ptr_to_member();
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_24);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::direct_declarator() {
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken dtor = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 1225 "CPP_parser.g"
-  char* id;
-  CPPParser::TypeQualifier tq;
-#line 6684 "CPPParser.cpp"
-
-  try {  // for error handling
-    switch (LA(1)) {
-      case TILDE: {
-        match(TILDE);
-        dtor = LT(1);
-        match(ID);
-        if (inputState->guessing == 0) {
-#line 1271 "CPP_parser.g"
-          declaratorID((dtor->getText()).data(), qiDtor);
-#line 6696 "CPPParser.cpp"
-        }
-        if (inputState->guessing == 0) {
-#line 1272 "CPP_parser.g"
-          fprintf(
-              stderr,
-              "%d warning direct_declarator5 entered unexpectedly with %s\n",
-              LT(1)->getLine(), (dtor->getText()).data());
-#line 6702 "CPPParser.cpp"
-        }
-        match(LPAREN);
-        if (inputState->guessing == 0) {
-#line 1274 "CPP_parser.g"
-          declaratorParameterList(0);
-#line 6708 "CPPParser.cpp"
-        }
-        {
-          switch (LA(1)) {
-            case LITERAL_typedef:
-            case LITERAL_enum:
-            case ID:
-            case LITERAL_inline:
-            case LITERAL_friend:
-            case LITERAL_extern:
-            case LITERAL_struct:
-            case LITERAL_union:
-            case LITERAL_class:
-            case LITERAL__stdcall:
-            case LITERAL___stdcall:
-            case LITERAL_GFEXCLUDE:
-            case LITERAL_GFINCLUDE:
-            case LITERAL_GFID:
-            case LITERAL_GFUNREAD:
-            case LITERAL_GFARRAYSIZE:
-            case LPAREN:
-            case LITERAL_GFARRAYSIZES:
-            case LITERAL_GFARRAYELEMSIZE:
-            case LITERAL_auto:
-            case LITERAL_register:
-            case LITERAL_static:
-            case LITERAL_mutable:
-            case LITERAL__inline:
-            case LITERAL___inline:
-            case LITERAL_virtual:
-            case LITERAL_explicit:
-            case LITERAL_typename:
-            case LITERAL_char:
-            case LITERAL_wchar_t:
-            case LITERAL_bool:
-            case LITERAL_short:
-            case LITERAL_int:
-            case 50:
-            case 51:
-            case 52:
-            case 53:
-            case 54:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
-            case 61:
-            case 62:
-            case 63:
-            case 64:
-            case 65:
-            case 66:
-            case 67:
-            case LITERAL_long:
-            case LITERAL_signed:
-            case LITERAL_unsigned:
-            case LITERAL_float:
-            case LITERAL_double:
-            case LITERAL_void:
-            case LITERAL__declspec:
-            case LITERAL___declspec:
-            case LITERAL_const:
-            case LITERAL___const:
-            case LITERAL_volatile:
-            case LITERAL___volatile__:
-            case OPERATOR:
-            case LITERAL_this:
-            case LITERAL_true:
-            case LITERAL_false:
-            case TILDE:
-            case STAR:
-            case AMPERSAND:
-            case ELLIPSIS:
-            case SCOPE:
-            case LITERAL__cdecl:
-            case LITERAL___cdecl:
-            case LITERAL__near:
-            case LITERAL___near:
-            case LITERAL__far:
-            case LITERAL___far:
-            case LITERAL___interrupt:
-            case LITERAL_pascal:
-            case LITERAL__pascal:
-            case LITERAL___pascal: {
-              parameter_list();
-              break;
-            }
-            case RPAREN: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        match(RPAREN);
-        if (inputState->guessing == 0) {
-#line 1276 "CPP_parser.g"
-          declaratorEndParameterList(0);
-#line 6812 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LPAREN: {
-        match(LPAREN);
-        declarator();
-        match(RPAREN);
-        {
-          if ((LA(1) == LPAREN || LA(1) == LSQUARE) &&
-              (_tokenSet_79.member(LA(2)))) {
-            declarator_suffix();
-          } else if ((_tokenSet_69.member(LA(1))) &&
-                     (_tokenSet_80.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        break;
-      }
-      default:
-        bool synPredMatched265 = false;
-        if (((_tokenSet_44.member(LA(1))) && (_tokenSet_28.member(LA(2))))) {
-          int _m265 = mark();
-          synPredMatched265 = true;
-          inputState->guessing++;
-          try {
-            {
-              qualified_id();
-              match(LPAREN);
-              {
-                switch (LA(1)) {
-                  case RPAREN: {
-                    match(RPAREN);
-                    break;
-                  }
-                  case LITERAL_typedef:
-                  case LITERAL_enum:
-                  case ID:
-                  case LITERAL_inline:
-                  case LITERAL_friend:
-                  case LITERAL_extern:
-                  case LITERAL_struct:
-                  case LITERAL_union:
-                  case LITERAL_class:
-                  case LITERAL__stdcall:
-                  case LITERAL___stdcall:
-                  case LITERAL_GFEXCLUDE:
-                  case LITERAL_GFINCLUDE:
-                  case LITERAL_GFID:
-                  case LITERAL_GFUNREAD:
-                  case LITERAL_GFARRAYSIZE:
-                  case LITERAL_GFARRAYSIZES:
-                  case LITERAL_GFARRAYELEMSIZE:
-                  case LITERAL_auto:
-                  case LITERAL_register:
-                  case LITERAL_static:
-                  case LITERAL_mutable:
-                  case LITERAL__inline:
-                  case LITERAL___inline:
-                  case LITERAL_virtual:
-                  case LITERAL_explicit:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case LITERAL_const:
-                  case LITERAL___const:
-                  case LITERAL_volatile:
-                  case LITERAL___volatile__:
-                  case SCOPE: {
-                    declaration_specifiers();
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-            }
-          } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-            synPredMatched265 = false;
-          }
-          rewind(_m265);
-          inputState->guessing--;
-        }
-        if (synPredMatched265) {
-          id = qualified_id();
-          if (inputState->guessing == 0) {
-#line 1231 "CPP_parser.g"
-            if (_td == true) {  // This statement is a typedef
-              declaratorID(id, qiType);
-            } else {
-              declaratorID(id, qiFun);
-            }
-
-#line 6941 "CPPParser.cpp"
-          }
-          match(LPAREN);
-          if (inputState->guessing == 0) {
-#line 1236 "CPP_parser.g"
-            declaratorParameterList(0);
-#line 6947 "CPPParser.cpp"
-          }
-          {
-            switch (LA(1)) {
-              case LITERAL_typedef:
-              case LITERAL_enum:
-              case ID:
-              case LITERAL_inline:
-              case LITERAL_friend:
-              case LITERAL_extern:
-              case LITERAL_struct:
-              case LITERAL_union:
-              case LITERAL_class:
-              case LITERAL__stdcall:
-              case LITERAL___stdcall:
-              case LITERAL_GFEXCLUDE:
-              case LITERAL_GFINCLUDE:
-              case LITERAL_GFID:
-              case LITERAL_GFUNREAD:
-              case LITERAL_GFARRAYSIZE:
-              case LPAREN:
-              case LITERAL_GFARRAYSIZES:
-              case LITERAL_GFARRAYELEMSIZE:
-              case LITERAL_auto:
-              case LITERAL_register:
-              case LITERAL_static:
-              case LITERAL_mutable:
-              case LITERAL__inline:
-              case LITERAL___inline:
-              case LITERAL_virtual:
-              case LITERAL_explicit:
-              case LITERAL_typename:
-              case LITERAL_char:
-              case LITERAL_wchar_t:
-              case LITERAL_bool:
-              case LITERAL_short:
-              case LITERAL_int:
-              case 50:
-              case 51:
-              case 52:
-              case 53:
-              case 54:
-              case 55:
-              case 56:
-              case 57:
-              case 58:
-              case 59:
-              case 60:
-              case 61:
-              case 62:
-              case 63:
-              case 64:
-              case 65:
-              case 66:
-              case 67:
-              case LITERAL_long:
-              case LITERAL_signed:
-              case LITERAL_unsigned:
-              case LITERAL_float:
-              case LITERAL_double:
-              case LITERAL_void:
-              case LITERAL__declspec:
-              case LITERAL___declspec:
-              case LITERAL_const:
-              case LITERAL___const:
-              case LITERAL_volatile:
-              case LITERAL___volatile__:
-              case OPERATOR:
-              case LITERAL_this:
-              case LITERAL_true:
-              case LITERAL_false:
-              case TILDE:
-              case STAR:
-              case AMPERSAND:
-              case ELLIPSIS:
-              case SCOPE:
-              case LITERAL__cdecl:
-              case LITERAL___cdecl:
-              case LITERAL__near:
-              case LITERAL___near:
-              case LITERAL__far:
-              case LITERAL___far:
-              case LITERAL___interrupt:
-              case LITERAL_pascal:
-              case LITERAL__pascal:
-              case LITERAL___pascal: {
-                parameter_list();
-                break;
-              }
-              case RPAREN: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(RPAREN);
-          if (inputState->guessing == 0) {
-#line 1238 "CPP_parser.g"
-            declaratorEndParameterList(0);
-#line 7051 "CPPParser.cpp"
-          }
-          {  // ( ... )*
-            for (;;) {
-              if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-                tq = type_qualifier();
-              } else {
-                goto _loop268;
-              }
-            }
-          _loop268:;
-          }  // ( ... )*
-          {
-            switch (LA(1)) {
-              case LITERAL_throw: {
-                exception_specification();
-                break;
-              }
-              case GREATERTHAN:
-              case SEMICOLON:
-              case ASSIGNEQUAL:
-              case LPAREN:
-              case RPAREN:
-              case COMMA:
-              case ELLIPSIS: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-        } else {
-          bool synPredMatched271 = false;
-          if (((_tokenSet_44.member(LA(1))) && (_tokenSet_28.member(LA(2))))) {
-            int _m271 = mark();
-            synPredMatched271 = true;
-            inputState->guessing++;
-            try {
-              {
-                qualified_id();
-                match(LPAREN);
-                qualified_id();
-              }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched271 = false;
-            }
-            rewind(_m271);
-            inputState->guessing--;
-          }
-          if (synPredMatched271) {
-            id = qualified_id();
-            if (inputState->guessing == 0) {
-#line 1244 "CPP_parser.g"
-              declaratorID(id, qiVar);
-#line 7113 "CPPParser.cpp"
-            }
-            match(LPAREN);
-            expression_list();
-            match(RPAREN);
-          } else {
-            bool synPredMatched273 = false;
-            if (((_tokenSet_44.member(LA(1))) &&
-                 (_tokenSet_28.member(LA(2))))) {
-              int _m273 = mark();
-              synPredMatched273 = true;
-              inputState->guessing++;
-              try {
-                {
-                  qualified_id();
-                  match(LSQUARE);
-                }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched273 = false;
-              }
-              rewind(_m273);
-              inputState->guessing--;
-            }
-            if (synPredMatched273) {
-              id = qualified_id();
-              if (inputState->guessing == 0) {
-#line 1251 "CPP_parser.g"
-                if (_td == true) {           // This statement is a typedef
-                  declaratorID(id, qiType);  // This statement is a typedef
-                } else {
-                  declaratorID(id, qiVar);
-                }
-                is_address = false;
-                is_pointer = false;
-
-#line 7147 "CPPParser.cpp"
-              }
-              {  // ( ... )+
-                int _cnt276 = 0;
-                for (;;) {
-                  if ((LA(1) == LSQUARE)) {
-                    match(LSQUARE);
-                    {
-                      switch (LA(1)) {
-                        case ID:
-                        case StringLiteral:
-                        case LPAREN:
-                        case LITERAL_typename:
-                        case LITERAL_char:
-                        case LITERAL_wchar_t:
-                        case LITERAL_bool:
-                        case LITERAL_short:
-                        case LITERAL_int:
-                        case 50:
-                        case 51:
-                        case 52:
-                        case 53:
-                        case 54:
-                        case 55:
-                        case 56:
-                        case 57:
-                        case 58:
-                        case 59:
-                        case 60:
-                        case 61:
-                        case 62:
-                        case 63:
-                        case 64:
-                        case 65:
-                        case 66:
-                        case 67:
-                        case LITERAL_long:
-                        case LITERAL_signed:
-                        case LITERAL_unsigned:
-                        case LITERAL_float:
-                        case LITERAL_double:
-                        case LITERAL_void:
-                        case LITERAL__declspec:
-                        case LITERAL___declspec:
-                        case OPERATOR:
-                        case LITERAL_this:
-                        case LITERAL_true:
-                        case LITERAL_false:
-                        case OCTALINT:
-                        case TILDE:
-                        case STAR:
-                        case AMPERSAND:
-                        case PLUS:
-                        case MINUS:
-                        case PLUSPLUS:
-                        case MINUSMINUS:
-                        case LITERAL_sizeof:
-                        case LITERAL___alignof__:
-                        case SCOPE:
-                        case LITERAL_dynamic_cast:
-                        case LITERAL_static_cast:
-                        case LITERAL_reinterpret_cast:
-                        case LITERAL_const_cast:
-                        case LITERAL_typeid:
-                        case DECIMALINT:
-                        case HEXADECIMALINT:
-                        case CharLiteral:
-                        case WCharLiteral:
-                        case WStringLiteral:
-                        case FLOATONE:
-                        case FLOATTWO:
-                        case NOT:
-                        case LITERAL_new:
-                        case LITERAL_delete: {
-                          constant_expression();
-                          break;
-                        }
-                        case RSQUARE: {
-                          break;
-                        }
-                        default: {
-                          throw ANTLR_USE_NAMESPACE(antlr)
-                              NoViableAltException(LT(1), getFilename());
-                        }
-                      }
-                    }
-                    match(RSQUARE);
-                  } else {
-                    if (_cnt276 >= 1) {
-                      goto _loop276;
-                    } else {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-
-                  _cnt276++;
-                }
-              _loop276:;
-              }  // ( ... )+
-              if (inputState->guessing == 0) {
-#line 1259 "CPP_parser.g"
-                declaratorArray();
-#line 7248 "CPPParser.cpp"
-              }
-            } else if ((_tokenSet_44.member(LA(1))) &&
-                       (_tokenSet_81.member(LA(2)))) {
-              id = qualified_id();
-              if (inputState->guessing == 0) {
-#line 1262 "CPP_parser.g"
-                if (_td == true) {
-                  declaratorID(id, qiType);  // This statement is a typedef
-                } else {
-                  declaratorID(id, qiVar);
-                }
-                is_address = false;
-                is_pointer = false;
-
-#line 7261 "CPPParser.cpp"
-              }
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_69);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::parameter_list() {
-  try {  // for error handling
-    parameter_declaration_list();
-    {
-      switch (LA(1)) {
-        case ELLIPSIS: {
-          match(ELLIPSIS);
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_71);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::exception_specification() {
-#line 1560 "CPP_parser.g"
-  char* so;
-#line 7314 "CPPParser.cpp"
-
-  try {  // for error handling
-    match(LITERAL_throw);
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case ID:
-        case RPAREN:
-        case SCOPE: {
-          {
-            switch (LA(1)) {
-              case ID:
-              case SCOPE: {
-                so = scope_override();
-                match(ID);
-                {  // ( ... )*
-                  for (;;) {
-                    if ((LA(1) == COMMA)) {
-                      match(COMMA);
-                      so = scope_override();
-                      match(ID);
-                    } else {
-                      goto _loop366;
-                    }
-                  }
-                _loop366:;
-                }  // ( ... )*
-                break;
-              }
-              case RPAREN: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case ELLIPSIS: {
-          match(ELLIPSIS);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_82);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::declarator_suffix() {
-#line 1284 "CPP_parser.g"
-  CPPParser::TypeQualifier tq;
-#line 7386 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      if ((LA(1) == LSQUARE)) {
-        {  // ( ... )+
-          int _cnt283 = 0;
-          for (;;) {
-            if ((LA(1) == LSQUARE)) {
-              match(LSQUARE);
-              {
-                switch (LA(1)) {
-                  case ID:
-                  case StringLiteral:
-                  case LPAREN:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case OPERATOR:
-                  case LITERAL_this:
-                  case LITERAL_true:
-                  case LITERAL_false:
-                  case OCTALINT:
-                  case TILDE:
-                  case STAR:
-                  case AMPERSAND:
-                  case PLUS:
-                  case MINUS:
-                  case PLUSPLUS:
-                  case MINUSMINUS:
-                  case LITERAL_sizeof:
-                  case LITERAL___alignof__:
-                  case SCOPE:
-                  case LITERAL_dynamic_cast:
-                  case LITERAL_static_cast:
-                  case LITERAL_reinterpret_cast:
-                  case LITERAL_const_cast:
-                  case LITERAL_typeid:
-                  case DECIMALINT:
-                  case HEXADECIMALINT:
-                  case CharLiteral:
-                  case WCharLiteral:
-                  case WStringLiteral:
-                  case FLOATONE:
-                  case FLOATTWO:
-                  case NOT:
-                  case LITERAL_new:
-                  case LITERAL_delete: {
-                    constant_expression();
-                    break;
-                  }
-                  case RSQUARE: {
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-              match(RSQUARE);
-            } else {
-              if (_cnt283 >= 1) {
-                goto _loop283;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-
-            _cnt283++;
-          }
-        _loop283:;
-        }  // ( ... )+
-        if (inputState->guessing == 0) {
-#line 1290 "CPP_parser.g"
-          declaratorArray();
-#line 7490 "CPPParser.cpp"
-        }
-      } else if (((LA(1) == LPAREN)) &&
-                 ((!((LA(1) == LPAREN) && (LA(2) == ID)) ||
-                   (qualifiedItemIsOneOf(qiType | qiCtor, 1))))) {
-        match(LPAREN);
-        if (inputState->guessing == 0) {
-#line 1293 "CPP_parser.g"
-          declaratorParameterList(0);
-#line 7498 "CPPParser.cpp"
-        }
-        {
-          switch (LA(1)) {
-            case LITERAL_typedef:
-            case LITERAL_enum:
-            case ID:
-            case LITERAL_inline:
-            case LITERAL_friend:
-            case LITERAL_extern:
-            case LITERAL_struct:
-            case LITERAL_union:
-            case LITERAL_class:
-            case LITERAL__stdcall:
-            case LITERAL___stdcall:
-            case LITERAL_GFEXCLUDE:
-            case LITERAL_GFINCLUDE:
-            case LITERAL_GFID:
-            case LITERAL_GFUNREAD:
-            case LITERAL_GFARRAYSIZE:
-            case LPAREN:
-            case LITERAL_GFARRAYSIZES:
-            case LITERAL_GFARRAYELEMSIZE:
-            case LITERAL_auto:
-            case LITERAL_register:
-            case LITERAL_static:
-            case LITERAL_mutable:
-            case LITERAL__inline:
-            case LITERAL___inline:
-            case LITERAL_virtual:
-            case LITERAL_explicit:
-            case LITERAL_typename:
-            case LITERAL_char:
-            case LITERAL_wchar_t:
-            case LITERAL_bool:
-            case LITERAL_short:
-            case LITERAL_int:
-            case 50:
-            case 51:
-            case 52:
-            case 53:
-            case 54:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
-            case 61:
-            case 62:
-            case 63:
-            case 64:
-            case 65:
-            case 66:
-            case 67:
-            case LITERAL_long:
-            case LITERAL_signed:
-            case LITERAL_unsigned:
-            case LITERAL_float:
-            case LITERAL_double:
-            case LITERAL_void:
-            case LITERAL__declspec:
-            case LITERAL___declspec:
-            case LITERAL_const:
-            case LITERAL___const:
-            case LITERAL_volatile:
-            case LITERAL___volatile__:
-            case OPERATOR:
-            case LITERAL_this:
-            case LITERAL_true:
-            case LITERAL_false:
-            case TILDE:
-            case STAR:
-            case AMPERSAND:
-            case ELLIPSIS:
-            case SCOPE:
-            case LITERAL__cdecl:
-            case LITERAL___cdecl:
-            case LITERAL__near:
-            case LITERAL___near:
-            case LITERAL__far:
-            case LITERAL___far:
-            case LITERAL___interrupt:
-            case LITERAL_pascal:
-            case LITERAL__pascal:
-            case LITERAL___pascal: {
-              parameter_list();
-              break;
-            }
-            case RPAREN: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        match(RPAREN);
-        if (inputState->guessing == 0) {
-#line 1295 "CPP_parser.g"
-          declaratorEndParameterList(0);
-#line 7602 "CPPParser.cpp"
-        }
-        {  // ( ... )*
-          for (;;) {
-            if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-              tq = type_qualifier();
-            } else {
-              goto _loop286;
-            }
-          }
-        _loop286:;
-        }  // ( ... )*
-        {
-          switch (LA(1)) {
-            case LITERAL_throw: {
-              exception_specification();
-              break;
-            }
-            case GREATERTHAN:
-            case SEMICOLON:
-            case ASSIGNEQUAL:
-            case LPAREN:
-            case RPAREN:
-            case COMMA:
-            case ELLIPSIS: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_69);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_parameter_list() {
-  try {  // for error handling
-    if (inputState->guessing == 0) {
-#line 1581 "CPP_parser.g"
-      beginTemplateParameterList();
-#line 7662 "CPPParser.cpp"
-    }
-    template_parameter();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          template_parameter();
-        } else {
-          goto _loop370;
-        }
-      }
-    _loop370:;
-    }  // ( ... )*
-    if (inputState->guessing == 0) {
-#line 1583 "CPP_parser.g"
-      endTemplateParameterList();
-#line 7681 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_52);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::function_direct_declarator(int definition) {
-#line 1324 "CPP_parser.g"
-  char* q;
-  CPPParser::TypeQualifier tq;
-#line 7700 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LPAREN: {
-          match(LPAREN);
-          q = qualified_id();
-          if (inputState->guessing == 0) {
-#line 1340 "CPP_parser.g"
-
-            declaratorID(q, qiFun);
-
-#line 7714 "CPPParser.cpp"
-          }
-          match(RPAREN);
-          break;
-        }
-        case ID:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case SCOPE: {
-          q = qualified_id();
-          if (inputState->guessing == 0) {
-#line 1346 "CPP_parser.g"
-
-            declaratorID(q, qiFun);
-
-#line 7732 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1351 "CPP_parser.g"
-
-#ifdef MYCODE
-      if (definition) myCode_function_direct_declarator(q);
-#endif  // MYCODE
-
-#line 7750 "CPPParser.cpp"
-    }
-    match(LPAREN);
-    if (inputState->guessing == 0) {
-#line 1359 "CPP_parser.g"
-
-      functionParameterList();
-      if (K_and_R == false) in_parameter_list = true;
-
-#line 7760 "CPPParser.cpp"
-    }
-    {
-      switch (LA(1)) {
-        case LITERAL_typedef:
-        case LITERAL_enum:
-        case ID:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LPAREN:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case ELLIPSIS:
-        case SCOPE:
-        case LITERAL__cdecl:
-        case LITERAL___cdecl:
-        case LITERAL__near:
-        case LITERAL___near:
-        case LITERAL__far:
-        case LITERAL___far:
-        case LITERAL___interrupt:
-        case LITERAL_pascal:
-        case LITERAL__pascal:
-        case LITERAL___pascal: {
-          parameter_list();
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1365 "CPP_parser.g"
-
-      if (K_and_R == false) {
-        in_parameter_list = false;
-      } else {
-        in_parameter_list = true;
-      }
-
-#line 7868 "CPPParser.cpp"
-    }
-    match(RPAREN);
-    {  // ( ... )*
-      for (;;) {
-        if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__)) &&
-            (_tokenSet_83.member(LA(2)))) {
-          tq = type_qualifier();
-        } else {
-          goto _loop303;
-        }
-      }
-    _loop303:;
-    }  // ( ... )*
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          match(OCTALINT);
-          break;
-        }
-        case LITERAL_typedef:
-        case SEMICOLON:
-        case LITERAL_enum:
-        case ID:
-        case LCURLY:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case LITERAL_throw:
-        case LITERAL_using:
-        case SCOPE: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    if (inputState->guessing == 0) {
-#line 1375 "CPP_parser.g"
-      functionEndParameterList(definition);
-#line 7970 "CPPParser.cpp"
-    }
-    {
-      switch (LA(1)) {
-        case LITERAL_throw: {
-          exception_specification();
-          break;
-        }
-        case LITERAL_typedef:
-        case SEMICOLON:
-        case LITERAL_enum:
-        case ID:
-        case LCURLY:
-        case LITERAL_inline:
-        case LITERAL_friend:
-        case LITERAL_extern:
-        case LITERAL_struct:
-        case LITERAL_union:
-        case LITERAL_class:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LITERAL_GFEXCLUDE:
-        case LITERAL_GFINCLUDE:
-        case LITERAL_GFID:
-        case LITERAL_GFUNREAD:
-        case LITERAL_GFARRAYSIZE:
-        case LITERAL_GFARRAYSIZES:
-        case LITERAL_GFARRAYELEMSIZE:
-        case LITERAL_auto:
-        case LITERAL_register:
-        case LITERAL_static:
-        case LITERAL_mutable:
-        case LITERAL__inline:
-        case LITERAL___inline:
-        case LITERAL_virtual:
-        case LITERAL_explicit:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case LITERAL_const:
-        case LITERAL___const:
-        case LITERAL_volatile:
-        case LITERAL___volatile__:
-        case LITERAL_using:
-        case SCOPE: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_29);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ctor_head() {
-  try {  // for error handling
-    ctor_decl_spec();
-    ctor_declarator(1);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_84);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ctor_body() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case COLON: {
-          ctor_initializer();
-          break;
-        }
-        case LCURLY: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    compound_statement();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_30);
-    } else {
-      throw;
-    }
-  }
-}
-
-char* CPPParser::qualified_ctor_id() {
-#line 1414 "CPP_parser.g"
-  char* q = NULL;
-#line 8116 "CPPParser.cpp"
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-#line 1414 "CPP_parser.g"
-
-  char* so;
-  static char qitem[CPPParser_MaxQualifiedItemSize + 1];
-
-#line 8123 "CPPParser.cpp"
-
-  try {  // for error handling
-    so = scope_override();
-    if (inputState->guessing == 0) {
-#line 1421 "CPP_parser.g"
-      strcpy(qitem, so);
-#line 8130 "CPPParser.cpp"
-    }
-    id = LT(1);
-    match(ID);
-    if (inputState->guessing == 0) {
-#line 1423 "CPP_parser.g"
-      strcat(qitem, (id->getText()).data());
-      q = qitem;
-#line 8138 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_85);
-    } else {
-      throw;
-    }
-  }
-  return q;
-}
-
-void CPPParser::ctor_initializer() {
-  try {  // for error handling
-    match(COLON);
-    superclass_init();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == COMMA)) {
-          match(COMMA);
-          superclass_init();
-        } else {
-          goto _loop320;
-        }
-      }
-    _loop320:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_53);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::superclass_init() {
-#line 1441 "CPP_parser.g"
-  char* q;
-#line 8184 "CPPParser.cpp"
-
-  try {  // for error handling
-    q = qualified_id();
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case ID:
-        case StringLiteral:
-        case LPAREN:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case OCTALINT:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case PLUS:
-        case MINUS:
-        case PLUSPLUS:
-        case MINUSMINUS:
-        case LITERAL_sizeof:
-        case LITERAL___alignof__:
-        case SCOPE:
-        case LITERAL_dynamic_cast:
-        case LITERAL_static_cast:
-        case LITERAL_reinterpret_cast:
-        case LITERAL_const_cast:
-        case LITERAL_typeid:
-        case DECIMALINT:
-        case HEXADECIMALINT:
-        case CharLiteral:
-        case WCharLiteral:
-        case WStringLiteral:
-        case FLOATONE:
-        case FLOATTWO:
-        case NOT:
-        case LITERAL_new:
-        case LITERAL_delete: {
-          expression_list();
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_60);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::dtor_decl_spec() {
-  try {  // for error handling
-    {    // ( ... )*
-      for (;;) {
-        switch (LA(1)) {
-          case LITERAL_inline:
-          case LITERAL__inline:
-          case LITERAL___inline: {
-            {
-              switch (LA(1)) {
-                case LITERAL_inline: {
-                  match(LITERAL_inline);
-                  break;
-                }
-                case LITERAL__inline: {
-                  match(LITERAL__inline);
-                  break;
-                }
-                case LITERAL___inline: {
-                  match(LITERAL___inline);
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-            break;
-          }
-          case LITERAL_virtual: {
-            match(LITERAL_virtual);
-            break;
-          }
-          default: { goto _loop327; }
-        }
-      }
-    _loop327:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_86);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::dtor_declarator(int definition) {
-#line 1461 "CPP_parser.g"
-  char* s;
-#line 8346 "CPPParser.cpp"
-
-  try {  // for error handling
-    s = scope_override();
-    match(TILDE);
-    match(ID);
-    if (inputState->guessing == 0) {
-#line 1466 "CPP_parser.g"
-      declaratorParameterList(definition);
-#line 8355 "CPPParser.cpp"
-    }
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case LITERAL_void: {
-          match(LITERAL_void);
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-    if (inputState->guessing == 0) {
-#line 1468 "CPP_parser.g"
-      declaratorEndParameterList(definition);
-#line 8379 "CPPParser.cpp"
-    }
-    {
-      switch (LA(1)) {
-        case LITERAL_throw: {
-          exception_specification();
-          break;
-        }
-        case SEMICOLON:
-        case LCURLY: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_32);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::parameter_declaration_list() {
-  try {  // for error handling
-    {
-      parameter_declaration();
-      {  // ( ... )*
-        for (;;) {
-          if ((LA(1) == COMMA)) {
-            match(COMMA);
-            parameter_declaration();
-          } else {
-            goto _loop337;
-          }
-        }
-      _loop337:;
-      }  // ( ... )*
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_87);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::parameter_declaration() {
-  try {  // for error handling
-    if (inputState->guessing == 0) {
-#line 1494 "CPP_parser.g"
-      beginParameterDeclaration();
-#line 8446 "CPPParser.cpp"
-    }
-    {
-      if (((_tokenSet_12.member(LA(1))) && (_tokenSet_88.member(LA(2)))) &&
-          (!((LA(1) == SCOPE) && (LA(2) == STAR || LA(2) == OPERATOR)) &&
-           (!(LA(1) == SCOPE || LA(1) == ID) ||
-            qualifiedItemIsOneOf(qiType | qiCtor)))) {
-        declaration_specifiers();
-        {
-          bool synPredMatched342 = false;
-          if (((_tokenSet_76.member(LA(1))) && (_tokenSet_89.member(LA(2))))) {
-            int _m342 = mark();
-            synPredMatched342 = true;
-            inputState->guessing++;
-            try {
-              { declarator(); }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched342 = false;
-            }
-            rewind(_m342);
-            inputState->guessing--;
-          }
-          if (synPredMatched342) {
-            declarator();
-          } else if ((_tokenSet_90.member(LA(1))) &&
-                     (_tokenSet_91.member(LA(2)))) {
-            abstract_declarator();
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-      } else {
-        bool synPredMatched344 = false;
-        if (((_tokenSet_76.member(LA(1))) && (_tokenSet_89.member(LA(2))))) {
-          int _m344 = mark();
-          synPredMatched344 = true;
-          inputState->guessing++;
-          try {
-            { declarator(); }
-          } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-            synPredMatched344 = false;
-          }
-          rewind(_m344);
-          inputState->guessing--;
-        }
-        if (synPredMatched344) {
-          declarator();
-        } else if ((LA(1) == ELLIPSIS)) {
-          match(ELLIPSIS);
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          remainder_expression();
-          break;
-        }
-        case GREATERTHAN:
-        case RPAREN:
-        case COMMA:
-        case ELLIPSIS: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_92);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::abstract_declarator() {
-  try {  // for error handling
-    if ((_tokenSet_25.member(LA(1)))) {
-      ptr_operator();
-      abstract_declarator();
-    } else {
-      bool synPredMatched351 = false;
-      if (((LA(1) == LPAREN) && (_tokenSet_25.member(LA(2))))) {
-        int _m351 = mark();
-        synPredMatched351 = true;
-        inputState->guessing++;
-        try {
-          {
-            match(LPAREN);
-            {  // ( ... )+
-              int _cnt350 = 0;
-              for (;;) {
-                if ((_tokenSet_25.member(LA(1)))) {
-                  ptr_operator();
-                } else {
-                  if (_cnt350 >= 1) {
-                    goto _loop350;
-                  } else {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-
-                _cnt350++;
-              }
-            _loop350:;
-            }  // ( ... )+
-            match(RPAREN);
-          }
-        } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-          synPredMatched351 = false;
-        }
-        rewind(_m351);
-        inputState->guessing--;
-      }
-      if (synPredMatched351) {
-        match(LPAREN);
-        {  // ( ... )+
-          int _cnt353 = 0;
-          for (;;) {
-            if ((_tokenSet_25.member(LA(1)))) {
-              ptr_operator();
-            } else {
-              if (_cnt353 >= 1) {
-                goto _loop353;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-
-            _cnt353++;
-          }
-        _loop353:;
-        }  // ( ... )+
-        match(RPAREN);
-        {
-          switch (LA(1)) {
-            case LPAREN:
-            case LSQUARE: {
-              abstract_declarator_suffix();
-              break;
-            }
-            case GREATERTHAN:
-            case ASSIGNEQUAL:
-            case RPAREN:
-            case COMMA:
-            case ELLIPSIS: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-      } else if ((_tokenSet_93.member(LA(1))) && (_tokenSet_94.member(LA(2)))) {
-        {
-          switch (LA(1)) {
-            case LPAREN:
-            case LSQUARE: {
-              abstract_declarator_suffix();
-              break;
-            }
-            case GREATERTHAN:
-            case ASSIGNEQUAL:
-            case RPAREN:
-            case COMMA:
-            case ELLIPSIS: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_95);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::type_id() {
-  try {  // for error handling
-    declaration_specifiers();
-    abstract_declarator();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_96);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::abstract_declarator_suffix() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case LSQUARE: {
-        {  // ( ... )+
-          int _cnt359 = 0;
-          for (;;) {
-            if ((LA(1) == LSQUARE)) {
-              match(LSQUARE);
-              {
-                switch (LA(1)) {
-                  case ID:
-                  case StringLiteral:
-                  case LPAREN:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case OPERATOR:
-                  case LITERAL_this:
-                  case LITERAL_true:
-                  case LITERAL_false:
-                  case OCTALINT:
-                  case TILDE:
-                  case STAR:
-                  case AMPERSAND:
-                  case PLUS:
-                  case MINUS:
-                  case PLUSPLUS:
-                  case MINUSMINUS:
-                  case LITERAL_sizeof:
-                  case LITERAL___alignof__:
-                  case SCOPE:
-                  case LITERAL_dynamic_cast:
-                  case LITERAL_static_cast:
-                  case LITERAL_reinterpret_cast:
-                  case LITERAL_const_cast:
-                  case LITERAL_typeid:
-                  case DECIMALINT:
-                  case HEXADECIMALINT:
-                  case CharLiteral:
-                  case WCharLiteral:
-                  case WStringLiteral:
-                  case FLOATONE:
-                  case FLOATTWO:
-                  case NOT:
-                  case LITERAL_new:
-                  case LITERAL_delete: {
-                    constant_expression();
-                    break;
-                  }
-                  case RSQUARE: {
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-              match(RSQUARE);
-            } else {
-              if (_cnt359 >= 1) {
-                goto _loop359;
-              } else {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-
-            _cnt359++;
-          }
-        _loop359:;
-        }  // ( ... )+
-        if (inputState->guessing == 0) {
-#line 1548 "CPP_parser.g"
-          declaratorArray();
-#line 8780 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LPAREN: {
-        match(LPAREN);
-        if (inputState->guessing == 0) {
-#line 1551 "CPP_parser.g"
-          declaratorParameterList(0);
-#line 8790 "CPPParser.cpp"
-        }
-        {
-          switch (LA(1)) {
-            case LITERAL_typedef:
-            case LITERAL_enum:
-            case ID:
-            case LITERAL_inline:
-            case LITERAL_friend:
-            case LITERAL_extern:
-            case LITERAL_struct:
-            case LITERAL_union:
-            case LITERAL_class:
-            case LITERAL__stdcall:
-            case LITERAL___stdcall:
-            case LITERAL_GFEXCLUDE:
-            case LITERAL_GFINCLUDE:
-            case LITERAL_GFID:
-            case LITERAL_GFUNREAD:
-            case LITERAL_GFARRAYSIZE:
-            case LPAREN:
-            case LITERAL_GFARRAYSIZES:
-            case LITERAL_GFARRAYELEMSIZE:
-            case LITERAL_auto:
-            case LITERAL_register:
-            case LITERAL_static:
-            case LITERAL_mutable:
-            case LITERAL__inline:
-            case LITERAL___inline:
-            case LITERAL_virtual:
-            case LITERAL_explicit:
-            case LITERAL_typename:
-            case LITERAL_char:
-            case LITERAL_wchar_t:
-            case LITERAL_bool:
-            case LITERAL_short:
-            case LITERAL_int:
-            case 50:
-            case 51:
-            case 52:
-            case 53:
-            case 54:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
-            case 61:
-            case 62:
-            case 63:
-            case 64:
-            case 65:
-            case 66:
-            case 67:
-            case LITERAL_long:
-            case LITERAL_signed:
-            case LITERAL_unsigned:
-            case LITERAL_float:
-            case LITERAL_double:
-            case LITERAL_void:
-            case LITERAL__declspec:
-            case LITERAL___declspec:
-            case LITERAL_const:
-            case LITERAL___const:
-            case LITERAL_volatile:
-            case LITERAL___volatile__:
-            case OPERATOR:
-            case LITERAL_this:
-            case LITERAL_true:
-            case LITERAL_false:
-            case TILDE:
-            case STAR:
-            case AMPERSAND:
-            case ELLIPSIS:
-            case SCOPE:
-            case LITERAL__cdecl:
-            case LITERAL___cdecl:
-            case LITERAL__near:
-            case LITERAL___near:
-            case LITERAL__far:
-            case LITERAL___far:
-            case LITERAL___interrupt:
-            case LITERAL_pascal:
-            case LITERAL__pascal:
-            case LITERAL___pascal: {
-              parameter_list();
-              break;
-            }
-            case RPAREN: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        match(RPAREN);
-        if (inputState->guessing == 0) {
-#line 1554 "CPP_parser.g"
-          declaratorEndParameterList(0);
-#line 8894 "CPPParser.cpp"
-        }
-        cv_qualifier_seq();
-        {
-          switch (LA(1)) {
-            case LITERAL_throw: {
-              exception_specification();
-              break;
-            }
-            case GREATERTHAN:
-            case ASSIGNEQUAL:
-            case RPAREN:
-            case COMMA:
-            case ELLIPSIS: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_95);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::cv_qualifier_seq() {
-#line 2218 "CPP_parser.g"
-  CPPParser::TypeQualifier tq;
-#line 8939 "CPPParser.cpp"
-
-  try {  // for error handling
-    {    // ( ... )*
-      for (;;) {
-        if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-          tq = type_qualifier();
-        } else {
-          goto _loop581;
-        }
-      }
-    _loop581:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_97);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_parameter() {
-  try {  // for error handling
-    {
-      if ((_tokenSet_98.member(LA(1))) && (_tokenSet_99.member(LA(2)))) {
-        type_parameter();
-      } else if ((_tokenSet_100.member(LA(1))) &&
-                 (_tokenSet_15.member(LA(2)))) {
-        parameter_declaration();
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_101);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::type_parameter() {
-  ANTLR_USE_NAMESPACE(antlr) RefToken id = ANTLR_USE_NAMESPACE(antlr) nullToken;
-  ANTLR_USE_NAMESPACE(antlr)
-  RefToken id2 = ANTLR_USE_NAMESPACE(antlr) nullToken;
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_class:
-        case LITERAL_typename: {
-          {
-            switch (LA(1)) {
-              case LITERAL_class: {
-                match(LITERAL_class);
-                break;
-              }
-              case LITERAL_typename: {
-                match(LITERAL_typename);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          {
-            switch (LA(1)) {
-              case ID: {
-                id = LT(1);
-                match(ID);
-                if (inputState->guessing == 0) {
-#line 1610 "CPP_parser.g"
-
-                  templateTypeParameter((id->getText()).data());
-
-#line 9030 "CPPParser.cpp"
-                }
-                {
-                  switch (LA(1)) {
-                    case ASSIGNEQUAL: {
-                      match(ASSIGNEQUAL);
-                      assigned_type_name();
-                      break;
-                    }
-                    case GREATERTHAN:
-                    case COMMA: {
-                      break;
-                    }
-                    default: {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-                break;
-              }
-              case GREATERTHAN:
-              case COMMA: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        case LITERAL_template: {
-          template_head();
-          match(LITERAL_class);
-          {
-            switch (LA(1)) {
-              case ID: {
-                id2 = LT(1);
-                match(ID);
-                if (inputState->guessing == 0) {
-#line 1618 "CPP_parser.g"
-
-                  templateTypeParameter((id2->getText()).data());
-
-#line 9081 "CPPParser.cpp"
-                }
-                {
-                  switch (LA(1)) {
-                    case ASSIGNEQUAL: {
-                      match(ASSIGNEQUAL);
-                      assigned_type_name();
-                      break;
-                    }
-                    case GREATERTHAN:
-                    case COMMA: {
-                      break;
-                    }
-                    default: {
-                      throw ANTLR_USE_NAMESPACE(antlr)
-                          NoViableAltException(LT(1), getFilename());
-                    }
-                  }
-                }
-                break;
-              }
-              case GREATERTHAN:
-              case COMMA: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_101);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::assigned_type_name() {
-#line 1631 "CPP_parser.g"
-  char* qt;
-  TypeSpecifier ts;
-#line 9137 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      if ((LA(1) == ID || LA(1) == SCOPE) && (_tokenSet_102.member(LA(2)))) {
-        qt = qualified_type();
-        abstract_declarator();
-      } else if ((_tokenSet_103.member(LA(1))) &&
-                 (_tokenSet_104.member(LA(2)))) {
-        ts = simple_type_specifier();
-        abstract_declarator();
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_101);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_id() {
-  try {  // for error handling
-    match(ID);
-    match(LESSTHAN);
-    template_argument_list();
-    match(GREATERTHAN);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_1);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::template_argument() {
-  try {  // for error handling
-    if (((_tokenSet_12.member(LA(1))) && (_tokenSet_105.member(LA(2)))) &&
-        ((!(LA(1) == SCOPE || LA(1) == ID) ||
-          qualifiedItemIsOneOf(qiType | qiCtor)))) {
-      type_id();
-    } else if ((_tokenSet_72.member(LA(1))) && (_tokenSet_106.member(LA(2)))) {
-      shift_expression();
-    } else {
-      throw ANTLR_USE_NAMESPACE(antlr)
-          NoViableAltException(LT(1), getFilename());
-    }
-
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_101);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::shift_expression() {
-  try {  // for error handling
-    additive_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == SHIFTLEFT || LA(1) == SHIFTRIGHT)) {
-          {
-            switch (LA(1)) {
-              case SHIFTLEFT: {
-                match(SHIFTLEFT);
-                break;
-              }
-              case SHIFTRIGHT: {
-                match(SHIFTRIGHT);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          additive_expression();
-        } else {
-          goto _loop482;
-        }
-      }
-    _loop482:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_107);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::statement_list() {
-  try {  // for error handling
-    {    // ( ... )+
-      int _cnt389 = 0;
-      for (;;) {
-        if ((_tokenSet_49.member(LA(1)))) {
-          statement();
-        } else {
-          if (_cnt389 >= 1) {
-            goto _loop389;
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-
-        _cnt389++;
-      }
-    _loop389:;
-    }  // ( ... )+
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_61);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::statement() {
-#line 1680 "CPP_parser.g"
-
-  FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-
-#line 9285 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_case: {
-          case_statement();
-          break;
-        }
-        case LITERAL_default: {
-          default_statement();
-          break;
-        }
-        case LCURLY: {
-          compound_statement();
-          break;
-        }
-        case LITERAL_if:
-        case LITERAL_switch: {
-          selection_statement();
-          break;
-        }
-        case LITERAL_while:
-        case LITERAL_do:
-        case LITERAL_for: {
-          iteration_statement();
-          break;
-        }
-        case LITERAL_goto:
-        case LITERAL_continue:
-        case LITERAL_break:
-        case LITERAL_return: {
-          jump_statement();
-          break;
-        }
-        case LITERAL_try: {
-          try_block();
-          break;
-        }
-        case LITERAL_throw: {
-          throw_statement();
-          break;
-        }
-        default:
-          bool synPredMatched393 = false;
-          if (((_tokenSet_108.member(LA(1))) &&
-               (_tokenSet_109.member(LA(2))))) {
-            int _m393 = mark();
-            synPredMatched393 = true;
-            inputState->guessing++;
-            try {
-              {
-                switch (LA(1)) {
-                  case LITERAL_namespace: {
-                    match(LITERAL_namespace);
-                    break;
-                  }
-                  case LITERAL_using: {
-                    match(LITERAL_using);
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched393 = false;
-            }
-            rewind(_m393);
-            inputState->guessing--;
-          }
-          if (synPredMatched393) {
-            block_declaration();
-          } else {
-            bool synPredMatched397 = false;
-            if (((_tokenSet_20.member(LA(1))) &&
-                 (_tokenSet_110.member(LA(2))))) {
-              int _m397 = mark();
-              synPredMatched397 = true;
-              inputState->guessing++;
-              try {
-                {
-                  {
-                    switch (LA(1)) {
-                      case LITERAL_typedef: {
-                        match(LITERAL_typedef);
-                        break;
-                      }
-                      case LITERAL_struct:
-                      case LITERAL_union:
-                      case LITERAL_class: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  class_specifier();
-                  {
-                    switch (LA(1)) {
-                      case ID:
-                      case OPERATOR:
-                      case LITERAL_this:
-                      case LITERAL_true:
-                      case LITERAL_false:
-                      case SCOPE: {
-                        qualified_id();
-                        break;
-                      }
-                      case LCURLY: {
-                        break;
-                      }
-                      default: {
-                        throw ANTLR_USE_NAMESPACE(antlr)
-                            NoViableAltException(LT(1), getFilename());
-                      }
-                    }
-                  }
-                  match(LCURLY);
-                }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched397 = false;
-              }
-              rewind(_m397);
-              inputState->guessing--;
-            }
-            if (synPredMatched397) {
-              member_declaration();
-            } else {
-              bool synPredMatched399 = false;
-              if (((_tokenSet_20.member(LA(1))) &&
-                   (_tokenSet_110.member(LA(2))))) {
-                int _m399 = mark();
-                synPredMatched399 = true;
-                inputState->guessing++;
-                try {
-                  {
-                    declaration_specifiers();
-                    match(LPAREN);
-                    ptr_operator();
-                    qualified_id();
-                    match(RPAREN);
-                  }
-                } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                  synPredMatched399 = false;
-                }
-                rewind(_m399);
-                inputState->guessing--;
-              }
-              if (synPredMatched399) {
-                member_declaration();
-              } else {
-                bool synPredMatched402 = false;
-                if (((_tokenSet_20.member(LA(1))) &&
-                     (_tokenSet_110.member(LA(2))))) {
-                  int _m402 = mark();
-                  synPredMatched402 = true;
-                  inputState->guessing++;
-                  try {
-                    {
-                      declaration_specifiers();
-                      {
-                        ptr_operator();
-                        ptr_operator();
-                      }
-                      qualified_id();
-                    }
-                  } catch (ANTLR_USE_NAMESPACE(antlr)
-                               RecognitionException& pe) {
-                    synPredMatched402 = false;
-                  }
-                  rewind(_m402);
-                  inputState->guessing--;
-                }
-                if (synPredMatched402) {
-                  member_declaration();
-                } else {
-                  bool synPredMatched407 = false;
-                  if (((_tokenSet_20.member(LA(1))) &&
-                       (_tokenSet_110.member(LA(2))))) {
-                    int _m407 = mark();
-                    synPredMatched407 = true;
-                    inputState->guessing++;
-                    try {
-                      {
-                        declaration_specifiers();
-                        {
-                          bool synPredMatched406 = false;
-                          if (((_tokenSet_25.member(LA(1))) &&
-                               (_tokenSet_111.member(LA(2))))) {
-                            int _m406 = mark();
-                            synPredMatched406 = true;
-                            inputState->guessing++;
-                            try {
-                              { ptr_operator(); }
-                            } catch (ANTLR_USE_NAMESPACE(antlr)
-                                         RecognitionException& pe) {
-                              synPredMatched406 = false;
-                            }
-                            rewind(_m406);
-                            inputState->guessing--;
-                          }
-                          if (synPredMatched406) {
-                            ptr_operator();
-                          } else if ((_tokenSet_44.member(LA(1))) && (true)) {
-                          } else {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                        qualified_id();
-                      }
-                    } catch (ANTLR_USE_NAMESPACE(antlr)
-                                 RecognitionException& pe) {
-                      synPredMatched407 = false;
-                    }
-                    rewind(_m407);
-                    inputState->guessing--;
-                  }
-                  if (synPredMatched407) {
-                    member_declaration();
-                  } else if ((LA(1) == ID) && (LA(2) == COLON)) {
-                    labeled_statement();
-                  } else if ((_tokenSet_72.member(LA(1))) &&
-                             (_tokenSet_112.member(LA(2)))) {
-                    expression();
-                    match(SEMICOLON);
-                    if (inputState->guessing == 0) {
-#line 1698 "CPP_parser.g"
-                      end_of_stmt();
-#line 9539 "CPPParser.cpp"
-                    }
-                  } else if ((LA(1) == SEMICOLON) &&
-                             (_tokenSet_40.member(LA(2)))) {
-                    match(SEMICOLON);
-                    if (inputState->guessing == 0) {
-#line 1703 "CPP_parser.g"
-                      end_of_stmt();
-#line 9547 "CPPParser.cpp"
-                    }
-                  } else if ((LA(1) == LITERAL_antlrTrace_on) &&
-                             (_tokenSet_40.member(LA(2)))) {
-                    match(LITERAL_antlrTrace_on);
-                    if (inputState->guessing == 0) {
-#line 1708 "CPP_parser.g"
-                      antlrTrace(true);
-#line 9555 "CPPParser.cpp"
-                    }
-                  } else if ((LA(1) == LITERAL_antlrTrace_off) &&
-                             (_tokenSet_40.member(LA(2)))) {
-                    match(LITERAL_antlrTrace_off);
-                    if (inputState->guessing == 0) {
-#line 1710 "CPP_parser.g"
-                      antlrTrace(false);
-#line 9563 "CPPParser.cpp"
-                    }
-                  } else {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-            }
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::block_declaration() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_typedef:
-      case LITERAL_enum:
-      case ID:
-      case LITERAL_inline:
-      case LITERAL_friend:
-      case LITERAL_extern:
-      case LITERAL_struct:
-      case LITERAL_union:
-      case LITERAL_class:
-      case LITERAL__stdcall:
-      case LITERAL___stdcall:
-      case LITERAL_GFEXCLUDE:
-      case LITERAL_GFINCLUDE:
-      case LITERAL_GFID:
-      case LITERAL_GFUNREAD:
-      case LITERAL_GFARRAYSIZE:
-      case LITERAL_GFARRAYSIZES:
-      case LITERAL_GFARRAYELEMSIZE:
-      case LITERAL_auto:
-      case LITERAL_register:
-      case LITERAL_static:
-      case LITERAL_mutable:
-      case LITERAL__inline:
-      case LITERAL___inline:
-      case LITERAL_virtual:
-      case LITERAL_explicit:
-      case LITERAL_typename:
-      case LITERAL_char:
-      case LITERAL_wchar_t:
-      case LITERAL_bool:
-      case LITERAL_short:
-      case LITERAL_int:
-      case 50:
-      case 51:
-      case 52:
-      case 53:
-      case 54:
-      case 55:
-      case 56:
-      case 57:
-      case 58:
-      case 59:
-      case 60:
-      case 61:
-      case 62:
-      case 63:
-      case 64:
-      case 65:
-      case 66:
-      case 67:
-      case LITERAL_long:
-      case LITERAL_signed:
-      case LITERAL_unsigned:
-      case LITERAL_float:
-      case LITERAL_double:
-      case LITERAL_void:
-      case LITERAL__declspec:
-      case LITERAL___declspec:
-      case LITERAL_const:
-      case LITERAL___const:
-      case LITERAL_volatile:
-      case LITERAL___volatile__:
-      case SCOPE: {
-        simple_declaration();
-        break;
-      }
-      case LITERAL_asm:
-      case LITERAL__asm:
-      case LITERAL___asm:
-      case LITERAL___asm__: {
-        asm_definition();
-        break;
-      }
-      case LITERAL_namespace: {
-        namespace_alias_definition();
-        break;
-      }
-      case LITERAL_using: {
-        using_statement();
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::labeled_statement() {
-  try {  // for error handling
-    match(ID);
-    match(COLON);
-    statement();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::case_statement() {
-  try {  // for error handling
-    match(LITERAL_case);
-    constant_expression();
-    match(COLON);
-    statement();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::default_statement() {
-  try {  // for error handling
-    match(LITERAL_default);
-    match(COLON);
-    statement();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::selection_statement() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_if: {
-        match(LITERAL_if);
-        match(LPAREN);
-        expression();
-        match(RPAREN);
-        statement();
-        {
-          if ((LA(1) == LITERAL_else) && (_tokenSet_49.member(LA(2)))) {
-            match(LITERAL_else);
-            statement();
-          } else if ((_tokenSet_40.member(LA(1))) &&
-                     (_tokenSet_113.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        break;
-      }
-      case LITERAL_switch: {
-        match(LITERAL_switch);
-        match(LPAREN);
-        expression();
-        match(RPAREN);
-        statement();
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::iteration_statement() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case LITERAL_while: {
-        match(LITERAL_while);
-        match(LPAREN);
-        expression();
-        match(RPAREN);
-        statement();
-        break;
-      }
-      case LITERAL_do: {
-        match(LITERAL_do);
-        statement();
-        match(LITERAL_while);
-        match(LPAREN);
-        expression();
-        match(RPAREN);
-        match(SEMICOLON);
-        if (inputState->guessing == 0) {
-#line 1777 "CPP_parser.g"
-          end_of_stmt();
-#line 9814 "CPPParser.cpp"
-        }
-        break;
-      }
-      case LITERAL_for: {
-        match(LITERAL_for);
-        match(LPAREN);
-        {
-          bool synPredMatched421 = false;
-          if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
-            int _m421 = mark();
-            synPredMatched421 = true;
-            inputState->guessing++;
-            try {
-              { declaration(); }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched421 = false;
-            }
-            rewind(_m421);
-            inputState->guessing--;
-          }
-          if (synPredMatched421) {
-            declaration();
-          } else if ((_tokenSet_72.member(LA(1))) &&
-                     (_tokenSet_112.member(LA(2)))) {
-            expression();
-            match(SEMICOLON);
-            if (inputState->guessing == 0) {
-#line 1781 "CPP_parser.g"
-              end_of_stmt();
-#line 9848 "CPPParser.cpp"
-            }
-          } else if ((LA(1) == SEMICOLON)) {
-            match(SEMICOLON);
-            if (inputState->guessing == 0) {
-#line 1782 "CPP_parser.g"
-              end_of_stmt();
-#line 9856 "CPPParser.cpp"
-            }
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        {
-          switch (LA(1)) {
-            case ID:
-            case StringLiteral:
-            case LPAREN:
-            case LITERAL_typename:
-            case LITERAL_char:
-            case LITERAL_wchar_t:
-            case LITERAL_bool:
-            case LITERAL_short:
-            case LITERAL_int:
-            case 50:
-            case 51:
-            case 52:
-            case 53:
-            case 54:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
-            case 61:
-            case 62:
-            case 63:
-            case 64:
-            case 65:
-            case 66:
-            case 67:
-            case LITERAL_long:
-            case LITERAL_signed:
-            case LITERAL_unsigned:
-            case LITERAL_float:
-            case LITERAL_double:
-            case LITERAL_void:
-            case LITERAL__declspec:
-            case LITERAL___declspec:
-            case OPERATOR:
-            case LITERAL_this:
-            case LITERAL_true:
-            case LITERAL_false:
-            case OCTALINT:
-            case TILDE:
-            case STAR:
-            case AMPERSAND:
-            case PLUS:
-            case MINUS:
-            case PLUSPLUS:
-            case MINUSMINUS:
-            case LITERAL_sizeof:
-            case LITERAL___alignof__:
-            case SCOPE:
-            case LITERAL_dynamic_cast:
-            case LITERAL_static_cast:
-            case LITERAL_reinterpret_cast:
-            case LITERAL_const_cast:
-            case LITERAL_typeid:
-            case DECIMALINT:
-            case HEXADECIMALINT:
-            case CharLiteral:
-            case WCharLiteral:
-            case WStringLiteral:
-            case FLOATONE:
-            case FLOATTWO:
-            case NOT:
-            case LITERAL_new:
-            case LITERAL_delete: {
-              expression();
-              break;
-            }
-            case SEMICOLON: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        match(SEMICOLON);
-        if (inputState->guessing == 0) {
-#line 1784 "CPP_parser.g"
-          end_of_stmt();
-#line 9949 "CPPParser.cpp"
-        }
-        {
-          switch (LA(1)) {
-            case ID:
-            case StringLiteral:
-            case LPAREN:
-            case LITERAL_typename:
-            case LITERAL_char:
-            case LITERAL_wchar_t:
-            case LITERAL_bool:
-            case LITERAL_short:
-            case LITERAL_int:
-            case 50:
-            case 51:
-            case 52:
-            case 53:
-            case 54:
-            case 55:
-            case 56:
-            case 57:
-            case 58:
-            case 59:
-            case 60:
-            case 61:
-            case 62:
-            case 63:
-            case 64:
-            case 65:
-            case 66:
-            case 67:
-            case LITERAL_long:
-            case LITERAL_signed:
-            case LITERAL_unsigned:
-            case LITERAL_float:
-            case LITERAL_double:
-            case LITERAL_void:
-            case LITERAL__declspec:
-            case LITERAL___declspec:
-            case OPERATOR:
-            case LITERAL_this:
-            case LITERAL_true:
-            case LITERAL_false:
-            case OCTALINT:
-            case TILDE:
-            case STAR:
-            case AMPERSAND:
-            case PLUS:
-            case MINUS:
-            case PLUSPLUS:
-            case MINUSMINUS:
-            case LITERAL_sizeof:
-            case LITERAL___alignof__:
-            case SCOPE:
-            case LITERAL_dynamic_cast:
-            case LITERAL_static_cast:
-            case LITERAL_reinterpret_cast:
-            case LITERAL_const_cast:
-            case LITERAL_typeid:
-            case DECIMALINT:
-            case HEXADECIMALINT:
-            case CharLiteral:
-            case WCharLiteral:
-            case WStringLiteral:
-            case FLOATONE:
-            case FLOATTWO:
-            case NOT:
-            case LITERAL_new:
-            case LITERAL_delete: {
-              expression();
-              break;
-            }
-            case RPAREN: {
-              break;
-            }
-            default: {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-        }
-        match(RPAREN);
-        statement();
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::jump_statement() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_goto: {
-          match(LITERAL_goto);
-          match(ID);
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 1791 "CPP_parser.g"
-            end_of_stmt();
-#line 10065 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_continue: {
-          match(LITERAL_continue);
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 1792 "CPP_parser.g"
-            end_of_stmt();
-#line 10076 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_break: {
-          match(LITERAL_break);
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 1793 "CPP_parser.g"
-            end_of_stmt();
-#line 10087 "CPPParser.cpp"
-          }
-          break;
-        }
-        case LITERAL_return: {
-          match(LITERAL_return);
-          if (inputState->guessing == 0) {
-#line 1795 "CPP_parser.g"
-            in_return = true;
-#line 10097 "CPPParser.cpp"
-          }
-          {
-            bool synPredMatched428 = false;
-            if (((LA(1) == LPAREN) && (LA(2) == ID))) {
-              int _m428 = mark();
-              synPredMatched428 = true;
-              inputState->guessing++;
-              try {
-                {
-                  match(LPAREN);
-                  if (!((qualifiedItemIsOneOf(qiType)))) {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        SemanticException("(qualifiedItemIsOneOf(qiType) )");
-                  }
-                  match(ID);
-                  match(RPAREN);
-                }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched428 = false;
-              }
-              rewind(_m428);
-              inputState->guessing--;
-            }
-            if (synPredMatched428) {
-              match(LPAREN);
-              match(ID);
-              match(RPAREN);
-              {
-                switch (LA(1)) {
-                  case ID:
-                  case StringLiteral:
-                  case LPAREN:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case OPERATOR:
-                  case LITERAL_this:
-                  case LITERAL_true:
-                  case LITERAL_false:
-                  case OCTALINT:
-                  case TILDE:
-                  case STAR:
-                  case AMPERSAND:
-                  case PLUS:
-                  case MINUS:
-                  case PLUSPLUS:
-                  case MINUSMINUS:
-                  case LITERAL_sizeof:
-                  case LITERAL___alignof__:
-                  case SCOPE:
-                  case LITERAL_dynamic_cast:
-                  case LITERAL_static_cast:
-                  case LITERAL_reinterpret_cast:
-                  case LITERAL_const_cast:
-                  case LITERAL_typeid:
-                  case DECIMALINT:
-                  case HEXADECIMALINT:
-                  case CharLiteral:
-                  case WCharLiteral:
-                  case WStringLiteral:
-                  case FLOATONE:
-                  case FLOATTWO:
-                  case NOT:
-                  case LITERAL_new:
-                  case LITERAL_delete: {
-                    expression();
-                    break;
-                  }
-                  case SEMICOLON: {
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-            } else if ((_tokenSet_72.member(LA(1))) &&
-                       (_tokenSet_112.member(LA(2)))) {
-              expression();
-            } else if ((LA(1) == SEMICOLON)) {
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-          match(SEMICOLON);
-          if (inputState->guessing == 0) {
-#line 1802 "CPP_parser.g"
-            in_return = false, end_of_stmt();
-#line 10220 "CPPParser.cpp"
-          }
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::try_block() {
-  try {  // for error handling
-    match(LITERAL_try);
-    compound_statement();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == LITERAL_catch)) {
-          handler();
-        } else {
-          goto _loop432;
-        }
-      }
-    _loop432:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::throw_statement() {
-  try {  // for error handling
-    match(LITERAL_throw);
-    {
-      switch (LA(1)) {
-        case ID:
-        case StringLiteral:
-        case LPAREN:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case OCTALINT:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case PLUS:
-        case MINUS:
-        case PLUSPLUS:
-        case MINUSMINUS:
-        case LITERAL_sizeof:
-        case LITERAL___alignof__:
-        case SCOPE:
-        case LITERAL_dynamic_cast:
-        case LITERAL_static_cast:
-        case LITERAL_reinterpret_cast:
-        case LITERAL_const_cast:
-        case LITERAL_typeid:
-        case DECIMALINT:
-        case HEXADECIMALINT:
-        case CharLiteral:
-        case WCharLiteral:
-        case WStringLiteral:
-        case FLOATONE:
-        case FLOATTWO:
-        case NOT:
-        case LITERAL_new:
-        case LITERAL_delete: {
-          assignment_expression();
-          break;
-        }
-        case SEMICOLON: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(SEMICOLON);
-    if (inputState->guessing == 0) {
-#line 1833 "CPP_parser.g"
-      end_of_stmt();
-#line 10358 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::simple_declaration() {
-  try {  // for error handling
-    declaration_specifiers();
-    {
-      switch (LA(1)) {
-        case ID:
-        case LITERAL__stdcall:
-        case LITERAL___stdcall:
-        case LPAREN:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case SCOPE:
-        case LITERAL__cdecl:
-        case LITERAL___cdecl:
-        case LITERAL__near:
-        case LITERAL___near:
-        case LITERAL__far:
-        case LITERAL___far:
-        case LITERAL___interrupt:
-        case LITERAL_pascal:
-        case LITERAL__pascal:
-        case LITERAL___pascal: {
-          init_declarator_list();
-          break;
-        }
-        case SEMICOLON: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(SEMICOLON);
-    if (inputState->guessing == 0) {
-#line 1725 "CPP_parser.g"
-      end_of_stmt();
-#line 10417 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::asm_definition() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_asm: {
-          match(LITERAL_asm);
-          break;
-        }
-        case LITERAL__asm: {
-          match(LITERAL__asm);
-          break;
-        }
-        case LITERAL___asm: {
-          match(LITERAL___asm);
-          break;
-        }
-        case LITERAL___asm__: {
-          match(LITERAL___asm__);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(LPAREN);
-    match(StringLiteral);
-    match(RPAREN);
-    match(SEMICOLON);
-    if (inputState->guessing == 0) {
-#line 1848 "CPP_parser.g"
-      end_of_stmt();
-#line 10468 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_40);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::handler() {
-  try {  // for error handling
-    match(LITERAL_catch);
-    if (inputState->guessing == 0) {
-#line 1814 "CPP_parser.g"
-      exceptionBeginHandler();
-#line 10488 "CPPParser.cpp"
-    }
-    if (inputState->guessing == 0) {
-#line 1815 "CPP_parser.g"
-      declaratorParameterList(1);
-#line 10493 "CPPParser.cpp"
-    }
-    match(LPAREN);
-    exception_declaration();
-    match(RPAREN);
-    if (inputState->guessing == 0) {
-#line 1817 "CPP_parser.g"
-      declaratorEndParameterList(1);
-#line 10501 "CPPParser.cpp"
-    }
-    compound_statement();
-    if (inputState->guessing == 0) {
-#line 1819 "CPP_parser.g"
-      exceptionEndHandler();
-#line 10507 "CPPParser.cpp"
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_114);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::exception_declaration() {
-  try {  // for error handling
-    parameter_declaration_list();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_71);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::assignment_expression() {
-  try {  // for error handling
-    conditional_expression();
-    {
-      switch (LA(1)) {
-        case ASSIGNEQUAL:
-        case TIMESEQUAL:
-        case DIVIDEEQUAL:
-        case MINUSEQUAL:
-        case PLUSEQUAL:
-        case MODEQUAL:
-        case SHIFTLEFTEQUAL:
-        case SHIFTRIGHTEQUAL:
-        case BITWISEANDEQUAL:
-        case BITWISEXOREQUAL:
-        case BITWISEOREQUAL: {
-          {
-            switch (LA(1)) {
-              case ASSIGNEQUAL: {
-                match(ASSIGNEQUAL);
-                break;
-              }
-              case TIMESEQUAL: {
-                match(TIMESEQUAL);
-                break;
-              }
-              case DIVIDEEQUAL: {
-                match(DIVIDEEQUAL);
-                break;
-              }
-              case MINUSEQUAL: {
-                match(MINUSEQUAL);
-                break;
-              }
-              case PLUSEQUAL: {
-                match(PLUSEQUAL);
-                break;
-              }
-              case MODEQUAL: {
-                match(MODEQUAL);
-                break;
-              }
-              case SHIFTLEFTEQUAL: {
-                match(SHIFTLEFTEQUAL);
-                break;
-              }
-              case SHIFTRIGHTEQUAL: {
-                match(SHIFTRIGHTEQUAL);
-                break;
-              }
-              case BITWISEANDEQUAL: {
-                match(BITWISEANDEQUAL);
-                break;
-              }
-              case BITWISEXOREQUAL: {
-                match(BITWISEXOREQUAL);
-                break;
-              }
-              case BITWISEOREQUAL: {
-                match(BITWISEOREQUAL);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          remainder_expression();
-          break;
-        }
-        case GREATERTHAN:
-        case SEMICOLON:
-        case RCURLY:
-        case COLON:
-        case RPAREN:
-        case COMMA:
-        case RSQUARE:
-        case ELLIPSIS: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_74);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::conditional_expression() {
-  try {  // for error handling
-    logical_or_expression();
-    {
-      switch (LA(1)) {
-        case QUESTIONMARK: {
-          match(QUESTIONMARK);
-          expression();
-          match(COLON);
-          conditional_expression();
-          break;
-        }
-        case GREATERTHAN:
-        case SEMICOLON:
-        case RCURLY:
-        case ASSIGNEQUAL:
-        case COLON:
-        case RPAREN:
-        case COMMA:
-        case RSQUARE:
-        case ELLIPSIS:
-        case TIMESEQUAL:
-        case DIVIDEEQUAL:
-        case MINUSEQUAL:
-        case PLUSEQUAL:
-        case MODEQUAL:
-        case SHIFTLEFTEQUAL:
-        case SHIFTRIGHTEQUAL:
-        case BITWISEANDEQUAL:
-        case BITWISEXOREQUAL:
-        case BITWISEOREQUAL: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_115);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::logical_or_expression() {
-  try {  // for error handling
-    logical_and_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == OR)) {
-          match(OR);
-          logical_and_expression();
-        } else {
-          goto _loop458;
-        }
-      }
-    _loop458:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_116);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::logical_and_expression() {
-  try {  // for error handling
-    inclusive_or_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == AND)) {
-          match(AND);
-          inclusive_or_expression();
-        } else {
-          goto _loop461;
-        }
-      }
-    _loop461:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_117);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::inclusive_or_expression() {
-  try {  // for error handling
-    exclusive_or_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == BITWISEOR)) {
-          match(BITWISEOR);
-          exclusive_or_expression();
-        } else {
-          goto _loop464;
-        }
-      }
-    _loop464:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_118);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::exclusive_or_expression() {
-  try {  // for error handling
-    and_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == BITWISEXOR)) {
-          match(BITWISEXOR);
-          and_expression();
-        } else {
-          goto _loop467;
-        }
-      }
-    _loop467:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_119);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::and_expression() {
-  try {  // for error handling
-    equality_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == AMPERSAND)) {
-          match(AMPERSAND);
-          equality_expression();
-        } else {
-          goto _loop470;
-        }
-      }
-    _loop470:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_120);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::equality_expression() {
-  try {  // for error handling
-    relational_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == NOTEQUAL || LA(1) == EQUAL)) {
-          {
-            switch (LA(1)) {
-              case NOTEQUAL: {
-                match(NOTEQUAL);
-                break;
-              }
-              case EQUAL: {
-                match(EQUAL);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          relational_expression();
-        } else {
-          goto _loop474;
-        }
-      }
-    _loop474:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_121);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::relational_expression() {
-  try {  // for error handling
-    shift_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_122.member(LA(1))) && (_tokenSet_72.member(LA(2)))) {
-          {
-            switch (LA(1)) {
-              case LESSTHAN: {
-                match(LESSTHAN);
-                break;
-              }
-              case GREATERTHAN: {
-                match(GREATERTHAN);
-                break;
-              }
-              case LESSTHANOREQUALTO: {
-                match(LESSTHANOREQUALTO);
-                break;
-              }
-              case GREATERTHANOREQUALTO: {
-                match(GREATERTHANOREQUALTO);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          shift_expression();
-        } else {
-          goto _loop478;
-        }
-      }
-    _loop478:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_123);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::additive_expression() {
-  try {  // for error handling
-    multiplicative_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == PLUS || LA(1) == MINUS)) {
-          {
-            switch (LA(1)) {
-              case PLUS: {
-                match(PLUS);
-                break;
-              }
-              case MINUS: {
-                match(MINUS);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          multiplicative_expression();
-        } else {
-          goto _loop486;
-        }
-      }
-    _loop486:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_124);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::multiplicative_expression() {
-  try {  // for error handling
-    pm_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((_tokenSet_125.member(LA(1)))) {
-          {
-            switch (LA(1)) {
-              case STAR: {
-                match(STAR);
-                break;
-              }
-              case DIVIDE: {
-                match(DIVIDE);
-                break;
-              }
-              case MOD: {
-                match(MOD);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          pm_expression();
-        } else {
-          goto _loop490;
-        }
-      }
-    _loop490:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_126);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::pm_expression() {
-  try {  // for error handling
-    cast_expression();
-    {  // ( ... )*
-      for (;;) {
-        if ((LA(1) == DOTMBR || LA(1) == POINTERTOMBR)) {
-          {
-            switch (LA(1)) {
-              case DOTMBR: {
-                match(DOTMBR);
-                break;
-              }
-              case POINTERTOMBR: {
-                match(POINTERTOMBR);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          cast_expression();
-        } else {
-          goto _loop494;
-        }
-      }
-    _loop494:;
-    }  // ( ... )*
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_127);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::cast_expression() {
-#line 2021 "CPP_parser.g"
-  TypeQualifier tq;
-  TypeSpecifier ts;
-#line 11084 "CPPParser.cpp"
-
-  try {  // for error handling
-    bool synPredMatched501 = false;
-    if (((LA(1) == LPAREN) && (_tokenSet_128.member(LA(2))))) {
-      int _m501 = mark();
-      synPredMatched501 = true;
-      inputState->guessing++;
-      try {
-        {
-          match(LPAREN);
-          {  // ( ... )*
-            for (;;) {
-              if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-                type_qualifier();
-              } else {
-                goto _loop498;
-              }
-            }
-          _loop498:;
-          }  // ( ... )*
-          simple_type_specifier();
-          {  // ( ... )*
-            for (;;) {
-              if ((_tokenSet_25.member(LA(1)))) {
-                ptr_operator();
-              } else {
-                goto _loop500;
-              }
-            }
-          _loop500:;
-          }  // ( ... )*
-          match(RPAREN);
-          unary_expression();
-        }
-      } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-        synPredMatched501 = false;
-      }
-      rewind(_m501);
-      inputState->guessing--;
-    }
-    if (synPredMatched501) {
-      match(LPAREN);
-      {  // ( ... )*
-        for (;;) {
-          if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-            tq = type_qualifier();
-          } else {
-            goto _loop503;
-          }
-        }
-      _loop503:;
-      }  // ( ... )*
-      ts = simple_type_specifier();
-      {  // ( ... )*
-        for (;;) {
-          if ((_tokenSet_25.member(LA(1)))) {
-            ptr_operator();
-          } else {
-            goto _loop505;
-          }
-        }
-      _loop505:;
-      }  // ( ... )*
-      match(RPAREN);
-      unary_expression();
-    } else {
-      bool synPredMatched511 = false;
-      if (((LA(1) == LPAREN) && (_tokenSet_128.member(LA(2))))) {
-        int _m511 = mark();
-        synPredMatched511 = true;
-        inputState->guessing++;
-        try {
-          {
-            match(LPAREN);
-            {  // ( ... )*
-              for (;;) {
-                if (((LA(1) >= LITERAL_const &&
-                      LA(1) <= LITERAL___volatile__))) {
-                  type_qualifier();
-                } else {
-                  goto _loop508;
-                }
-              }
-            _loop508:;
-            }  // ( ... )*
-            simple_type_specifier();
-            {  // ( ... )*
-              for (;;) {
-                if ((_tokenSet_25.member(LA(1)))) {
-                  ptr_operator();
-                } else {
-                  goto _loop510;
-                }
-              }
-            _loop510:;
-            }  // ( ... )*
-            match(RPAREN);
-          }
-        } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-          synPredMatched511 = false;
-        }
-        rewind(_m511);
-        inputState->guessing--;
-      }
-      if (synPredMatched511) {
-        match(LPAREN);
-        {  // ( ... )*
-          for (;;) {
-            if (((LA(1) >= LITERAL_const && LA(1) <= LITERAL___volatile__))) {
-              tq = type_qualifier();
-            } else {
-              goto _loop513;
-            }
-          }
-        _loop513:;
-        }  // ( ... )*
-        ts = simple_type_specifier();
-        {  // ( ... )*
-          for (;;) {
-            if ((_tokenSet_25.member(LA(1)))) {
-              ptr_operator();
-            } else {
-              goto _loop515;
-            }
-          }
-        _loop515:;
-        }  // ( ... )*
-        match(RPAREN);
-        cast_expression();
-      } else if ((_tokenSet_72.member(LA(1))) && (_tokenSet_73.member(LA(2)))) {
-        unary_expression();
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::unary_expression() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case PLUSPLUS: {
-          match(PLUSPLUS);
-          unary_expression();
-          break;
-        }
-        case MINUSMINUS: {
-          match(MINUSMINUS);
-          unary_expression();
-          break;
-        }
-        case LITERAL_sizeof:
-        case LITERAL___alignof__: {
-          {
-            switch (LA(1)) {
-              case LITERAL_sizeof: {
-                match(LITERAL_sizeof);
-                break;
-              }
-              case LITERAL___alignof__: {
-                match(LITERAL___alignof__);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          {
-            bool synPredMatched523 = false;
-            if (((_tokenSet_72.member(LA(1))) &&
-                 (_tokenSet_73.member(LA(2))))) {
-              int _m523 = mark();
-              synPredMatched523 = true;
-              inputState->guessing++;
-              try {
-                { unary_expression(); }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched523 = false;
-              }
-              rewind(_m523);
-              inputState->guessing--;
-            }
-            if (synPredMatched523) {
-              unary_expression();
-            } else if ((LA(1) == LPAREN) && (_tokenSet_12.member(LA(2)))) {
-              match(LPAREN);
-              type_id();
-              match(RPAREN);
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-          break;
-        }
-        default:
-          bool synPredMatched519 = false;
-          if (((_tokenSet_130.member(LA(1))) &&
-               (_tokenSet_131.member(LA(2))))) {
-            int _m519 = mark();
-            synPredMatched519 = true;
-            inputState->guessing++;
-            try {
-              { postfix_expression(); }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched519 = false;
-            }
-            rewind(_m519);
-            inputState->guessing--;
-          }
-          if (synPredMatched519) {
-            postfix_expression();
-          } else if ((_tokenSet_132.member(LA(1))) &&
-                     (_tokenSet_72.member(LA(2)))) {
-            unary_operator();
-            cast_expression();
-          } else if ((_tokenSet_133.member(LA(1))) &&
-                     (_tokenSet_134.member(LA(2)))) {
-            {
-              switch (LA(1)) {
-                case SCOPE: {
-                  match(SCOPE);
-                  break;
-                }
-                case LITERAL_new:
-                case LITERAL_delete: {
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-            {
-              switch (LA(1)) {
-                case LITERAL_new: {
-                  new_expression();
-                  break;
-                }
-                case LITERAL_delete: {
-                  delete_expression();
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::postfix_expression() {
-#line 2063 "CPP_parser.g"
-
-  TypeSpecifier ts;
-
-#line 11404 "CPPParser.cpp"
-
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case LITERAL_dynamic_cast:
-        case LITERAL_static_cast:
-        case LITERAL_reinterpret_cast:
-        case LITERAL_const_cast: {
-          {
-            switch (LA(1)) {
-              case LITERAL_dynamic_cast: {
-                match(LITERAL_dynamic_cast);
-                break;
-              }
-              case LITERAL_static_cast: {
-                match(LITERAL_static_cast);
-                break;
-              }
-              case LITERAL_reinterpret_cast: {
-                match(LITERAL_reinterpret_cast);
-                break;
-              }
-              case LITERAL_const_cast: {
-                match(LITERAL_const_cast);
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(LESSTHAN);
-          {
-            switch (LA(1)) {
-              case LITERAL_const: {
-                match(LITERAL_const);
-                break;
-              }
-              case LITERAL___const: {
-                match(LITERAL___const);
-                break;
-              }
-              case ID:
-              case LITERAL_typename:
-              case LITERAL_char:
-              case LITERAL_wchar_t:
-              case LITERAL_bool:
-              case LITERAL_short:
-              case LITERAL_int:
-              case 50:
-              case 51:
-              case 52:
-              case 53:
-              case 54:
-              case 55:
-              case 56:
-              case 57:
-              case 58:
-              case 59:
-              case 60:
-              case 61:
-              case 62:
-              case 63:
-              case 64:
-              case 65:
-              case 66:
-              case 67:
-              case LITERAL_long:
-              case LITERAL_signed:
-              case LITERAL_unsigned:
-              case LITERAL_float:
-              case LITERAL_double:
-              case LITERAL_void:
-              case LITERAL__declspec:
-              case LITERAL___declspec:
-              case SCOPE: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          ts = type_specifier();
-          {
-            switch (LA(1)) {
-              case ID:
-              case LITERAL__stdcall:
-              case LITERAL___stdcall:
-              case STAR:
-              case AMPERSAND:
-              case SCOPE:
-              case LITERAL__cdecl:
-              case LITERAL___cdecl:
-              case LITERAL__near:
-              case LITERAL___near:
-              case LITERAL__far:
-              case LITERAL___far:
-              case LITERAL___interrupt:
-              case LITERAL_pascal:
-              case LITERAL__pascal:
-              case LITERAL___pascal: {
-                ptr_operator();
-                break;
-              }
-              case GREATERTHAN: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(GREATERTHAN);
-          match(LPAREN);
-          expression();
-          match(RPAREN);
-          break;
-        }
-        case LITERAL_typeid: {
-          match(LITERAL_typeid);
-          match(LPAREN);
-          {
-            bool synPredMatched544 = false;
-            if (((_tokenSet_12.member(LA(1))) &&
-                 (_tokenSet_135.member(LA(2))))) {
-              int _m544 = mark();
-              synPredMatched544 = true;
-              inputState->guessing++;
-              try {
-                { type_id(); }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched544 = false;
-              }
-              rewind(_m544);
-              inputState->guessing--;
-            }
-            if (synPredMatched544) {
-              type_id();
-            } else if ((_tokenSet_72.member(LA(1))) &&
-                       (_tokenSet_136.member(LA(2)))) {
-              expression();
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-          match(RPAREN);
-          break;
-        }
-        default:
-          bool synPredMatched529 = false;
-          if ((((_tokenSet_103.member(LA(1))) &&
-                (_tokenSet_137.member(LA(2)))) &&
-               (!(LA(1) == LPAREN)))) {
-            int _m529 = mark();
-            synPredMatched529 = true;
-            inputState->guessing++;
-            try {
-              {
-                ts = simple_type_specifier();
-                match(LPAREN);
-                match(RPAREN);
-                match(LPAREN);
-              }
-            } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-              synPredMatched529 = false;
-            }
-            rewind(_m529);
-            inputState->guessing--;
-          }
-          if (synPredMatched529) {
-            ts = simple_type_specifier();
-            match(LPAREN);
-            match(RPAREN);
-            match(LPAREN);
-            {
-              switch (LA(1)) {
-                case ID:
-                case StringLiteral:
-                case LPAREN:
-                case LITERAL_typename:
-                case LITERAL_char:
-                case LITERAL_wchar_t:
-                case LITERAL_bool:
-                case LITERAL_short:
-                case LITERAL_int:
-                case 50:
-                case 51:
-                case 52:
-                case 53:
-                case 54:
-                case 55:
-                case 56:
-                case 57:
-                case 58:
-                case 59:
-                case 60:
-                case 61:
-                case 62:
-                case 63:
-                case 64:
-                case 65:
-                case 66:
-                case 67:
-                case LITERAL_long:
-                case LITERAL_signed:
-                case LITERAL_unsigned:
-                case LITERAL_float:
-                case LITERAL_double:
-                case LITERAL_void:
-                case LITERAL__declspec:
-                case LITERAL___declspec:
-                case OPERATOR:
-                case LITERAL_this:
-                case LITERAL_true:
-                case LITERAL_false:
-                case OCTALINT:
-                case TILDE:
-                case STAR:
-                case AMPERSAND:
-                case PLUS:
-                case MINUS:
-                case PLUSPLUS:
-                case MINUSMINUS:
-                case LITERAL_sizeof:
-                case LITERAL___alignof__:
-                case SCOPE:
-                case LITERAL_dynamic_cast:
-                case LITERAL_static_cast:
-                case LITERAL_reinterpret_cast:
-                case LITERAL_const_cast:
-                case LITERAL_typeid:
-                case DECIMALINT:
-                case HEXADECIMALINT:
-                case CharLiteral:
-                case WCharLiteral:
-                case WStringLiteral:
-                case FLOATONE:
-                case FLOATTWO:
-                case NOT:
-                case LITERAL_new:
-                case LITERAL_delete: {
-                  expression_list();
-                  break;
-                }
-                case RPAREN: {
-                  break;
-                }
-                default: {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-            match(RPAREN);
-          } else {
-            bool synPredMatched532 = false;
-            if ((((_tokenSet_103.member(LA(1))) &&
-                  (_tokenSet_137.member(LA(2)))) &&
-                 (!(LA(1) == LPAREN)))) {
-              int _m532 = mark();
-              synPredMatched532 = true;
-              inputState->guessing++;
-              try {
-                {
-                  ts = simple_type_specifier();
-                  match(LPAREN);
-                }
-              } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-                synPredMatched532 = false;
-              }
-              rewind(_m532);
-              inputState->guessing--;
-            }
-            if (synPredMatched532) {
-              ts = simple_type_specifier();
-              match(LPAREN);
-              {
-                switch (LA(1)) {
-                  case ID:
-                  case StringLiteral:
-                  case LPAREN:
-                  case LITERAL_typename:
-                  case LITERAL_char:
-                  case LITERAL_wchar_t:
-                  case LITERAL_bool:
-                  case LITERAL_short:
-                  case LITERAL_int:
-                  case 50:
-                  case 51:
-                  case 52:
-                  case 53:
-                  case 54:
-                  case 55:
-                  case 56:
-                  case 57:
-                  case 58:
-                  case 59:
-                  case 60:
-                  case 61:
-                  case 62:
-                  case 63:
-                  case 64:
-                  case 65:
-                  case 66:
-                  case 67:
-                  case LITERAL_long:
-                  case LITERAL_signed:
-                  case LITERAL_unsigned:
-                  case LITERAL_float:
-                  case LITERAL_double:
-                  case LITERAL_void:
-                  case LITERAL__declspec:
-                  case LITERAL___declspec:
-                  case OPERATOR:
-                  case LITERAL_this:
-                  case LITERAL_true:
-                  case LITERAL_false:
-                  case OCTALINT:
-                  case TILDE:
-                  case STAR:
-                  case AMPERSAND:
-                  case PLUS:
-                  case MINUS:
-                  case PLUSPLUS:
-                  case MINUSMINUS:
-                  case LITERAL_sizeof:
-                  case LITERAL___alignof__:
-                  case SCOPE:
-                  case LITERAL_dynamic_cast:
-                  case LITERAL_static_cast:
-                  case LITERAL_reinterpret_cast:
-                  case LITERAL_const_cast:
-                  case LITERAL_typeid:
-                  case DECIMALINT:
-                  case HEXADECIMALINT:
-                  case CharLiteral:
-                  case WCharLiteral:
-                  case WStringLiteral:
-                  case FLOATONE:
-                  case FLOATTWO:
-                  case NOT:
-                  case LITERAL_new:
-                  case LITERAL_delete: {
-                    expression_list();
-                    break;
-                  }
-                  case RPAREN: {
-                    break;
-                  }
-                  default: {
-                    throw ANTLR_USE_NAMESPACE(antlr)
-                        NoViableAltException(LT(1), getFilename());
-                  }
-                }
-              }
-              match(RPAREN);
-            } else if ((_tokenSet_138.member(LA(1))) &&
-                       (_tokenSet_131.member(LA(2)))) {
-              primary_expression();
-              {  // ( ... )*
-                for (;;) {
-                  switch (LA(1)) {
-                    case LSQUARE: {
-                      match(LSQUARE);
-                      expression();
-                      match(RSQUARE);
-                      break;
-                    }
-                    case LPAREN: {
-                      match(LPAREN);
-                      {
-                        switch (LA(1)) {
-                          case ID:
-                          case StringLiteral:
-                          case LPAREN:
-                          case LITERAL_typename:
-                          case LITERAL_char:
-                          case LITERAL_wchar_t:
-                          case LITERAL_bool:
-                          case LITERAL_short:
-                          case LITERAL_int:
-                          case 50:
-                          case 51:
-                          case 52:
-                          case 53:
-                          case 54:
-                          case 55:
-                          case 56:
-                          case 57:
-                          case 58:
-                          case 59:
-                          case 60:
-                          case 61:
-                          case 62:
-                          case 63:
-                          case 64:
-                          case 65:
-                          case 66:
-                          case 67:
-                          case LITERAL_long:
-                          case LITERAL_signed:
-                          case LITERAL_unsigned:
-                          case LITERAL_float:
-                          case LITERAL_double:
-                          case LITERAL_void:
-                          case LITERAL__declspec:
-                          case LITERAL___declspec:
-                          case OPERATOR:
-                          case LITERAL_this:
-                          case LITERAL_true:
-                          case LITERAL_false:
-                          case OCTALINT:
-                          case TILDE:
-                          case STAR:
-                          case AMPERSAND:
-                          case PLUS:
-                          case MINUS:
-                          case PLUSPLUS:
-                          case MINUSMINUS:
-                          case LITERAL_sizeof:
-                          case LITERAL___alignof__:
-                          case SCOPE:
-                          case LITERAL_dynamic_cast:
-                          case LITERAL_static_cast:
-                          case LITERAL_reinterpret_cast:
-                          case LITERAL_const_cast:
-                          case LITERAL_typeid:
-                          case DECIMALINT:
-                          case HEXADECIMALINT:
-                          case CharLiteral:
-                          case WCharLiteral:
-                          case WStringLiteral:
-                          case FLOATONE:
-                          case FLOATTWO:
-                          case NOT:
-                          case LITERAL_new:
-                          case LITERAL_delete: {
-                            expression_list();
-                            break;
-                          }
-                          case RPAREN: {
-                            break;
-                          }
-                          default: {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                      }
-                      match(RPAREN);
-                      break;
-                    }
-                    case DOT:
-                    case POINTERTO: {
-                      {
-                        switch (LA(1)) {
-                          case DOT: {
-                            match(DOT);
-                            break;
-                          }
-                          case POINTERTO: {
-                            match(POINTERTO);
-                            break;
-                          }
-                          default: {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                      }
-                      {
-                        switch (LA(1)) {
-                          case LITERAL_template: {
-                            match(LITERAL_template);
-                            break;
-                          }
-                          case ID:
-                          case OPERATOR:
-                          case TILDE:
-                          case SCOPE: {
-                            break;
-                          }
-                          default: {
-                            throw ANTLR_USE_NAMESPACE(antlr)
-                                NoViableAltException(LT(1), getFilename());
-                          }
-                        }
-                      }
-                      id_expression();
-                      break;
-                    }
-                    case PLUSPLUS: {
-                      match(PLUSPLUS);
-                      break;
-                    }
-                    case MINUSMINUS: {
-                      match(MINUSMINUS);
-                      break;
-                    }
-                    default: { goto _loop538; }
-                  }
-                }
-              _loop538:;
-              }  // ( ... )*
-            } else {
-              throw ANTLR_USE_NAMESPACE(antlr)
-                  NoViableAltException(LT(1), getFilename());
-            }
-          }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::unary_operator() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case AMPERSAND: {
-        match(AMPERSAND);
-        break;
-      }
-      case STAR: {
-        match(STAR);
-        break;
-      }
-      case PLUS: {
-        match(PLUS);
-        break;
-      }
-      case MINUS: {
-        match(MINUS);
-        break;
-      }
-      case TILDE: {
-        match(TILDE);
-        break;
-      }
-      case NOT: {
-        match(NOT);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_72);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::new_expression() {
-  try {  // for error handling
-    {
-      match(LITERAL_new);
-      {
-        bool synPredMatched557 = false;
-        if (((LA(1) == LPAREN) && (_tokenSet_72.member(LA(2))))) {
-          int _m557 = mark();
-          synPredMatched557 = true;
-          inputState->guessing++;
-          try {
-            {
-              match(LPAREN);
-              expression_list();
-              match(RPAREN);
-            }
-          } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& pe) {
-            synPredMatched557 = false;
-          }
-          rewind(_m557);
-          inputState->guessing--;
-        }
-        if (synPredMatched557) {
-          match(LPAREN);
-          expression_list();
-          match(RPAREN);
-        } else if ((_tokenSet_139.member(LA(1))) &&
-                   (_tokenSet_140.member(LA(2)))) {
-        } else {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-      {
-        switch (LA(1)) {
-          case LITERAL_typedef:
-          case LITERAL_enum:
-          case ID:
-          case LITERAL_inline:
-          case LITERAL_friend:
-          case LITERAL_extern:
-          case LITERAL_struct:
-          case LITERAL_union:
-          case LITERAL_class:
-          case LITERAL__stdcall:
-          case LITERAL___stdcall:
-          case LITERAL_GFEXCLUDE:
-          case LITERAL_GFINCLUDE:
-          case LITERAL_GFID:
-          case LITERAL_GFUNREAD:
-          case LITERAL_GFARRAYSIZE:
-          case LITERAL_GFARRAYSIZES:
-          case LITERAL_GFARRAYELEMSIZE:
-          case LITERAL_auto:
-          case LITERAL_register:
-          case LITERAL_static:
-          case LITERAL_mutable:
-          case LITERAL__inline:
-          case LITERAL___inline:
-          case LITERAL_virtual:
-          case LITERAL_explicit:
-          case LITERAL_typename:
-          case LITERAL_char:
-          case LITERAL_wchar_t:
-          case LITERAL_bool:
-          case LITERAL_short:
-          case LITERAL_int:
-          case 50:
-          case 51:
-          case 52:
-          case 53:
-          case 54:
-          case 55:
-          case 56:
-          case 57:
-          case 58:
-          case 59:
-          case 60:
-          case 61:
-          case 62:
-          case 63:
-          case 64:
-          case 65:
-          case 66:
-          case 67:
-          case LITERAL_long:
-          case LITERAL_signed:
-          case LITERAL_unsigned:
-          case LITERAL_float:
-          case LITERAL_double:
-          case LITERAL_void:
-          case LITERAL__declspec:
-          case LITERAL___declspec:
-          case LITERAL_const:
-          case LITERAL___const:
-          case LITERAL_volatile:
-          case LITERAL___volatile__:
-          case SCOPE: {
-            new_type_id();
-            break;
-          }
-          case LPAREN: {
-            match(LPAREN);
-            type_id();
-            match(RPAREN);
-            break;
-          }
-          default: {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-      }
-      {
-        switch (LA(1)) {
-          case LPAREN: {
-            new_initializer();
-            break;
-          }
-          case LESSTHAN:
-          case GREATERTHAN:
-          case SEMICOLON:
-          case RCURLY:
-          case ASSIGNEQUAL:
-          case COLON:
-          case RPAREN:
-          case COMMA:
-          case RSQUARE:
-          case STAR:
-          case AMPERSAND:
-          case ELLIPSIS:
-          case TIMESEQUAL:
-          case DIVIDEEQUAL:
-          case MINUSEQUAL:
-          case PLUSEQUAL:
-          case MODEQUAL:
-          case SHIFTLEFTEQUAL:
-          case SHIFTRIGHTEQUAL:
-          case BITWISEANDEQUAL:
-          case BITWISEXOREQUAL:
-          case BITWISEOREQUAL:
-          case QUESTIONMARK:
-          case OR:
-          case AND:
-          case BITWISEOR:
-          case BITWISEXOR:
-          case NOTEQUAL:
-          case EQUAL:
-          case LESSTHANOREQUALTO:
-          case GREATERTHANOREQUALTO:
-          case SHIFTLEFT:
-          case SHIFTRIGHT:
-          case PLUS:
-          case MINUS:
-          case DIVIDE:
-          case MOD:
-          case DOTMBR:
-          case POINTERTOMBR: {
-            break;
-          }
-          default: {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::delete_expression() {
-  try {  // for error handling
-    match(LITERAL_delete);
-    {
-      switch (LA(1)) {
-        case LSQUARE: {
-          match(LSQUARE);
-          match(RSQUARE);
-          break;
-        }
-        case ID:
-        case StringLiteral:
-        case LPAREN:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case OCTALINT:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case PLUS:
-        case MINUS:
-        case PLUSPLUS:
-        case MINUSMINUS:
-        case LITERAL_sizeof:
-        case LITERAL___alignof__:
-        case SCOPE:
-        case LITERAL_dynamic_cast:
-        case LITERAL_static_cast:
-        case LITERAL_reinterpret_cast:
-        case LITERAL_const_cast:
-        case LITERAL_typeid:
-        case DECIMALINT:
-        case HEXADECIMALINT:
-        case CharLiteral:
-        case WCharLiteral:
-        case WStringLiteral:
-        case FLOATONE:
-        case FLOATTWO:
-        case NOT:
-        case LITERAL_new:
-        case LITERAL_delete: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    cast_expression();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::primary_expression() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case ID:
-      case OPERATOR:
-      case TILDE:
-      case SCOPE: {
-        id_expression();
-        break;
-      }
-      case StringLiteral:
-      case LITERAL_true:
-      case LITERAL_false:
-      case OCTALINT:
-      case DECIMALINT:
-      case HEXADECIMALINT:
-      case CharLiteral:
-      case WCharLiteral:
-      case WStringLiteral:
-      case FLOATONE:
-      case FLOATTWO: {
-        constant();
-        break;
-      }
-      case LITERAL_this: {
-        match(LITERAL_this);
-        break;
-      }
-      case LPAREN: {
-        match(LPAREN);
-        expression();
-        match(RPAREN);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_141);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::id_expression() {
-#line 2105 "CPP_parser.g"
-  char* s;
-#line 12353 "CPPParser.cpp"
-
-  try {  // for error handling
-    s = scope_override();
-    {
-      switch (LA(1)) {
-        case ID: {
-          match(ID);
-          break;
-        }
-        case OPERATOR: {
-          match(OPERATOR);
-          optor();
-          break;
-        }
-        case TILDE: {
-          match(TILDE);
-          {
-            switch (LA(1)) {
-              case STAR: {
-                match(STAR);
-                break;
-              }
-              case ID: {
-                break;
-              }
-              default: {
-                throw ANTLR_USE_NAMESPACE(antlr)
-                    NoViableAltException(LT(1), getFilename());
-              }
-            }
-          }
-          match(ID);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_141);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::constant() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case OCTALINT: {
-        match(OCTALINT);
-        break;
-      }
-      case DECIMALINT: {
-        match(DECIMALINT);
-        break;
-      }
-      case HEXADECIMALINT: {
-        match(HEXADECIMALINT);
-        break;
-      }
-      case CharLiteral: {
-        match(CharLiteral);
-        break;
-      }
-      case WCharLiteral: {
-        match(WCharLiteral);
-        break;
-      }
-      case StringLiteral:
-      case WStringLiteral: {
-        {  // ( ... )+
-          int _cnt551 = 0;
-          for (;;) {
-            switch (LA(1)) {
-              case StringLiteral: {
-                match(StringLiteral);
-                break;
-              }
-              case WStringLiteral: {
-                match(WStringLiteral);
-                break;
-              }
-              default: {
-                if (_cnt551 >= 1) {
-                  goto _loop551;
-                } else {
-                  throw ANTLR_USE_NAMESPACE(antlr)
-                      NoViableAltException(LT(1), getFilename());
-                }
-              }
-            }
-            _cnt551++;
-          }
-        _loop551:;
-        }  // ( ... )+
-        break;
-      }
-      case FLOATONE: {
-        match(FLOATONE);
-        break;
-      }
-      case FLOATTWO: {
-        match(FLOATTWO);
-        break;
-      }
-      case LITERAL_true: {
-        match(LITERAL_true);
-        break;
-      }
-      case LITERAL_false: {
-        match(LITERAL_false);
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_141);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::new_type_id() {
-  try {  // for error handling
-    declaration_specifiers();
-    {
-      if ((_tokenSet_142.member(LA(1))) && (_tokenSet_143.member(LA(2)))) {
-        new_declarator();
-      } else if ((_tokenSet_144.member(LA(1))) &&
-                 (_tokenSet_57.member(LA(2)))) {
-      } else {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_144);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::new_initializer() {
-  try {  // for error handling
-    match(LPAREN);
-    {
-      switch (LA(1)) {
-        case ID:
-        case StringLiteral:
-        case LPAREN:
-        case LITERAL_typename:
-        case LITERAL_char:
-        case LITERAL_wchar_t:
-        case LITERAL_bool:
-        case LITERAL_short:
-        case LITERAL_int:
-        case 50:
-        case 51:
-        case 52:
-        case 53:
-        case 54:
-        case 55:
-        case 56:
-        case 57:
-        case 58:
-        case 59:
-        case 60:
-        case 61:
-        case 62:
-        case 63:
-        case 64:
-        case 65:
-        case 66:
-        case 67:
-        case LITERAL_long:
-        case LITERAL_signed:
-        case LITERAL_unsigned:
-        case LITERAL_float:
-        case LITERAL_double:
-        case LITERAL_void:
-        case LITERAL__declspec:
-        case LITERAL___declspec:
-        case OPERATOR:
-        case LITERAL_this:
-        case LITERAL_true:
-        case LITERAL_false:
-        case OCTALINT:
-        case TILDE:
-        case STAR:
-        case AMPERSAND:
-        case PLUS:
-        case MINUS:
-        case PLUSPLUS:
-        case MINUSMINUS:
-        case LITERAL_sizeof:
-        case LITERAL___alignof__:
-        case SCOPE:
-        case LITERAL_dynamic_cast:
-        case LITERAL_static_cast:
-        case LITERAL_reinterpret_cast:
-        case LITERAL_const_cast:
-        case LITERAL_typeid:
-        case DECIMALINT:
-        case HEXADECIMALINT:
-        case CharLiteral:
-        case WCharLiteral:
-        case WStringLiteral:
-        case FLOATONE:
-        case FLOATTWO:
-        case NOT:
-        case LITERAL_new:
-        case LITERAL_delete: {
-          expression_list();
-          break;
-        }
-        case RPAREN: {
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-    match(RPAREN);
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_129);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::new_declarator() {
-  try {  // for error handling
-    switch (LA(1)) {
-      case ID:
-      case LITERAL__stdcall:
-      case LITERAL___stdcall:
-      case STAR:
-      case AMPERSAND:
-      case SCOPE:
-      case LITERAL__cdecl:
-      case LITERAL___cdecl:
-      case LITERAL__near:
-      case LITERAL___near:
-      case LITERAL__far:
-      case LITERAL___far:
-      case LITERAL___interrupt:
-      case LITERAL_pascal:
-      case LITERAL__pascal:
-      case LITERAL___pascal: {
-        ptr_operator();
-        {
-          if ((_tokenSet_142.member(LA(1))) && (_tokenSet_143.member(LA(2)))) {
-            new_declarator();
-          } else if ((_tokenSet_144.member(LA(1))) &&
-                     (_tokenSet_57.member(LA(2)))) {
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-        break;
-      }
-      case LSQUARE: {
-        direct_new_declarator();
-        break;
-      }
-      default: {
-        throw ANTLR_USE_NAMESPACE(antlr)
-            NoViableAltException(LT(1), getFilename());
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_144);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::direct_new_declarator() {
-  try {  // for error handling
-    {    // ( ... )+
-      int _cnt570 = 0;
-      for (;;) {
-        if ((LA(1) == LSQUARE)) {
-          match(LSQUARE);
-          expression();
-          match(RSQUARE);
-        } else {
-          if (_cnt570 >= 1) {
-            goto _loop570;
-          } else {
-            throw ANTLR_USE_NAMESPACE(antlr)
-                NoViableAltException(LT(1), getFilename());
-          }
-        }
-
-        _cnt570++;
-      }
-    _loop570:;
-    }  // ( ... )+
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_144);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::ptr_to_member() {
-#line 2211 "CPP_parser.g"
-  char* s;
-#line 12715 "CPPParser.cpp"
-
-  try {  // for error handling
-    s = scope_override();
-    match(STAR);
-    if (inputState->guessing == 0) {
-#line 2214 "CPP_parser.g"
-      is_pointer = true;
-#line 12723 "CPPParser.cpp"
-    }
-    cv_qualifier_seq();
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_24);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::optor_simple_tokclass() {
-  try {  // for error handling
-    {
-      switch (LA(1)) {
-        case PLUS: {
-          match(PLUS);
-          break;
-        }
-        case MINUS: {
-          match(MINUS);
-          break;
-        }
-        case STAR: {
-          match(STAR);
-          break;
-        }
-        case DIVIDE: {
-          match(DIVIDE);
-          break;
-        }
-        case MOD: {
-          match(MOD);
-          break;
-        }
-        case BITWISEXOR: {
-          match(BITWISEXOR);
-          break;
-        }
-        case AMPERSAND: {
-          match(AMPERSAND);
-          break;
-        }
-        case BITWISEOR: {
-          match(BITWISEOR);
-          break;
-        }
-        case TILDE: {
-          match(TILDE);
-          break;
-        }
-        case NOT: {
-          match(NOT);
-          break;
-        }
-        case SHIFTLEFT: {
-          match(SHIFTLEFT);
-          break;
-        }
-        case SHIFTRIGHT: {
-          match(SHIFTRIGHT);
-          break;
-        }
-        case ASSIGNEQUAL: {
-          match(ASSIGNEQUAL);
-          break;
-        }
-        case TIMESEQUAL: {
-          match(TIMESEQUAL);
-          break;
-        }
-        case DIVIDEEQUAL: {
-          match(DIVIDEEQUAL);
-          break;
-        }
-        case MODEQUAL: {
-          match(MODEQUAL);
-          break;
-        }
-        case PLUSEQUAL: {
-          match(PLUSEQUAL);
-          break;
-        }
-        case MINUSEQUAL: {
-          match(MINUSEQUAL);
-          break;
-        }
-        case SHIFTLEFTEQUAL: {
-          match(SHIFTLEFTEQUAL);
-          break;
-        }
-        case SHIFTRIGHTEQUAL: {
-          match(SHIFTRIGHTEQUAL);
-          break;
-        }
-        case BITWISEANDEQUAL: {
-          match(BITWISEANDEQUAL);
-          break;
-        }
-        case BITWISEXOREQUAL: {
-          match(BITWISEXOREQUAL);
-          break;
-        }
-        case BITWISEOREQUAL: {
-          match(BITWISEOREQUAL);
-          break;
-        }
-        case EQUAL: {
-          match(EQUAL);
-          break;
-        }
-        case NOTEQUAL: {
-          match(NOTEQUAL);
-          break;
-        }
-        case LESSTHAN: {
-          match(LESSTHAN);
-          break;
-        }
-        case GREATERTHAN: {
-          match(GREATERTHAN);
-          break;
-        }
-        case LESSTHANOREQUALTO: {
-          match(LESSTHANOREQUALTO);
-          break;
-        }
-        case GREATERTHANOREQUALTO: {
-          match(GREATERTHANOREQUALTO);
-          break;
-        }
-        case OR: {
-          match(OR);
-          break;
-        }
-        case AND: {
-          match(AND);
-          break;
-        }
-        case PLUSPLUS: {
-          match(PLUSPLUS);
-          break;
-        }
-        case MINUSMINUS: {
-          match(MINUSMINUS);
-          break;
-        }
-        case COMMA: {
-          match(COMMA);
-          break;
-        }
-        case POINTERTO: {
-          match(POINTERTO);
-          break;
-        }
-        case POINTERTOMBR: {
-          match(POINTERTOMBR);
-          break;
-        }
-        default: {
-          throw ANTLR_USE_NAMESPACE(antlr)
-              NoViableAltException(LT(1), getFilename());
-        }
-      }
-    }
-  } catch (ANTLR_USE_NAMESPACE(antlr) RecognitionException& ex) {
-    if (inputState->guessing == 0) {
-      reportError(ex);
-      recover(ex, _tokenSet_64);
-    } else {
-      throw;
-    }
-  }
-}
-
-void CPPParser::initializeASTFactory(ANTLR_USE_NAMESPACE(antlr) ASTFactory&) {}
-const char* CPPParser::tokenNames[] = {"<0>",
-                                       "EOF",
-                                       "<2>",
-                                       "NULL_TREE_LOOKAHEAD",
-                                       "\"template\"",
-                                       "LESSTHAN",
-                                       "GREATERTHAN",
-                                       "\"typedef\"",
-                                       "SEMICOLON",
-                                       "\"enum\"",
-                                       "ID",
-                                       "LCURLY",
-                                       "\"inline\"",
-                                       "\"friend\"",
-                                       "\"namespace\"",
-                                       "\"antlrTrace_on\"",
-                                       "\"antlrTrace_off\"",
-                                       "RCURLY",
-                                       "ASSIGNEQUAL",
-                                       "COLON",
-                                       "\"extern\"",
-                                       "StringLiteral",
-                                       "\"struct\"",
-                                       "\"union\"",
-                                       "\"class\"",
-                                       "\"_stdcall\"",
-                                       "\"__stdcall\"",
-                                       "\"GFEXCLUDE\"",
-                                       "\"GFINCLUDE\"",
-                                       "\"GFID\"",
-                                       "\"GFUNREAD\"",
-                                       "\"GFARRAYSIZE\"",
-                                       "LPAREN",
-                                       "RPAREN",
-                                       "\"GFARRAYSIZES\"",
-                                       "\"GFARRAYELEMSIZE\"",
-                                       "\"auto\"",
-                                       "\"register\"",
-                                       "\"static\"",
-                                       "\"mutable\"",
-                                       "\"_inline\"",
-                                       "\"__inline\"",
-                                       "\"virtual\"",
-                                       "\"explicit\"",
-                                       "\"typename\"",
-                                       "\"char\"",
-                                       "\"wchar_t\"",
-                                       "\"bool\"",
-                                       "\"short\"",
-                                       "\"int\"",
-                                       "\"_int8\"",
-                                       "\"__int8\"",
-                                       "\"int8_t\"",
-                                       "\"_int16\"",
-                                       "\"__int16\"",
-                                       "\"int16_t\"",
-                                       "\"_int32\"",
-                                       "\"__int32\"",
-                                       "\"int32_t\"",
-                                       "\"_int64\"",
-                                       "\"__int64\"",
-                                       "\"int64_t\"",
-                                       "\"uint8_t\"",
-                                       "\"uint16_t\"",
-                                       "\"uint32_t\"",
-                                       "\"uint64_t\"",
-                                       "\"_w64\"",
-                                       "\"__w64\"",
-                                       "\"long\"",
-                                       "\"signed\"",
-                                       "\"unsigned\"",
-                                       "\"float\"",
-                                       "\"double\"",
-                                       "\"void\"",
-                                       "\"_declspec\"",
-                                       "\"__declspec\"",
-                                       "\"const\"",
-                                       "\"__const\"",
-                                       "\"volatile\"",
-                                       "\"__volatile__\"",
-                                       "\"GFIGNORE\"",
-                                       "COMMA",
-                                       "\"public\"",
-                                       "\"protected\"",
-                                       "\"private\"",
-                                       "\"operator\"",
-                                       "\"this\"",
-                                       "\"true\"",
-                                       "\"false\"",
-                                       "OCTALINT",
-                                       "LSQUARE",
-                                       "RSQUARE",
-                                       "TILDE",
-                                       "STAR",
-                                       "AMPERSAND",
-                                       "ELLIPSIS",
-                                       "\"throw\"",
-                                       "\"using\"",
-                                       "\"case\"",
-                                       "\"default\"",
-                                       "\"if\"",
-                                       "\"else\"",
-                                       "\"switch\"",
-                                       "\"while\"",
-                                       "\"do\"",
-                                       "\"for\"",
-                                       "\"goto\"",
-                                       "\"continue\"",
-                                       "\"break\"",
-                                       "\"return\"",
-                                       "\"try\"",
-                                       "\"catch\"",
-                                       "\"asm\"",
-                                       "\"_asm\"",
-                                       "\"__asm\"",
-                                       "\"__asm__\"",
-                                       "TIMESEQUAL",
-                                       "DIVIDEEQUAL",
-                                       "MINUSEQUAL",
-                                       "PLUSEQUAL",
-                                       "MODEQUAL",
-                                       "SHIFTLEFTEQUAL",
-                                       "SHIFTRIGHTEQUAL",
-                                       "BITWISEANDEQUAL",
-                                       "BITWISEXOREQUAL",
-                                       "BITWISEOREQUAL",
-                                       "QUESTIONMARK",
-                                       "OR",
-                                       "AND",
-                                       "BITWISEOR",
-                                       "BITWISEXOR",
-                                       "NOTEQUAL",
-                                       "EQUAL",
-                                       "LESSTHANOREQUALTO",
-                                       "GREATERTHANOREQUALTO",
-                                       "SHIFTLEFT",
-                                       "SHIFTRIGHT",
-                                       "PLUS",
-                                       "MINUS",
-                                       "DIVIDE",
-                                       "MOD",
-                                       "DOTMBR",
-                                       "POINTERTOMBR",
-                                       "PLUSPLUS",
-                                       "MINUSMINUS",
-                                       "\"sizeof\"",
-                                       "\"__alignof__\"",
-                                       "SCOPE",
-                                       "DOT",
-                                       "POINTERTO",
-                                       "\"dynamic_cast\"",
-                                       "\"static_cast\"",
-                                       "\"reinterpret_cast\"",
-                                       "\"const_cast\"",
-                                       "\"typeid\"",
-                                       "DECIMALINT",
-                                       "HEXADECIMALINT",
-                                       "CharLiteral",
-                                       "WCharLiteral",
-                                       "WStringLiteral",
-                                       "FLOATONE",
-                                       "FLOATTWO",
-                                       "NOT",
-                                       "\"new\"",
-                                       "\"_cdecl\"",
-                                       "\"__cdecl\"",
-                                       "\"_near\"",
-                                       "\"__near\"",
-                                       "\"_far\"",
-                                       "\"__far\"",
-                                       "\"__interrupt\"",
-                                       "\"pascal\"",
-                                       "\"_pascal\"",
-                                       "\"__pascal\"",
-                                       "\"delete\"",
-                                       "Whitespace",
-                                       "Comment",
-                                       "CPPComment",
-                                       "a preprocessor directive",
-                                       "LineDirective",
-                                       "Space",
-                                       "Pragma",
-                                       "Error",
-                                       "EndOfLine",
-                                       "Escape",
-                                       "Digit",
-                                       "Decimal",
-                                       "LongSuffix",
-                                       "UnsignedSuffix",
-                                       "FloatSuffix",
-                                       "Exponent",
-                                       "Vocabulary",
-                                       "Number",
-                                       0};
-
-const unsigned long CPPParser::_tokenSet_0_data_[] = {
-    4291950480UL, 4294967293UL, 1910571007UL, 2UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// "template" "typedef" SEMICOLON "enum" ID "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" "extern" "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" TILDE STAR AMPERSAND
-// "using" SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_0(
-    _tokenSet_0_data_, 12);
-const unsigned long CPPParser::_tokenSet_1_data_[] = {2UL, 0UL, 0UL, 0UL,
-                                                      0UL, 0UL, 0UL, 0UL};
-// EOF
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_1(
-    _tokenSet_1_data_, 8);
-const unsigned long CPPParser::_tokenSet_2_data_[] = {
-    4291835520UL, 4294967292UL, 65535UL, 2UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "using" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_2(
-    _tokenSet_2_data_, 12);
-const unsigned long CPPParser::_tokenSet_3_data_[] = {
-    4293949344UL, 4294967293UL, 1910571007UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN "typedef" SEMICOLON "enum" ID "inline" "friend" "namespace"
-// "extern" StringLiteral "struct" "union" "class" "_stdcall" "__stdcall"
-// "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE" "auto" "register" "static" "mutable" "_inline" "__inline"
-// "virtual" "explicit" "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "const" "__const" "volatile" "__volatile__"
-// "operator" "this" "true" "false" TILDE STAR AMPERSAND SCOPE "_cdecl"
-// "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal"
-// "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_3(
-    _tokenSet_3_data_, 12);
-const unsigned long CPPParser::_tokenSet_4_data_[] = {4096UL, 3840UL, 0UL, 0UL,
-                                                      0UL,    0UL,    0UL, 0UL};
-// "inline" "_inline" "__inline" "virtual" "explicit"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_4(
-    _tokenSet_4_data_, 8);
-const unsigned long CPPParser::_tokenSet_5_data_[] = {
-    3072UL, 0UL, 31457280UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID LCURLY "operator" "this" "true" "false" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_5(
-    _tokenSet_5_data_, 12);
-const unsigned long CPPParser::_tokenSet_6_data_[] = {
-    5136UL, 1792UL, 268435456UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,    0UL,         0UL, 0UL,      0UL};
-// "template" ID "inline" "_inline" "__inline" "virtual" TILDE SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_6(
-    _tokenSet_6_data_, 12);
-const unsigned long CPPParser::_tokenSet_7_data_[] = {
-    5152UL, 1792UL, 268435456UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,    0UL,         0UL, 0UL,      0UL};
-// LESSTHAN ID "inline" "_inline" "__inline" "virtual" TILDE SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_7(
-    _tokenSet_7_data_, 12);
-const unsigned long CPPParser::_tokenSet_8_data_[] = {
-    5120UL, 2816UL, 0UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID "inline" "_inline" "__inline" "explicit" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_8(
-    _tokenSet_8_data_, 12);
-const unsigned long CPPParser::_tokenSet_9_data_[] = {
-    5152UL, 2817UL, 0UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// LESSTHAN ID "inline" LPAREN "_inline" "__inline" "explicit" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_9(
-    _tokenSet_9_data_, 12);
-const unsigned long CPPParser::_tokenSet_10_data_[] = {
-    5120UL, 0UL, 2097152UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID "inline" "operator" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_10(
-    _tokenSet_10_data_, 12);
-const unsigned long CPPParser::_tokenSet_11_data_[] = {
-    4291835552UL, 4294967292UL, 2162687UL, 0UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,       0UL, 0UL,      0UL};
-// LESSTHAN "typedef" "enum" ID "inline" "friend" "extern" "struct" "union"
-// "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE" "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" "operator" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_11(
-    _tokenSet_11_data_, 12);
-const unsigned long CPPParser::_tokenSet_12_data_[] = {
-    4291835520UL, 4294967292UL, 65535UL, 0UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_12(
-    _tokenSet_12_data_, 12);
-const unsigned long CPPParser::_tokenSet_13_data_[] = {
-    4291835552UL, 4294967293UL, 1642135551UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN "typedef" "enum" ID "inline" "friend" "extern" "struct" "union"
-// "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register"
-// "static" "mutable" "_inline" "__inline" "virtual" "explicit" "typename"
-// "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16"
-// "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "operator" "this" "true"
-// "false" STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_13(
-    _tokenSet_13_data_, 12);
-const unsigned long CPPParser::_tokenSet_14_data_[] = {
-    4291835520UL, 4294967293UL, 1642135551UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" STAR AMPERSAND SCOPE
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_14(
-    _tokenSet_14_data_, 12);
-const unsigned long CPPParser::_tokenSet_15_data_[] = {
-    4292097760UL, 4294967293UL, 1977810943UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,          0UL,          0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN "typedef" "enum" ID "inline" "friend" ASSIGNEQUAL
-// "extern" "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE"
-// "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" COMMA "operator"
-// "this" "true" "false" LSQUARE TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL
-// EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS
-// MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT
-// "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt"
-// "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_15(
-    _tokenSet_15_data_, 12);
-const unsigned long CPPParser::_tokenSet_16_data_[] = {
-    29372416UL, 3840UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// "inline" "friend" "struct" "union" "class" "_inline" "__inline" "virtual"
-// "explicit"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_16(
-    _tokenSet_16_data_, 8);
-const unsigned long CPPParser::_tokenSet_17_data_[] = {
-    29367296UL, 3840UL, 31525888UL, 0UL, 524288UL, 0UL,
-    0UL,        0UL,    0UL,        0UL, 0UL,      0UL};
-// ID LCURLY "inline" "struct" "union" "class" "_inline" "__inline" "virtual"
-// "explicit" "_declspec" "__declspec" "GFIGNORE" "operator" "this" "true"
-// "false" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_17(
-    _tokenSet_17_data_, 12);
-const unsigned long CPPParser::_tokenSet_18_data_[] = {
-    4291835808UL, 4294967293UL, 1910571007UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN "typedef" SEMICOLON "enum" ID "inline" "friend" "extern" "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "operator" "this" "true"
-// "false" TILDE STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_18(
-    _tokenSet_18_data_, 12);
-const unsigned long CPPParser::_tokenSet_19_data_[] = {
-    4292081554UL, 4294967293UL, 1910571007UL, 2UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// EOF "template" "typedef" SEMICOLON "enum" ID "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" RCURLY "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" TILDE STAR AMPERSAND
-// "using" SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_19(
-    _tokenSet_19_data_, 12);
-const unsigned long CPPParser::_tokenSet_20_data_[] = {
-    4291934096UL, 4294967293UL, 1912406015UL, 2UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// "template" "typedef" SEMICOLON "enum" ID "inline" "friend" "antlrTrace_on"
-// "antlrTrace_off" "extern" "struct" "union" "class" "_stdcall" "__stdcall"
-// "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE" "auto" "register" "static" "mutable" "_inline" "__inline"
-// "virtual" "explicit" "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "const" "__const" "volatile" "__volatile__"
-// "public" "protected" "private" "operator" "this" "true" "false" TILDE
-// STAR AMPERSAND "using" SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_20(
-    _tokenSet_20_data_, 12);
-const unsigned long CPPParser::_tokenSet_21_data_[] = {
-    100664576UL, 1UL, 1910505472UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// SEMICOLON ID "_stdcall" "__stdcall" LPAREN "operator" "this" "true"
-// "false" TILDE STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_21(
-    _tokenSet_21_data_, 12);
-const unsigned long CPPParser::_tokenSet_22_data_[] = {256UL, 0UL, 0UL, 0UL,
-                                                       0UL,   0UL, 0UL, 0UL};
-// SEMICOLON
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_22(
-    _tokenSet_22_data_, 8);
-const unsigned long CPPParser::_tokenSet_23_data_[] = {
-    101188864UL, 1UL, 1910505472UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// SEMICOLON ID COLON "_stdcall" "__stdcall" LPAREN "operator" "this" "true"
-// "false" TILDE STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_23(
-    _tokenSet_23_data_, 12);
-const unsigned long CPPParser::_tokenSet_24_data_[] = {
-    101582176UL, 3UL, 4259446784UL, 4293918720UL, 557055UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,      0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID RCURLY ASSIGNEQUAL COLON "_stdcall"
-// "__stdcall" LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_24(
-    _tokenSet_24_data_, 12);
-const unsigned long CPPParser::_tokenSet_25_data_[] = {
-    100664320UL, 0UL, 1610612736UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// ID "_stdcall" "__stdcall" STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near"
-// "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_25(
-    _tokenSet_25_data_, 12);
-const unsigned long CPPParser::_tokenSet_26_data_[] = {
-    100664352UL, 1UL, 1642131456UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// LESSTHAN ID "_stdcall" "__stdcall" LPAREN "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" STAR AMPERSAND SCOPE
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_26(
-    _tokenSet_26_data_, 12);
-const unsigned long CPPParser::_tokenSet_27_data_[] = {
-    1024UL, 1UL, 31457280UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID LPAREN "operator" "this" "true" "false" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_27(
-    _tokenSet_27_data_, 12);
-const unsigned long CPPParser::_tokenSet_28_data_[] = {
-    263264UL, 1UL, 1977745408UL, 3220176896UL, 2744319UL, 16396UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN ID ASSIGNEQUAL LPAREN COMMA "operator" "this" "true"
-// "false" LSQUARE TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD POINTERTOMBR
-// PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_28(
-    _tokenSet_28_data_, 12);
-const unsigned long CPPParser::_tokenSet_29_data_[] = {
-    4291837824UL, 4294967292UL, 65535UL, 2UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" "extern" "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register"
-// "static" "mutable" "_inline" "__inline" "virtual" "explicit" "typename"
-// "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16"
-// "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "using" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_29(
-    _tokenSet_29_data_, 12);
-const unsigned long CPPParser::_tokenSet_30_data_[] = {
-    4294180754UL, 4294967293UL, 1945960447UL, 1015807UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// EOF "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend"
-// "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral
-// "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE"
-// "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" "public" "protected"
-// "private" "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND
-// "throw" "using" "case" "default" "if" "else" "switch" "while" "do" "for"
-// "goto" "continue" "break" "return" "try" "asm" "_asm" "__asm" "__asm__"
-// PLUS MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_30(
-    _tokenSet_30_data_, 12);
-const unsigned long CPPParser::_tokenSet_31_data_[] = {
-    4291835520UL, 4294967293UL, 1910571007UL, 2UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" TILDE STAR AMPERSAND
-// "using" SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_31(
-    _tokenSet_31_data_, 12);
-const unsigned long CPPParser::_tokenSet_32_data_[] = {2304UL, 0UL, 0UL, 0UL,
-                                                       0UL,    0UL, 0UL, 0UL};
-// SEMICOLON LCURLY
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_32(
-    _tokenSet_32_data_, 8);
-const unsigned long CPPParser::_tokenSet_33_data_[] = {
-    1024UL, 0UL, 0UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_33(
-    _tokenSet_33_data_, 12);
-const unsigned long CPPParser::_tokenSet_34_data_[] = {
-    1024UL, 0UL, 836763648UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID "operator" "this" "true" "false" TILDE STAR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_34(
-    _tokenSet_34_data_, 8);
-const unsigned long CPPParser::_tokenSet_35_data_[] = {
-    4291837568UL, 4294967292UL, 65535UL, 2UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" "enum" ID LCURLY "inline" "friend" "extern" "struct" "union"
-// "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE" "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" "using" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_35(
-    _tokenSet_35_data_, 12);
-const unsigned long CPPParser::_tokenSet_36_data_[] = {
-    4294180784UL, 4294967293UL, 1945960447UL, 1015775UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// "template" LESSTHAN "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend"
-// "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral
-// "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE"
-// "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" "public" "protected"
-// "private" "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND
-// "throw" "using" "case" "default" "if" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "asm" "_asm" "__asm" "__asm__" PLUS
-// MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_36(
-    _tokenSet_36_data_, 12);
-const unsigned long CPPParser::_tokenSet_37_data_[] = {
-    4294180752UL, 4294967293UL, 1945960447UL, 1015775UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "public" "protected" "private"
-// "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "switch" "while" "do" "for" "goto" "continue"
-// "break" "return" "try" "asm" "_asm" "__asm" "__asm__" PLUS MINUS PLUSPLUS
-// MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast" "static_cast"
-// "reinterpret_cast" "const_cast" "typeid" DECIMALINT HEXADECIMALINT
-// CharLiteral
-// WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new" "_cdecl" "__cdecl"
-// "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-// "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_37(
-    _tokenSet_37_data_, 12);
-const unsigned long CPPParser::_tokenSet_38_data_[] = {
-    100664320UL, 1UL, 1642070016UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// ID "_stdcall" "__stdcall" LPAREN "operator" "this" "true" "false" STAR
-// AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_38(
-    _tokenSet_38_data_, 12);
-const unsigned long CPPParser::_tokenSet_39_data_[] = {
-    100926560UL, 1UL, 1977806848UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN ID ASSIGNEQUAL "_stdcall" "__stdcall" LPAREN "const"
-// "__const" "volatile" "__volatile__" COMMA "operator" "this" "true" "false"
-// LSQUARE TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD POINTERTOMBR
-// PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT "new" "_cdecl" "__cdecl" "_near"
-// "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-// "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_39(
-    _tokenSet_39_data_, 12);
-const unsigned long CPPParser::_tokenSet_40_data_[] = {
-    4294180752UL, 4294967293UL, 1945960447UL, 1015807UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "public" "protected" "private"
-// "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "else" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "asm" "_asm" "__asm" "__asm__" PLUS
-// MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_40(
-    _tokenSet_40_data_, 12);
-const unsigned long CPPParser::_tokenSet_41_data_[] = {
-    101453120UL, 3UL, 4125229056UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// GREATERTHAN SEMICOLON ID LCURLY ASSIGNEQUAL COLON "_stdcall" "__stdcall"
-// LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE TILDE STAR
-// AMPERSAND ELLIPSIS SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_41(
-    _tokenSet_41_data_, 12);
-const unsigned long CPPParser::_tokenSet_42_data_[] = {
-    5120UL, 1792UL, 268435456UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,    0UL,         0UL, 0UL,      0UL};
-// ID "inline" "_inline" "__inline" "virtual" TILDE SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_42(
-    _tokenSet_42_data_, 12);
-const unsigned long CPPParser::_tokenSet_43_data_[] = {
-    4291835520UL, 4294967292UL, 2162687UL, 0UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,       0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_43(
-    _tokenSet_43_data_, 12);
-const unsigned long CPPParser::_tokenSet_44_data_[] = {
-    1024UL, 0UL, 31457280UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID "operator" "this" "true" "false" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_44(
-    _tokenSet_44_data_, 12);
-const unsigned long CPPParser::_tokenSet_45_data_[] = {
-    263520UL, 1UL, 1977745408UL, 3220176896UL, 2744319UL, 16396UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID ASSIGNEQUAL LPAREN COMMA "operator"
-// "this" "true" "false" LSQUARE TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL
-// EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS
-// MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT
-// "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_45(
-    _tokenSet_45_data_, 12);
-const unsigned long CPPParser::_tokenSet_46_data_[] = {
-    100668416UL, 3841UL, 1642070016UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL,    0UL,          0UL, 0UL,      0UL};
-// ID "inline" "_stdcall" "__stdcall" LPAREN "_inline" "__inline" "virtual"
-// "explicit" "operator" "this" "true" "false" STAR AMPERSAND SCOPE "_cdecl"
-// "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal"
-// "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_46(
-    _tokenSet_46_data_, 12);
-const unsigned long CPPParser::_tokenSet_47_data_[] = {
-    100930656UL, 3841UL, 1977806848UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,         0UL,    0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN ID "inline" ASSIGNEQUAL "_stdcall" "__stdcall"
-// LPAREN "_inline" "__inline" "virtual" "explicit" "const" "__const" "volatile"
-// "__volatile__" COMMA "operator" "this" "true" "false" LSQUARE TILDE
-// STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO
-// SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS
-// SCOPE POINTERTO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_47(
-    _tokenSet_47_data_, 12);
-const unsigned long CPPParser::_tokenSet_48_data_[] = {526592UL, 0UL, 0UL, 0UL,
-                                                       0UL,      0UL, 0UL, 0UL};
-// SEMICOLON LCURLY COLON
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_48(
-    _tokenSet_48_data_, 8);
-const unsigned long CPPParser::_tokenSet_49_data_[] = {
-    4294049680UL, 4294967293UL, 1945960447UL, 1015775UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" "extern" StringLiteral "struct" "union"
-// "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register"
-// "static" "mutable" "_inline" "__inline" "virtual" "explicit" "typename"
-// "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16"
-// "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "public" "protected" "private"
-// "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "switch" "while" "do" "for" "goto" "continue"
-// "break" "return" "try" "asm" "_asm" "__asm" "__asm__" PLUS MINUS PLUSPLUS
-// MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast" "static_cast"
-// "reinterpret_cast" "const_cast" "typeid" DECIMALINT HEXADECIMALINT
-// CharLiteral
-// WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new" "_cdecl" "__cdecl"
-// "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-// "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_49(
-    _tokenSet_49_data_, 12);
-const unsigned long CPPParser::_tokenSet_50_data_[] = {
-    4294180754UL, 4294967293UL, 1945960447UL, 1048575UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// EOF "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend"
-// "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral
-// "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE"
-// "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" "public" "protected"
-// "private" "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND
-// "throw" "using" "case" "default" "if" "else" "switch" "while" "do" "for"
-// "goto" "continue" "break" "return" "try" "catch" "asm" "_asm" "__asm"
-// "__asm__" PLUS MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE
-// "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_50(
-    _tokenSet_50_data_, 12);
-const unsigned long CPPParser::_tokenSet_51_data_[] = {
-    525312UL, 1024UL, 0UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID COLON "virtual" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_51(
-    _tokenSet_51_data_, 12);
-const unsigned long CPPParser::_tokenSet_52_data_[] = {64UL, 0UL, 0UL, 0UL,
-                                                       0UL,  0UL, 0UL, 0UL};
-// GREATERTHAN
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_52(
-    _tokenSet_52_data_, 8);
-const unsigned long CPPParser::_tokenSet_53_data_[] = {2048UL, 0UL, 0UL, 0UL,
-                                                       0UL,    0UL, 0UL, 0UL};
-// LCURLY
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_53(
-    _tokenSet_53_data_, 8);
-const unsigned long CPPParser::_tokenSet_54_data_[] = {
-    4292755424UL, 4294967295UL, 4259512319UL, 4293918723UL, 557055UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL,          0UL,      0UL};
-// LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend"
-// RCURLY ASSIGNEQUAL COLON "extern" "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" COMMA "operator" "this" "true" "false"
-// LSQUARE RSQUARE TILDE STAR AMPERSAND ELLIPSIS "throw" "using" TIMESEQUAL
-// DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL
-// BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR
-// BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT
-// SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR SCOPE "_cdecl"
-// "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal"
-// "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_54(
-    _tokenSet_54_data_, 12);
-const unsigned long CPPParser::_tokenSet_55_data_[] = {
-    4293932672UL, 4294967293UL, 1944125439UL, 0UL, 4291790336UL, 16399UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,          0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "operator" "this" "true"
-// "false" OCTALINT TILDE STAR AMPERSAND PLUS MINUS PLUSPLUS MINUSMINUS
-// "sizeof" "__alignof__" SCOPE "dynamic_cast" "static_cast" "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_55(
-    _tokenSet_55_data_, 12);
-const unsigned long CPPParser::_tokenSet_56_data_[] = {
-    101584224UL, 3UL, 4259446784UL, 4293918720UL, 557055UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,      0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID LCURLY RCURLY ASSIGNEQUAL COLON "_stdcall"
-// "__stdcall" LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_56(
-    _tokenSet_56_data_, 12);
-const unsigned long CPPParser::_tokenSet_57_data_[] = {
-    4294967282UL, 4294967295UL, 4294967295UL, 4294934527UL,
-    4294967295UL, 32767UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// EOF "template" LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY
-// "inline" "friend" "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY
-// ASSIGNEQUAL COLON "extern" StringLiteral "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" "GFIGNORE" COMMA "public" "protected"
-// "private" "operator" "this" "true" "false" OCTALINT LSQUARE RSQUARE
-// TILDE STAR AMPERSAND ELLIPSIS "throw" "using" "case" "default" "if"
-// "else" "switch" "while" "do" "for" "goto" "continue" "break" "return"
-// "try" "asm" "_asm" "__asm" "__asm__" TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE DOT POINTERTO "dynamic_cast" "static_cast" "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near"
-// "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-// "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_57(
-    _tokenSet_57_data_, 12);
-const unsigned long CPPParser::_tokenSet_58_data_[] = {
-    3072UL, 0UL, 31522816UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID LCURLY "GFIGNORE" "operator" "this" "true" "false" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_58(
-    _tokenSet_58_data_, 12);
-const unsigned long CPPParser::_tokenSet_59_data_[] = {
-    524544UL, 2UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SEMICOLON COLON RPAREN RSQUARE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_59(
-    _tokenSet_59_data_, 8);
-const unsigned long CPPParser::_tokenSet_60_data_[] = {
-    2048UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// LCURLY COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_60(
-    _tokenSet_60_data_, 8);
-const unsigned long CPPParser::_tokenSet_61_data_[] = {131072UL, 0UL, 0UL, 0UL,
-                                                       0UL,      0UL, 0UL, 0UL};
-// RCURLY
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_61(
-    _tokenSet_61_data_, 8);
-const unsigned long CPPParser::_tokenSet_62_data_[] = {
-    131072UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// RCURLY COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_62(
-    _tokenSet_62_data_, 8);
-const unsigned long CPPParser::_tokenSet_63_data_[] = {
-    917760UL, 0UL, 134348800UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SEMICOLON RCURLY ASSIGNEQUAL COLON COMMA RSQUARE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_63(
-    _tokenSet_63_data_, 8);
-const unsigned long CPPParser::_tokenSet_64_data_[] = {
-    101584224UL, 3UL, 4259446784UL, 4293918720UL, 3801087UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID LCURLY RCURLY ASSIGNEQUAL COLON "_stdcall"
-// "__stdcall" LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE DOT POINTERTO
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_64(
-    _tokenSet_64_data_, 12);
-const unsigned long CPPParser::_tokenSet_65_data_[] = {
-    256UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SEMICOLON COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_65(
-    _tokenSet_65_data_, 8);
-const unsigned long CPPParser::_tokenSet_66_data_[] = {
-    100664352UL, 1UL, 1910566912UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// LESSTHAN ID "_stdcall" "__stdcall" LPAREN "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" TILDE STAR AMPERSAND
-// SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_66(
-    _tokenSet_66_data_, 12);
-const unsigned long CPPParser::_tokenSet_67_data_[] = {
-    1024UL, 1UL, 299892736UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID LPAREN "operator" "this" "true" "false" TILDE SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_67(
-    _tokenSet_67_data_, 12);
-const unsigned long CPPParser::_tokenSet_68_data_[] = {
-    100926816UL, 3UL, 4125229056UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID ASSIGNEQUAL "_stdcall" "__stdcall"
-// LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE TILDE STAR
-// AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO
-// SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS
-// SCOPE POINTERTO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_68(
-    _tokenSet_68_data_, 12);
-const unsigned long CPPParser::_tokenSet_69_data_[] = {
-    262464UL, 3UL, 2147614720UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN SEMICOLON ASSIGNEQUAL LPAREN RPAREN COMMA ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_69(
-    _tokenSet_69_data_, 8);
-const unsigned long CPPParser::_tokenSet_70_data_[] = {
-    131328UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SEMICOLON RCURLY COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_70(
-    _tokenSet_70_data_, 8);
-const unsigned long CPPParser::_tokenSet_71_data_[] = {0UL, 2UL, 0UL, 0UL,
-                                                       0UL, 0UL, 0UL, 0UL};
-// RPAREN
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_71(
-    _tokenSet_71_data_, 8);
-const unsigned long CPPParser::_tokenSet_72_data_[] = {
-    2098176UL, 4294963201UL, 1944063999UL, 0UL, 4291790336UL, 16399UL,
-    0UL,       0UL,          0UL,          0UL, 0UL,          0UL};
-// ID StringLiteral LPAREN "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "operator" "this" "true" "false" OCTALINT
-// TILDE STAR AMPERSAND PLUS MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_72(
-    _tokenSet_72_data_, 12);
-const unsigned long CPPParser::_tokenSet_73_data_[] = {
-    4294850528UL, 4294967295UL, 4293066751UL, 4293918720UL,
-    4294967295UL, 16399UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID "inline" "friend"
-// RCURLY ASSIGNEQUAL COLON "extern" StringLiteral "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" COMMA "operator" "this" "true" "false"
-// OCTALINT LSQUARE RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR
-// NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-// PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof"
-// "__alignof__" SCOPE DOT POINTERTO "dynamic_cast" "static_cast"
-// "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_73(
-    _tokenSet_73_data_, 12);
-const unsigned long CPPParser::_tokenSet_74_data_[] = {
-    655680UL, 2UL, 2281832448UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY COLON RPAREN COMMA RSQUARE ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_74(
-    _tokenSet_74_data_, 8);
-const unsigned long CPPParser::_tokenSet_75_data_[] = {
-    2622464UL, 4294963201UL, 1944063999UL, 0UL, 4291790336UL, 16399UL,
-    0UL,       0UL,          0UL,          0UL, 0UL,          0UL};
-// ID COLON StringLiteral LPAREN "typename" "char" "wchar_t" "bool" "short"
-// "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32"
-// "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t"
-// "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float"
-// "double" "void" "_declspec" "__declspec" "operator" "this" "true" "false"
-// OCTALINT TILDE STAR AMPERSAND PLUS MINUS PLUSPLUS MINUSMINUS "sizeof"
-// "__alignof__" SCOPE "dynamic_cast" "static_cast" "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_75(
-    _tokenSet_75_data_, 12);
-const unsigned long CPPParser::_tokenSet_76_data_[] = {
-    100664320UL, 1UL, 1910505472UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// ID "_stdcall" "__stdcall" LPAREN "operator" "this" "true" "false" TILDE
-// STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_76(
-    _tokenSet_76_data_, 12);
-const unsigned long CPPParser::_tokenSet_77_data_[] = {
-    100926816UL, 1UL, 1977806848UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID ASSIGNEQUAL "_stdcall" "__stdcall"
-// LPAREN "const" "__const" "volatile" "__volatile__" COMMA "operator"
-// "this" "true" "false" LSQUARE TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL
-// EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS
-// MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT
-// "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt"
-// "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_77(
-    _tokenSet_77_data_, 12);
-const unsigned long CPPParser::_tokenSet_78_data_[] = {
-    262400UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SEMICOLON ASSIGNEQUAL COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_78(
-    _tokenSet_78_data_, 8);
-const unsigned long CPPParser::_tokenSet_79_data_[] = {
-    4293932672UL, 4294967295UL, 4225826815UL, 0UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,          0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" "operator"
-// "this" "true" "false" OCTALINT RSQUARE TILDE STAR AMPERSAND ELLIPSIS
-// PLUS MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_79(
-    _tokenSet_79_data_, 12);
-const unsigned long CPPParser::_tokenSet_80_data_[] = {
-    4294967250UL, 4294967295UL, 4160684031UL, 1015807UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// EOF "template" GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY "inline"
-// "friend" "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY ASSIGNEQUAL
-// COLON "extern" StringLiteral "struct" "union" "class" "_stdcall" "__stdcall"
-// "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN
-// "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" COMMA "public" "protected" "private" "operator" "this"
-// "true" "false" OCTALINT LSQUARE TILDE STAR AMPERSAND ELLIPSIS "throw"
-// "using" "case" "default" "if" "else" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "asm" "_asm" "__asm" "__asm__" PLUS
-// MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_80(
-    _tokenSet_80_data_, 12);
-const unsigned long CPPParser::_tokenSet_81_data_[] = {
-    263520UL, 3UL, 4125229056UL, 3220176896UL, 2744319UL, 16396UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID ASSIGNEQUAL LPAREN RPAREN COMMA "operator"
-// "this" "true" "false" LSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL
-// DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL
-// BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR
-// NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-// PLUS MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE POINTERTO
-// NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_81(
-    _tokenSet_81_data_, 12);
-const unsigned long CPPParser::_tokenSet_82_data_[] = {
-    4292624320UL, 4294967295UL, 2147680255UL, 2UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend"
-// ASSIGNEQUAL
-// COLON "extern" "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE"
-// "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE" "auto" "register" "static" "mutable" "_inline" "__inline"
-// "virtual" "explicit" "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "const" "__const" "volatile" "__volatile__"
-// COMMA ELLIPSIS "using" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_82(
-    _tokenSet_82_data_, 12);
-const unsigned long CPPParser::_tokenSet_83_data_[] = {
-    4292099968UL, 4294967292UL, 65535UL, 3UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" ASSIGNEQUAL "extern"
-// "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE"
-// "GFID" "GFUNREAD" "GFARRAYSIZE" "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "throw" "using" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_83(
-    _tokenSet_83_data_, 12);
-const unsigned long CPPParser::_tokenSet_84_data_[] = {526336UL, 0UL, 0UL, 0UL,
-                                                       0UL,      0UL, 0UL, 0UL};
-// LCURLY COLON
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_84(
-    _tokenSet_84_data_, 8);
-const unsigned long CPPParser::_tokenSet_85_data_[] = {0UL, 1UL, 0UL, 0UL,
-                                                       0UL, 0UL, 0UL, 0UL};
-// LPAREN
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_85(
-    _tokenSet_85_data_, 8);
-const unsigned long CPPParser::_tokenSet_86_data_[] = {
-    1024UL, 0UL, 268435456UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// ID TILDE SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_86(
-    _tokenSet_86_data_, 12);
-const unsigned long CPPParser::_tokenSet_87_data_[] = {
-    0UL, 2UL, 2147483648UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// RPAREN ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_87(
-    _tokenSet_87_data_, 8);
-const unsigned long CPPParser::_tokenSet_88_data_[] = {
-    4292097760UL, 4294967295UL, 4125294591UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN GREATERTHAN "typedef" "enum" ID "inline" "friend" ASSIGNEQUAL
-// "extern" "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE"
-// "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE" "auto" "register" "static" "mutable" "_inline" "__inline"
-// "virtual" "explicit" "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "const" "__const" "volatile" "__volatile__"
-// COMMA "operator" "this" "true" "false" LSQUARE TILDE STAR AMPERSAND
-// ELLIPSIS SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_88(
-    _tokenSet_88_data_, 12);
-const unsigned long CPPParser::_tokenSet_89_data_[] = {
-    100926560UL, 3UL, 4125290496UL, 3220176896UL, 2744319UL, 32764UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN ID ASSIGNEQUAL "_stdcall" "__stdcall" LPAREN RPAREN
-// "const" "__const" "volatile" "__volatile__" COMMA "operator" "this"
-// "true" "false" LSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR NOTEQUAL
-// EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS
-// MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS SCOPE POINTERTO NOT
-// "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt"
-// "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_89(
-    _tokenSet_89_data_, 12);
-const unsigned long CPPParser::_tokenSet_90_data_[] = {
-    100926528UL, 3UL, 3825336320UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// GREATERTHAN ID ASSIGNEQUAL "_stdcall" "__stdcall" LPAREN RPAREN COMMA
-// LSQUARE STAR AMPERSAND ELLIPSIS SCOPE "_cdecl" "__cdecl" "_near" "__near"
-// "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_90(
-    _tokenSet_90_data_, 12);
-const unsigned long CPPParser::_tokenSet_91_data_[] = {
-    4294721520UL, 4294967295UL, 4293066751UL, 3UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,          0UL};
-// "template" LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY
-// "inline" "friend" ASSIGNEQUAL COLON "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" COMMA "operator"
-// "this" "true" "false" OCTALINT LSQUARE RSQUARE TILDE STAR AMPERSAND
-// ELLIPSIS "throw" "using" PLUS MINUS PLUSPLUS MINUSMINUS "sizeof"
-// "__alignof__"
-// SCOPE "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_91(
-    _tokenSet_91_data_, 12);
-const unsigned long CPPParser::_tokenSet_92_data_[] = {
-    64UL, 2UL, 2147614720UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN RPAREN COMMA ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_92(
-    _tokenSet_92_data_, 8);
-const unsigned long CPPParser::_tokenSet_93_data_[] = {
-    262208UL, 3UL, 2214723584UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN ASSIGNEQUAL LPAREN RPAREN COMMA LSQUARE ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_93(
-    _tokenSet_93_data_, 8);
-const unsigned long CPPParser::_tokenSet_94_data_[] = {
-    4294852594UL, 4294967295UL, 4293066751UL, 4293918723UL,
-    4291821567UL, 32767UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// EOF "template" LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY
-// "inline" "friend" RCURLY ASSIGNEQUAL COLON "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" COMMA "operator"
-// "this" "true" "false" OCTALINT LSQUARE RSQUARE TILDE STAR AMPERSAND
-// ELLIPSIS "throw" "using" TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_94(
-    _tokenSet_94_data_, 12);
-const unsigned long CPPParser::_tokenSet_95_data_[] = {
-    262208UL, 2UL, 2147614720UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN ASSIGNEQUAL RPAREN COMMA ELLIPSIS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_95(
-    _tokenSet_95_data_, 8);
-const unsigned long CPPParser::_tokenSet_96_data_[] = {
-    64UL, 2UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN RPAREN COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_96(
-    _tokenSet_96_data_, 8);
-const unsigned long CPPParser::_tokenSet_97_data_[] = {
-    101582176UL, 3UL, 4259446784UL, 4293918721UL, 557055UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL,          0UL,      0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID RCURLY ASSIGNEQUAL COLON "_stdcall"
-// "__stdcall" LPAREN RPAREN COMMA "operator" "this" "true" "false" LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS "throw" TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR
-// NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-// PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR SCOPE "_cdecl" "__cdecl" "_near"
-// "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_97(
-    _tokenSet_97_data_, 12);
-const unsigned long CPPParser::_tokenSet_98_data_[] = {
-    16777232UL, 4096UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// "template" "class" "typename"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_98(
-    _tokenSet_98_data_, 8);
-const unsigned long CPPParser::_tokenSet_99_data_[] = {
-    1120UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// LESSTHAN GREATERTHAN ID COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_99(
-    _tokenSet_99_data_, 8);
-const unsigned long CPPParser::_tokenSet_100_data_[] = {
-    4291835520UL, 4294967293UL, 4058054655UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "operator" "this" "true" "false" TILDE STAR AMPERSAND
-// ELLIPSIS SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_100(
-    _tokenSet_100_data_, 12);
-const unsigned long CPPParser::_tokenSet_101_data_[] = {
-    64UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN COMMA
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_101(
-    _tokenSet_101_data_, 8);
-const unsigned long CPPParser::_tokenSet_102_data_[] = {
-    100664416UL, 1UL, 1677852672UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// LESSTHAN GREATERTHAN ID "_stdcall" "__stdcall" LPAREN COMMA LSQUARE
-// STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_102(
-    _tokenSet_102_data_, 12);
-const unsigned long CPPParser::_tokenSet_103_data_[] = {
-    1024UL, 4294963200UL, 4095UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,          0UL,    0UL, 0UL,      0UL};
-// ID "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8"
-// "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64"
-// "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64"
-// "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_103(
-    _tokenSet_103_data_, 12);
-const unsigned long CPPParser::_tokenSet_104_data_[] = {
-    100664416UL, 4294959105UL, 1677856767UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN GREATERTHAN ID "_stdcall" "__stdcall" LPAREN "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" COMMA LSQUARE STAR
-// AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt"
-// "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_104(
-    _tokenSet_104_data_, 12);
-const unsigned long CPPParser::_tokenSet_105_data_[] = {
-    4291835616UL, 4294967293UL, 1677918207UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN GREATERTHAN "typedef" "enum" ID "inline" "friend" "extern"
-// "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE"
-// "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" COMMA LSQUARE
-// STAR AMPERSAND SCOPE "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_105(
-    _tokenSet_105_data_, 12);
-const unsigned long CPPParser::_tokenSet_106_data_[] = {
-    4294194912UL, 4294967293UL, 2011365375UL, 3220176896UL,
-    4294967295UL, 16399UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN "typedef" "enum" ID "inline" "friend" ASSIGNEQUAL
-// "extern" StringLiteral "struct" "union" "class" "_stdcall" "__stdcall"
-// "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE" "auto" "register" "static" "mutable" "_inline" "__inline"
-// "virtual" "explicit" "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "const" "__const" "volatile" "__volatile__"
-// COMMA "operator" "this" "true" "false" OCTALINT LSQUARE TILDE STAR AMPERSAND
-// TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL OR AND
-// BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO
-// SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS
-// MINUSMINUS "sizeof" "__alignof__" SCOPE DOT POINTERTO "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_106(
-    _tokenSet_106_data_, 12);
-const unsigned long CPPParser::_tokenSet_107_data_[] = {
-    917856UL, 2UL, 3355574272UL, 4293918720UL, 127UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,   0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA
-// RSQUARE AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_107(
-    _tokenSet_107_data_, 12);
-const unsigned long CPPParser::_tokenSet_108_data_[] = {
-    4291851904UL, 4294967292UL, 65535UL, 983042UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL,      0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "namespace" "extern" "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register"
-// "static" "mutable" "_inline" "__inline" "virtual" "explicit" "typename"
-// "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16"
-// "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "using" "asm" "_asm" "__asm"
-// "__asm__" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_108(
-    _tokenSet_108_data_, 12);
-const unsigned long CPPParser::_tokenSet_109_data_[] = {
-    4291852192UL, 4294967293UL, 1910571007UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN "typedef" SEMICOLON "enum" ID "inline" "friend" "namespace"
-// "extern" "struct" "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE"
-// "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES"
-// "GFARRAYELEMSIZE"
-// "auto" "register" "static" "mutable" "_inline" "__inline" "virtual"
-// "explicit" "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" "operator"
-// "this" "true" "false" TILDE STAR AMPERSAND SCOPE "_cdecl" "__cdecl"
-// "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_109(
-    _tokenSet_109_data_, 12);
-const unsigned long CPPParser::_tokenSet_110_data_[] = {
-    4294967280UL, 4294967293UL, 2013265919UL, 3221192703UL,
-    4293910527UL, 32767UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// "template" LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY
-// "inline" "friend" "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY
-// ASSIGNEQUAL COLON "extern" StringLiteral "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "GFIGNORE" COMMA "public" "protected" "private" "operator"
-// "this" "true" "false" OCTALINT LSQUARE TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "else" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "asm" "_asm" "__asm" "__asm__" TIMESEQUAL
-// DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL
-// BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL OR AND BITWISEOR BITWISEXOR
-// NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-// PLUS MINUS DIVIDE MOD POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE POINTERTO "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast"
-// "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral
-// FLOATONE FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far"
-// "__far" "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_110(
-    _tokenSet_110_data_, 12);
-const unsigned long CPPParser::_tokenSet_111_data_[] = {
-    1056UL, 0UL, 568389632UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// LESSTHAN ID "const" "__const" "volatile" "__volatile__" "operator" "this"
-// "true" "false" STAR SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_111(
-    _tokenSet_111_data_, 12);
-const unsigned long CPPParser::_tokenSet_112_data_[] = {
-    4294195168UL, 4294967293UL, 2011365375UL, 4293918720UL,
-    4294967295UL, 16399UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID "inline" "friend"
-// ASSIGNEQUAL "extern" StringLiteral "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" COMMA "operator" "this" "true" "false" OCTALINT LSQUARE
-// TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR
-// POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE DOT POINTERTO
-// "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_112(
-    _tokenSet_112_data_, 12);
-const unsigned long CPPParser::_tokenSet_113_data_[] = {
-    4294967282UL, 4294967293UL, 2013265919UL, 4294967295UL,
-    4294967295UL, 32767UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// EOF "template" LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID LCURLY
-// "inline" "friend" "namespace" "antlrTrace_on" "antlrTrace_off" RCURLY
-// ASSIGNEQUAL COLON "extern" StringLiteral "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" "GFIGNORE" COMMA "public" "protected" "private" "operator"
-// "this" "true" "false" OCTALINT LSQUARE TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "else" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "catch" "asm" "_asm" "__asm" "__asm__"
-// TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO
-// SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS
-// MINUSMINUS "sizeof" "__alignof__" SCOPE DOT POINTERTO "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_113(
-    _tokenSet_113_data_, 12);
-const unsigned long CPPParser::_tokenSet_114_data_[] = {
-    4294180752UL, 4294967293UL, 1945960447UL, 1048575UL, 4291790336UL, 32767UL,
-    0UL,          0UL,          0UL,          0UL,       0UL,          0UL};
-// "template" "typedef" SEMICOLON "enum" ID LCURLY "inline" "friend" "namespace"
-// "antlrTrace_on" "antlrTrace_off" RCURLY "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "public" "protected" "private"
-// "operator" "this" "true" "false" OCTALINT TILDE STAR AMPERSAND "throw"
-// "using" "case" "default" "if" "else" "switch" "while" "do" "for" "goto"
-// "continue" "break" "return" "try" "catch" "asm" "_asm" "__asm" "__asm__"
-// PLUS MINUS PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE "dynamic_cast"
-// "static_cast" "reinterpret_cast" "const_cast" "typeid" DECIMALINT
-// HEXADECIMALINT
-// CharLiteral WCharLiteral WStringLiteral FLOATONE FLOATTWO NOT "new"
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_114(
-    _tokenSet_114_data_, 12);
-const unsigned long CPPParser::_tokenSet_115_data_[] = {
-    917824UL, 2UL, 2281832448UL, 1072693248UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_115(
-    _tokenSet_115_data_, 8);
-const unsigned long CPPParser::_tokenSet_116_data_[] = {
-    917824UL, 2UL, 2281832448UL, 2146435072UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_116(
-    _tokenSet_116_data_, 8);
-const unsigned long CPPParser::_tokenSet_117_data_[] = {
-    917824UL, 2UL, 2281832448UL, 4293918720UL, 0UL, 0UL, 0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_117(
-    _tokenSet_117_data_, 8);
-const unsigned long CPPParser::_tokenSet_118_data_[] = {
-    917824UL, 2UL, 2281832448UL, 4293918720UL, 1UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR AND
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_118(
-    _tokenSet_118_data_, 12);
-const unsigned long CPPParser::_tokenSet_119_data_[] = {
-    917824UL, 2UL, 2281832448UL, 4293918720UL, 3UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR AND BITWISEOR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_119(
-    _tokenSet_119_data_, 12);
-const unsigned long CPPParser::_tokenSet_120_data_[] = {
-    917824UL, 2UL, 2281832448UL, 4293918720UL, 7UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR AND BITWISEOR BITWISEXOR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_120(
-    _tokenSet_120_data_, 12);
-const unsigned long CPPParser::_tokenSet_121_data_[] = {
-    917824UL, 2UL, 3355574272UL, 4293918720UL, 7UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL, 0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// QUESTIONMARK OR AND BITWISEOR BITWISEXOR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_121(
-    _tokenSet_121_data_, 12);
-const unsigned long CPPParser::_tokenSet_122_data_[] = {
-    96UL, 0UL, 0UL, 0UL, 96UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// LESSTHAN GREATERTHAN LESSTHANOREQUALTO GREATERTHANOREQUALTO
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_122(
-    _tokenSet_122_data_, 12);
-const unsigned long CPPParser::_tokenSet_123_data_[] = {
-    917824UL, 2UL, 3355574272UL, 4293918720UL, 31UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,  0UL};
-// GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA RSQUARE
-// AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_123(
-    _tokenSet_123_data_, 12);
-const unsigned long CPPParser::_tokenSet_124_data_[] = {
-    917856UL, 2UL, 3355574272UL, 4293918720UL, 511UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,   0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA
-// RSQUARE AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_124(
-    _tokenSet_124_data_, 12);
-const unsigned long CPPParser::_tokenSet_125_data_[] = {
-    0UL, 0UL, 536870912UL, 0UL, 6144UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// STAR DIVIDE MOD
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_125(
-    _tokenSet_125_data_, 12);
-const unsigned long CPPParser::_tokenSet_126_data_[] = {
-    917856UL, 2UL, 3355574272UL, 4293918720UL, 2047UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,    0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA
-// RSQUARE AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_126(
-    _tokenSet_126_data_, 12);
-const unsigned long CPPParser::_tokenSet_127_data_[] = {
-    917856UL, 2UL, 3892445184UL, 4293918720UL, 8191UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,    0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA
-// RSQUARE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_127(
-    _tokenSet_127_data_, 12);
-const unsigned long CPPParser::_tokenSet_128_data_[] = {
-    1024UL, 4294963200UL, 65535UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,          0UL,     0UL, 0UL,      0UL};
-// ID "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8"
-// "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64"
-// "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64"
-// "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" "const" "__const" "volatile" "__volatile__" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_128(
-    _tokenSet_128_data_, 12);
-const unsigned long CPPParser::_tokenSet_129_data_[] = {
-    917856UL, 2UL, 3892445184UL, 4293918720UL, 32767UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,     0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON RPAREN COMMA
-// RSQUARE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL
-// MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_129(
-    _tokenSet_129_data_, 12);
-const unsigned long CPPParser::_tokenSet_130_data_[] = {
-    2098176UL, 4294963201UL, 333451263UL, 0UL, 4291297280UL, 3UL,
-    0UL,       0UL,          0UL,         0UL, 0UL,          0UL};
-// ID StringLiteral LPAREN "typename" "char" "wchar_t" "bool" "short" "int"
-// "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32"
-// "int32_t" "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t"
-// "uint64_t" "_w64" "__w64" "long" "signed" "unsigned" "float" "double"
-// "void" "_declspec" "__declspec" "operator" "this" "true" "false" OCTALINT
-// TILDE SCOPE "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast"
-// "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral
-// FLOATONE FLOATTWO
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_130(
-    _tokenSet_130_data_, 12);
-const unsigned long CPPParser::_tokenSet_131_data_[] = {
-    3016032UL, 4294963203UL, 4293005311UL, 4293918720UL, 4294967295UL, 16399UL,
-    0UL,       0UL,          0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID RCURLY ASSIGNEQUAL COLON StringLiteral
-// LPAREN RPAREN "typename" "char" "wchar_t" "bool" "short" "int" "_int8"
-// "__int8" "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t"
-// "_int64" "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t"
-// "_w64" "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" COMMA "operator" "this" "true" "false" OCTALINT LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE DOT POINTERTO "dynamic_cast" "static_cast" "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_131(
-    _tokenSet_131_data_, 12);
-const unsigned long CPPParser::_tokenSet_132_data_[] = {
-    0UL, 0UL, 1879048192UL, 0UL, 1536UL, 4UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// TILDE STAR AMPERSAND PLUS MINUS NOT
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_132(
-    _tokenSet_132_data_, 12);
-const unsigned long CPPParser::_tokenSet_133_data_[] = {
-    0UL, 0UL, 0UL, 0UL, 524288UL, 16392UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL};
-// SCOPE "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_133(
-    _tokenSet_133_data_, 12);
-const unsigned long CPPParser::_tokenSet_134_data_[] = {
-    4293932672UL, 4294967293UL, 2011234303UL, 0UL, 4291790336UL, 16399UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,          0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" StringLiteral "struct"
-// "union" "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID"
-// "GFUNREAD" "GFARRAYSIZE" LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" "operator" "this" "true"
-// "false" OCTALINT LSQUARE TILDE STAR AMPERSAND PLUS MINUS PLUSPLUS MINUSMINUS
-// "sizeof" "__alignof__" SCOPE "dynamic_cast" "static_cast" "reinterpret_cast"
-// "const_cast" "typeid" DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral
-// WStringLiteral FLOATONE FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_134(
-    _tokenSet_134_data_, 12);
-const unsigned long CPPParser::_tokenSet_135_data_[] = {
-    4291835552UL, 4294967295UL, 1677787135UL, 0UL, 524288UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL, 0UL,      0UL};
-// LESSTHAN "typedef" "enum" ID "inline" "friend" "extern" "struct" "union"
-// "class" "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE" LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto"
-// "register" "static" "mutable" "_inline" "__inline" "virtual" "explicit"
-// "typename" "char" "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t"
-// "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64"
-// "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64"
-// "long" "signed" "unsigned" "float" "double" "void" "_declspec" "__declspec"
-// "const" "__const" "volatile" "__volatile__" LSQUARE STAR AMPERSAND SCOPE
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_135(
-    _tokenSet_135_data_, 12);
-const unsigned long CPPParser::_tokenSet_136_data_[] = {
-    4294194912UL, 4294967295UL, 2011365375UL, 4293918720UL,
-    4294967295UL, 16399UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN "typedef" "enum" ID "inline" "friend" ASSIGNEQUAL
-// "extern" StringLiteral "struct" "union" "class" "_stdcall" "__stdcall"
-// "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE" LPAREN RPAREN
-// "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" COMMA "operator" "this" "true" "false" OCTALINT LSQUARE
-// TILDE STAR AMPERSAND TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL
-// SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL
-// QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR
-// POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__" SCOPE DOT POINTERTO
-// "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_136(
-    _tokenSet_136_data_, 12);
-const unsigned long CPPParser::_tokenSet_137_data_[] = {
-    1056UL, 4294959105UL, 4095UL, 0UL, 524288UL, 0UL,
-    0UL,    0UL,          0UL,    0UL, 0UL,      0UL};
-// LESSTHAN ID LPAREN "char" "wchar_t" "bool" "short" "int" "_int8" "__int8"
-// "int8_t" "_int16" "__int16" "int16_t" "_int32" "__int32" "int32_t" "_int64"
-// "__int64" "int64_t" "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64"
-// "__w64" "long" "signed" "unsigned" "float" "double" "void" "_declspec"
-// "__declspec" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_137(
-    _tokenSet_137_data_, 12);
-const unsigned long CPPParser::_tokenSet_138_data_[] = {
-    2098176UL, 1UL, 333447168UL, 0UL, 4161273856UL, 3UL,
-    0UL,       0UL, 0UL,         0UL, 0UL,          0UL};
-// ID StringLiteral LPAREN "operator" "this" "true" "false" OCTALINT TILDE
-// SCOPE DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral
-// FLOATONE FLOATTWO
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_138(
-    _tokenSet_138_data_, 12);
-const unsigned long CPPParser::_tokenSet_139_data_[] = {
-    4291835520UL, 4294967293UL, 65535UL, 0UL, 524288UL, 0UL,
-    0UL,          0UL,          0UL,     0UL, 0UL,      0UL};
-// "typedef" "enum" ID "inline" "friend" "extern" "struct" "union" "class"
-// "_stdcall" "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD"
-// "GFARRAYSIZE"
-// LPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static" "mutable"
-// "_inline" "__inline" "virtual" "explicit" "typename" "char" "wchar_t"
-// "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" SCOPE
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_139(
-    _tokenSet_139_data_, 12);
-const unsigned long CPPParser::_tokenSet_140_data_[] = {
-    4292753376UL, 4294967295UL, 3959619583UL, 4293918720UL, 557055UL, 16368UL,
-    0UL,          0UL,          0UL,          0UL,          0UL,      0UL};
-// LESSTHAN GREATERTHAN "typedef" SEMICOLON "enum" ID "inline" "friend"
-// RCURLY ASSIGNEQUAL COLON "extern" "struct" "union" "class" "_stdcall"
-// "__stdcall" "GFEXCLUDE" "GFINCLUDE" "GFID" "GFUNREAD" "GFARRAYSIZE"
-// LPAREN RPAREN "GFARRAYSIZES" "GFARRAYELEMSIZE" "auto" "register" "static"
-// "mutable" "_inline" "__inline" "virtual" "explicit" "typename" "char"
-// "wchar_t" "bool" "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16"
-// "int16_t" "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t"
-// "uint8_t" "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed"
-// "unsigned" "float" "double" "void" "_declspec" "__declspec" "const"
-// "__const" "volatile" "__volatile__" COMMA LSQUARE RSQUARE STAR AMPERSAND
-// ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL
-// SHIFTRIGHTEQUAL BITWISEANDEQUAL BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK
-// OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL LESSTHANOREQUALTO
-// GREATERTHANOREQUALTO
-// SHIFTLEFT SHIFTRIGHT PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR SCOPE
-// "_cdecl" "__cdecl" "_near" "__near" "_far" "__far" "__interrupt" "pascal"
-// "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_140(
-    _tokenSet_140_data_, 12);
-const unsigned long CPPParser::_tokenSet_141_data_[] = {
-    917856UL, 3UL, 3959554048UL, 4293918720UL, 3276799UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,       0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON LPAREN RPAREN
-// COMMA LSQUARE RSQUARE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL
-// MINUSEQUAL PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR
-// NOTEQUAL EQUAL LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT
-// PLUS MINUS DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS DOT POINTERTO
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_141(
-    _tokenSet_141_data_, 12);
-const unsigned long CPPParser::_tokenSet_142_data_[] = {
-    100664320UL, 0UL, 1677721600UL, 0UL, 524288UL, 16368UL,
-    0UL,         0UL, 0UL,          0UL, 0UL,      0UL};
-// ID "_stdcall" "__stdcall" LSQUARE STAR AMPERSAND SCOPE "_cdecl" "__cdecl"
-// "_near" "__near" "_far" "__far" "__interrupt" "pascal" "_pascal" "__pascal"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_142(
-    _tokenSet_142_data_, 12);
-const unsigned long CPPParser::_tokenSet_143_data_[] = {
-    103679328UL,  4294963203UL, 4293066751UL, 4293918720UL,
-    4291821567UL, 32767UL,      0UL,          0UL,
-    0UL,          0UL,          0UL,          0UL};
-// LESSTHAN GREATERTHAN SEMICOLON ID RCURLY ASSIGNEQUAL COLON StringLiteral
-// "_stdcall" "__stdcall" LPAREN RPAREN "typename" "char" "wchar_t" "bool"
-// "short" "int" "_int8" "__int8" "int8_t" "_int16" "__int16" "int16_t"
-// "_int32" "__int32" "int32_t" "_int64" "__int64" "int64_t" "uint8_t"
-// "uint16_t" "uint32_t" "uint64_t" "_w64" "__w64" "long" "signed" "unsigned"
-// "float" "double" "void" "_declspec" "__declspec" "const" "__const" "volatile"
-// "__volatile__" COMMA "operator" "this" "true" "false" OCTALINT LSQUARE
-// RSQUARE TILDE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR PLUSPLUS MINUSMINUS "sizeof" "__alignof__"
-// SCOPE "dynamic_cast" "static_cast" "reinterpret_cast" "const_cast" "typeid"
-// DECIMALINT HEXADECIMALINT CharLiteral WCharLiteral WStringLiteral FLOATONE
-// FLOATTWO NOT "new" "_cdecl" "__cdecl" "_near" "__near" "_far" "__far"
-// "__interrupt" "pascal" "_pascal" "__pascal" "delete"
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_143(
-    _tokenSet_143_data_, 12);
-const unsigned long CPPParser::_tokenSet_144_data_[] = {
-    917856UL, 3UL, 3892445184UL, 4293918720UL, 32767UL, 0UL,
-    0UL,      0UL, 0UL,          0UL,          0UL,     0UL};
-// LESSTHAN GREATERTHAN SEMICOLON RCURLY ASSIGNEQUAL COLON LPAREN RPAREN
-// COMMA RSQUARE STAR AMPERSAND ELLIPSIS TIMESEQUAL DIVIDEEQUAL MINUSEQUAL
-// PLUSEQUAL MODEQUAL SHIFTLEFTEQUAL SHIFTRIGHTEQUAL BITWISEANDEQUAL
-// BITWISEXOREQUAL
-// BITWISEOREQUAL QUESTIONMARK OR AND BITWISEOR BITWISEXOR NOTEQUAL EQUAL
-// LESSTHANOREQUALTO GREATERTHANOREQUALTO SHIFTLEFT SHIFTRIGHT PLUS MINUS
-// DIVIDE MOD DOTMBR POINTERTOMBR
-const ANTLR_USE_NAMESPACE(antlr) BitSet CPPParser::_tokenSet_144(
-    _tokenSet_144_data_, 12);
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.hpp
deleted file mode 100644
index 2b74369..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPParser.hpp
+++ /dev/null
@@ -1,920 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef INC_CPPParser_hpp_
-#define INC_CPPParser_hpp_
-
-#include <antlr/config.hpp>
-/* $ANTLR 2.7.7 (20130409): "CPP_parser.g" -> "CPPParser.hpp"$ */
-#include <antlr/TokenStream.hpp>
-#include <antlr/TokenBuffer.hpp>
-#include "STDCTokenTypes.hpp"
-#include <antlr/LLkParser.hpp>
-
-#line 79 "CPP_parser.g"
-
-// File generated from CPP_parser.g
-// Version 3.1 November 2005
-// This file is best viewed in courier font with tabs set to 4 spaces
-//
-// The statements in this block appear in both CPPLexer.hpp and CPPParser.hpp
-#include <stdio.h>
-#include <string.h>
-#include "antlr/CharScanner.hpp"
-#include "CPPDictionary.hpp"
-
-// Defined in main.cpp
-extern void process_line_directive(const char *, const char *);
-
-// Declared in main.cpp
-extern int deferredLineCount;
-
-#line 30 "CPPParser.hpp"
-class CUSTOM_API CPPParser : public ANTLR_USE_NAMESPACE(antlr) LLkParser,
-                             public STDCTokenTypes {
-#line 191 "CPP_parser.g"
-
- public:
-#define CPPParser_MaxQualifiedItemSize 500
-
-  // These codes are not stored with symbol names in CPPSymbol,
-  //   but they are available for development
-  // Can't bitwise-OR enum elements together, this must be an int
-  typedef unsigned long TypeSpecifier;  // note: must be at least 16 bits
-  typedef unsigned long TypeQualifier;
-
-#define tsInvalid 0x0
-#define tsVOID 0x1
-#define tsCHAR 0x2
-#define tsSHORT 0x4
-#define tsINT 0x8
-#define tsLONG 0x10
-#define tsFLOAT 0x20
-#define tsDOUBLE 0x40
-#define tsSIGNED 0x80
-#define tsUNSIGNED 0x100
-#define tsTYPEID 0x200
-#define tsSTRUCT 0x400
-#define tsENUM 0x800
-#define tsUNION 0x1000
-#define tsCLASS 0x2000
-#define tsWCHAR_T 0x4000
-#define tsBOOL 0x8000
-
-#define tqInvalid 0x0
-#define tqCONST 0x1
-#define tqVOLATILE 0x2
-#define tqGFEXCLUDE 0x4
-#define tqGFINCLUDE 0x8
-#define tqGFID 0x10
-#define tqGFUNREAD 0x20
-
-  enum StorageClass {
-    scInvalid = 0,
-    scAUTO = 1,
-    scREGISTER,
-    scSTATIC,
-    scEXTERN,
-    scMUTABLE
-  };
-
-  enum FunctionSpecifier {
-    fsInvalid = 0,
-    fsVIRTUAL,
-    fsINLINE,
-    fsEXPLICIT,
-    fsFRIEND
-  };
-
-  // JEL 3/26/96 changed to allow ORing of values
-  // DW 10/04/05 These codes are stored with the item in CPPSymbol in the
-  // dictionary See declaratorID
-  typedef int QualifiedItem;
-#define qiInvalid 0x0
-#define qiType 0x1  // includes enum, class, typedefs, namespace
-#define qiDtor 0x2
-#define qiCtor 0x4
-#define qiOperator 0x8
-#define qiPtrMember 0x10
-#define qiVar 0x20
-#define qiFun 0x40
-#define qiNamespace 0x50
-
- protected:
-  // Symbol table management stuff
-  CPPDictionary *symbols;
-  int templateParameterScope;
-  int externalScope;
-  int anyType;
-  int anyNonType;
-
-  bool _td;               // For typedef
-  bool _fd;               // For friend
-  StorageClass _sc;       // For storage class
-  TypeQualifier _tq;      // For type qualifier
-  TypeSpecifier _ts;      // For type specifier
-  FunctionSpecifier _fs;  // For declaration specifier
-
-  int functionDefinition;  // 0 = Function definition not being parsed
-  // 1 = Parsing function name
-  // 2 = Parsing function parameter list
-  // 3 = Parsing function block
-
-  char qualifierPrefix[CPPParser_MaxQualifiedItemSize + 1];
-  char *enclosingClass;
-  int assign_stmt_RHS_found;
-  bool in_parameter_list;
-  bool K_and_R;  // used to distinguish old K & R parameter definitions
-  bool in_return;
-  bool is_address;
-  bool is_pointer;
-
-  // Limit lookahead for qualifiedItemIs()
-  enum { MaxTemplateTokenScan = 200 };
-
- public:
-  void init();
-
- protected:
-  // Semantic interface in Support.cpp;
-  // You could subclass and redefine these functions
-  // so you don't have to mess with the grammar itself.
-
-  // Symbol stuff
-  virtual int qualifiedItemIsOneOf(QualifiedItem qiFlags,
-                                   int lookahead_offset = 0);
-  virtual QualifiedItem qualifiedItemIs(int lookahead_offset = 0);
-  virtual int skipTemplateQualifiers(int &kInOut);
-  virtual int skipNestedParens(int &kInOut);
-  virtual int scopedItem(int k = 1);
-  virtual int finalQualifier(int k = 1);
-  virtual int isTypeName(const char *s);
-  virtual int isClassName(const char *s);
-  virtual void end_of_stmt();
-
-  // Scoping stuff
-  virtual void enterNewLocalScope();
-  virtual void exitLocalScope();
-  virtual void enterExternalScope();
-  virtual void exitExternalScope();
-
-  // namespaceEnd stuff
-  virtual void exitNamespaceScope();
-
-  // Aggregate stuff
-  virtual void classForwardDeclaration(TypeSpecifier, FunctionSpecifier,
-                                       const char *);
-  virtual void beginClassDefinition(TypeSpecifier, const char *);
-  virtual void endClassDefinition();
-  virtual void beginEnumDefinition(const char *);
-  virtual void endEnumDefinition();
-  virtual void enumElement(const char *);
-
-  // Declaration and definition stuff
-  virtual void declarationSpecifier(bool, bool, StorageClass, TypeQualifier,
-                                    TypeSpecifier, FunctionSpecifier);
-  virtual void beginDeclaration();
-  virtual void endDeclaration();
-  virtual void beginConstructorDeclaration(const char *);
-  virtual void endConstructorDeclaration();
-  virtual void beginDestructorDeclaration(const char *);
-  virtual void endDestructorDeclaration();
-  virtual void beginParameterDeclaration();
-  virtual void beginFieldDeclaration();
-  virtual void beginFunctionDefinition();
-  virtual void endFunctionDefinition();
-  virtual void functionParameterList();
-  virtual void functionEndParameterList(int def);
-  virtual void beginConstructorDefinition();
-  virtual void endConstructorDefinition();
-  virtual void beginDestructorDefinition();
-  virtual void endDestructorDefinition();
-
-  // Declarator stuff
-  virtual void declaratorID(
-      const char *, QualifiedItem);  // This stores new symbol with its type.
-  virtual void declaratorArray();
-  virtual void declaratorParameterList(int def);
-  virtual void declaratorEndParameterList(int def);
-
-  // template stuff
-  virtual void templateTypeParameter(const char *);
-  virtual void beginTemplateDeclaration();
-  virtual void endTemplateDeclaration();
-  virtual void beginTemplateDefinition();
-  virtual void endTemplateDefinition();
-  virtual void beginTemplateParameterList();
-  virtual void endTemplateParameterList();
-
-  // exception stuff
-  virtual void exceptionBeginHandler();
-  virtual void exceptionEndHandler();
-  virtual void panic(const char *);
-
-  // myCode functions ready for overriding in MyCode subclass
-  // Include application code functions here
-  virtual void myCode_pre_processing(int, char *[]);
-  virtual void myCode_post_processing();
-  virtual void myCode_end_of_stmt();
-  virtual void myCode_function_direct_declarator(const char *);
-
-  // Auto-serializer specific stuff
-  virtual void gfArraySize(const char *id) {}
-  virtual void gfArrayElemSize(const char *id) {}
-#line 34 "CPPParser.hpp"
- public:
-  void initializeASTFactory(ANTLR_USE_NAMESPACE(antlr) ASTFactory &factory);
-
- protected:
-  CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenBuffer &tokenBuf, int k);
-
- public:
-  CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenBuffer &tokenBuf);
-
- protected:
-  CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenStream &lexer, int k);
-
- public:
-  CPPParser(ANTLR_USE_NAMESPACE(antlr) TokenStream &lexer);
-  CPPParser(const ANTLR_USE_NAMESPACE(antlr) ParserSharedInputState &state);
-  int getNumTokens() const { return CPPParser::NUM_TOKENS; }
-  const char *getTokenName(int type) const {
-    if (type > getNumTokens()) return 0;
-    return CPPParser::tokenNames[type];
-  }
-  const char *const *getTokenNames() const { return CPPParser::tokenNames; }
-
- public:
-  void translation_unit();
-
- public:
-  void external_declaration();
-
- public:
-  CPPParser::TypeSpecifier class_specifier();
-
- public:
-  void class_decl_or_def(FunctionSpecifier fs);
-
- public:
-  void init_declarator_list();
-
- public:
-  void enum_specifier();
-
- public:
-  void declaration_specifiers();
-
- public:
-  void function_declarator(int definition);
-
- public:
-  void declaration();
-
- public:
-  void template_head();
-
- public:
-  CPPParser::FunctionSpecifier function_specifier();
-
- public:
-  void dtor_head(int definition);
-
- public:
-  void dtor_body();
-
- public:
-  void ctor_decl_spec();
-
- public:
-  void ctor_definition();
-
- public:
-  char *scope_override();
-
- public:
-  void conversion_function_decl_or_def();
-
- public:
-  void function_definition();
-
- public:
-  void namespace_definition();
-
- public:
-  void namespace_alias_definition();
-
- public:
-  char *qualified_id();
-
- public:
-  void member_declaration();
-
- public:
-  void member_declarator_list();
-
- public:
-  void ctor_declarator(int definition);
-
- public:
-  void compound_statement();
-
- public:
-  void class_head();
-
- public:
-  void access_specifier();
-
- public:
-  void linkage_specification();
-
- public:
-  void using_statement();
-
- public:
-  void template_argument_list();
-
- public:
-  void base_clause();
-
- public:
-  CPPParser::StorageClass storage_class_specifier();
-
- public:
-  CPPParser::TypeQualifier type_qualifier();
-
- public:
-  CPPParser::TypeSpecifier type_specifier();
-
- public:
-  CPPParser::TypeSpecifier simple_type_specifier();
-
- public:
-  char *qualified_type();
-
- public:
-  void class_prefix();
-
- public:
-  void expression();
-
- public:
-  void base_specifier();
-
- public:
-  void enumerator_list();
-
- public:
-  void enumerator();
-
- public:
-  void constant_expression();
-
- public:
-  void optor();
-
- public:
-  void typeID();
-
- public:
-  void init_declarator();
-
- public:
-  void declarator();
-
- public:
-  void initializer();
-
- public:
-  void expression_list();
-
- public:
-  void remainder_expression();
-
- public:
-  void member_declarator();
-
- public:
-  void ptr_operator();
-
- public:
-  void direct_declarator();
-
- public:
-  void parameter_list();
-
- public:
-  void exception_specification();
-
- public:
-  void declarator_suffix();
-
- public:
-  void template_parameter_list();
-
- public:
-  void function_direct_declarator(int definition);
-
- public:
-  void ctor_head();
-
- public:
-  void ctor_body();
-
- public:
-  char *qualified_ctor_id();
-
- public:
-  void ctor_initializer();
-
- public:
-  void superclass_init();
-
- public:
-  void dtor_decl_spec();
-
- public:
-  void dtor_declarator(int definition);
-
- public:
-  void parameter_declaration_list();
-
- public:
-  void parameter_declaration();
-
- public:
-  void abstract_declarator();
-
- public:
-  void type_id();
-
- public:
-  void abstract_declarator_suffix();
-
- public:
-  void cv_qualifier_seq();
-
- public:
-  void template_parameter();
-
- public:
-  void type_parameter();
-
- public:
-  void assigned_type_name();
-
- public:
-  void template_id();
-
- public:
-  void template_argument();
-
- public:
-  void shift_expression();
-
- public:
-  void statement_list();
-
- public:
-  void statement();
-
- public:
-  void block_declaration();
-
- public:
-  void labeled_statement();
-
- public:
-  void case_statement();
-
- public:
-  void default_statement();
-
- public:
-  void selection_statement();
-
- public:
-  void iteration_statement();
-
- public:
-  void jump_statement();
-
- public:
-  void try_block();
-
- public:
-  void throw_statement();
-
- public:
-  void simple_declaration();
-
- public:
-  void asm_definition();
-
- public:
-  void handler();
-
- public:
-  void exception_declaration();
-
- public:
-  void assignment_expression();
-
- public:
-  void conditional_expression();
-
- public:
-  void logical_or_expression();
-
- public:
-  void logical_and_expression();
-
- public:
-  void inclusive_or_expression();
-
- public:
-  void exclusive_or_expression();
-
- public:
-  void and_expression();
-
- public:
-  void equality_expression();
-
- public:
-  void relational_expression();
-
- public:
-  void additive_expression();
-
- public:
-  void multiplicative_expression();
-
- public:
-  void pm_expression();
-
- public:
-  void cast_expression();
-
- public:
-  void unary_expression();
-
- public:
-  void postfix_expression();
-
- public:
-  void unary_operator();
-
- public:
-  void new_expression();
-
- public:
-  void delete_expression();
-
- public:
-  void primary_expression();
-
- public:
-  void id_expression();
-
- public:
-  void constant();
-
- public:
-  void new_type_id();
-
- public:
-  void new_initializer();
-
- public:
-  void new_declarator();
-
- public:
-  void direct_new_declarator();
-
- public:
-  void ptr_to_member();
-
- public:
-  void optor_simple_tokclass();
-
- public:
-  ANTLR_USE_NAMESPACE(antlr) RefAST getAST() { return returnAST; }
-
- protected:
-  ANTLR_USE_NAMESPACE(antlr) RefAST returnAST;
-
- private:
-  static const char *tokenNames[];
-#ifndef NO_STATIC_CONSTS
-  static const int NUM_TOKENS = 193;
-#else
-  enum { NUM_TOKENS = 193 };
-#endif
-
-  static const unsigned long _tokenSet_0_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_0;
-  static const unsigned long _tokenSet_1_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_1;
-  static const unsigned long _tokenSet_2_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_2;
-  static const unsigned long _tokenSet_3_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_3;
-  static const unsigned long _tokenSet_4_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_4;
-  static const unsigned long _tokenSet_5_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_5;
-  static const unsigned long _tokenSet_6_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_6;
-  static const unsigned long _tokenSet_7_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_7;
-  static const unsigned long _tokenSet_8_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_8;
-  static const unsigned long _tokenSet_9_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_9;
-  static const unsigned long _tokenSet_10_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_10;
-  static const unsigned long _tokenSet_11_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_11;
-  static const unsigned long _tokenSet_12_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_12;
-  static const unsigned long _tokenSet_13_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_13;
-  static const unsigned long _tokenSet_14_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_14;
-  static const unsigned long _tokenSet_15_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_15;
-  static const unsigned long _tokenSet_16_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_16;
-  static const unsigned long _tokenSet_17_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_17;
-  static const unsigned long _tokenSet_18_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_18;
-  static const unsigned long _tokenSet_19_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_19;
-  static const unsigned long _tokenSet_20_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_20;
-  static const unsigned long _tokenSet_21_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_21;
-  static const unsigned long _tokenSet_22_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_22;
-  static const unsigned long _tokenSet_23_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_23;
-  static const unsigned long _tokenSet_24_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_24;
-  static const unsigned long _tokenSet_25_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_25;
-  static const unsigned long _tokenSet_26_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_26;
-  static const unsigned long _tokenSet_27_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_27;
-  static const unsigned long _tokenSet_28_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_28;
-  static const unsigned long _tokenSet_29_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_29;
-  static const unsigned long _tokenSet_30_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_30;
-  static const unsigned long _tokenSet_31_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_31;
-  static const unsigned long _tokenSet_32_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_32;
-  static const unsigned long _tokenSet_33_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_33;
-  static const unsigned long _tokenSet_34_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_34;
-  static const unsigned long _tokenSet_35_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_35;
-  static const unsigned long _tokenSet_36_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_36;
-  static const unsigned long _tokenSet_37_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_37;
-  static const unsigned long _tokenSet_38_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_38;
-  static const unsigned long _tokenSet_39_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_39;
-  static const unsigned long _tokenSet_40_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_40;
-  static const unsigned long _tokenSet_41_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_41;
-  static const unsigned long _tokenSet_42_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_42;
-  static const unsigned long _tokenSet_43_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_43;
-  static const unsigned long _tokenSet_44_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_44;
-  static const unsigned long _tokenSet_45_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_45;
-  static const unsigned long _tokenSet_46_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_46;
-  static const unsigned long _tokenSet_47_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_47;
-  static const unsigned long _tokenSet_48_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_48;
-  static const unsigned long _tokenSet_49_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_49;
-  static const unsigned long _tokenSet_50_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_50;
-  static const unsigned long _tokenSet_51_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_51;
-  static const unsigned long _tokenSet_52_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_52;
-  static const unsigned long _tokenSet_53_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_53;
-  static const unsigned long _tokenSet_54_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_54;
-  static const unsigned long _tokenSet_55_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_55;
-  static const unsigned long _tokenSet_56_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_56;
-  static const unsigned long _tokenSet_57_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_57;
-  static const unsigned long _tokenSet_58_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_58;
-  static const unsigned long _tokenSet_59_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_59;
-  static const unsigned long _tokenSet_60_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_60;
-  static const unsigned long _tokenSet_61_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_61;
-  static const unsigned long _tokenSet_62_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_62;
-  static const unsigned long _tokenSet_63_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_63;
-  static const unsigned long _tokenSet_64_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_64;
-  static const unsigned long _tokenSet_65_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_65;
-  static const unsigned long _tokenSet_66_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_66;
-  static const unsigned long _tokenSet_67_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_67;
-  static const unsigned long _tokenSet_68_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_68;
-  static const unsigned long _tokenSet_69_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_69;
-  static const unsigned long _tokenSet_70_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_70;
-  static const unsigned long _tokenSet_71_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_71;
-  static const unsigned long _tokenSet_72_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_72;
-  static const unsigned long _tokenSet_73_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_73;
-  static const unsigned long _tokenSet_74_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_74;
-  static const unsigned long _tokenSet_75_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_75;
-  static const unsigned long _tokenSet_76_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_76;
-  static const unsigned long _tokenSet_77_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_77;
-  static const unsigned long _tokenSet_78_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_78;
-  static const unsigned long _tokenSet_79_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_79;
-  static const unsigned long _tokenSet_80_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_80;
-  static const unsigned long _tokenSet_81_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_81;
-  static const unsigned long _tokenSet_82_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_82;
-  static const unsigned long _tokenSet_83_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_83;
-  static const unsigned long _tokenSet_84_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_84;
-  static const unsigned long _tokenSet_85_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_85;
-  static const unsigned long _tokenSet_86_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_86;
-  static const unsigned long _tokenSet_87_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_87;
-  static const unsigned long _tokenSet_88_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_88;
-  static const unsigned long _tokenSet_89_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_89;
-  static const unsigned long _tokenSet_90_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_90;
-  static const unsigned long _tokenSet_91_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_91;
-  static const unsigned long _tokenSet_92_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_92;
-  static const unsigned long _tokenSet_93_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_93;
-  static const unsigned long _tokenSet_94_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_94;
-  static const unsigned long _tokenSet_95_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_95;
-  static const unsigned long _tokenSet_96_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_96;
-  static const unsigned long _tokenSet_97_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_97;
-  static const unsigned long _tokenSet_98_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_98;
-  static const unsigned long _tokenSet_99_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_99;
-  static const unsigned long _tokenSet_100_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_100;
-  static const unsigned long _tokenSet_101_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_101;
-  static const unsigned long _tokenSet_102_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_102;
-  static const unsigned long _tokenSet_103_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_103;
-  static const unsigned long _tokenSet_104_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_104;
-  static const unsigned long _tokenSet_105_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_105;
-  static const unsigned long _tokenSet_106_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_106;
-  static const unsigned long _tokenSet_107_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_107;
-  static const unsigned long _tokenSet_108_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_108;
-  static const unsigned long _tokenSet_109_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_109;
-  static const unsigned long _tokenSet_110_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_110;
-  static const unsigned long _tokenSet_111_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_111;
-  static const unsigned long _tokenSet_112_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_112;
-  static const unsigned long _tokenSet_113_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_113;
-  static const unsigned long _tokenSet_114_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_114;
-  static const unsigned long _tokenSet_115_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_115;
-  static const unsigned long _tokenSet_116_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_116;
-  static const unsigned long _tokenSet_117_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_117;
-  static const unsigned long _tokenSet_118_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_118;
-  static const unsigned long _tokenSet_119_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_119;
-  static const unsigned long _tokenSet_120_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_120;
-  static const unsigned long _tokenSet_121_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_121;
-  static const unsigned long _tokenSet_122_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_122;
-  static const unsigned long _tokenSet_123_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_123;
-  static const unsigned long _tokenSet_124_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_124;
-  static const unsigned long _tokenSet_125_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_125;
-  static const unsigned long _tokenSet_126_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_126;
-  static const unsigned long _tokenSet_127_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_127;
-  static const unsigned long _tokenSet_128_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_128;
-  static const unsigned long _tokenSet_129_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_129;
-  static const unsigned long _tokenSet_130_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_130;
-  static const unsigned long _tokenSet_131_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_131;
-  static const unsigned long _tokenSet_132_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_132;
-  static const unsigned long _tokenSet_133_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_133;
-  static const unsigned long _tokenSet_134_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_134;
-  static const unsigned long _tokenSet_135_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_135;
-  static const unsigned long _tokenSet_136_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_136;
-  static const unsigned long _tokenSet_137_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_137;
-  static const unsigned long _tokenSet_138_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_138;
-  static const unsigned long _tokenSet_139_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_139;
-  static const unsigned long _tokenSet_140_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_140;
-  static const unsigned long _tokenSet_141_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_141;
-  static const unsigned long _tokenSet_142_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_142;
-  static const unsigned long _tokenSet_143_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_143;
-  static const unsigned long _tokenSet_144_data_[];
-  static const ANTLR_USE_NAMESPACE(antlr) BitSet _tokenSet_144;
-};
-
-#endif /*INC_CPPParser_hpp_*/
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPPSymbol.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/CPPSymbol.hpp
deleted file mode 100644
index 7611e11..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPPSymbol.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * Requires PCCTS 1.32b4 or higher to get past ANTLR.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/* 1999-2005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-#ifndef CPPSymbol_hpp
-#define CPPSymbol_hpp
-
-#include "DictEntry.hpp"
-
-class CPPSymbol : public DictEntry {
- public:
-  enum ObjectType {
-    otInvalid = 0,
-    otFunction = 1,
-    otVariable,
-    otTypedef,
-    otStruct,
-    otUnion,
-    otEnum,
-    otClass,
-    otTypename = 10,
-    otNonTypename = 11
-  };
-
-  enum ObjectFunction { ofNormal = 0, ofAddress = 1, ofPointer };
-
- protected:
-  ObjectType type;
-  ObjectFunction function;  // Not fully used yet
-
- public:
-  CPPSymbol() {}
-  CPPSymbol(const char *k, ObjectType ot = otInvalid,
-            ObjectFunction of = ofNormal)
-      : DictEntry(k) {
-    type = ot;
-    function = of;
-  }
-
-  void setType(ObjectType t) { type = t; }
-
-  ObjectType getType() { return type; }
-
-  void setFunction(ObjectFunction f) { function = f; }
-
-  ObjectFunction getFunction() { return function; }
-};
-
-#endif
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/CPP_parser.g b/contrib/pdxautoserializer/src/impl/CPPParser/CPP_parser.g
deleted file mode 100755
index a3ee7e8..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/CPP_parser.g
+++ /dev/null
@@ -1,2646 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * VERSION 1.2
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/* 2001-2002
- * Version 1.0
- * This C++ grammar file has been converted from PCCTS to run under
- *  ANTLR to generate lexer and parser in C++ code by
- *  Jianguo Zuo and David Wigg at
- *  The Centre for Systems and Software Engineering
- *  London South Bank University
- *  London, UK.
- *
- */
-/* 2003
- * Version 2.0 was published by David Wigg in September 2003
- */
-/* 2004
- * Version 3.0 July 2004
- * This is version 3.0 of the C++ grammar definition for ANTLR to
- *  generate lexer and parser in C++ code updated by
- *  David Wigg at
- *  The Centre for Systems and Software Engineering
- *  London South Bank University
- *  London, UK.
- */
-/* 2005
- * Version 3.1 November 2005
- * Updated by David Wigg at London South Bank University
- *
- * wiggjd@bcs.ac.uk
- * blackse@lsbu.ac.uk
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-header
-{
-  // File generated from CPP_parser.g
-  // Version 3.1 November 2005
-  // This file is best viewed in courier font with tabs set to 4 spaces
-  //
-  // The statements in this block appear in both CPPLexer.hpp and CPPParser.hpp
-#include <stdio.h>
-#include <string.h>
-#include "antlr/CharScanner.hpp"
-#include "CPPDictionary.hpp"
-
-  // Defined in main.cpp
-  extern void process_line_directive(const char *, const char *);
-
-  // Declared in main.cpp
-  extern int deferredLineCount;
-}
-
-options
-{
-  language = "Cpp";
-}
-
-{
-  // File generated from CPP_parser.g
-  // Version 3.1 November 2005
-  // This file is best viewed in courier font with tabs set to 4 spaces
-  //
-  // The statements in this block appear only in CPPParser.cpp and not in CPPLexer.cpp
-
-  // These constants used in the previous version (3.0 July 2004) have now been replaced by the following,
-  //ID_VAR_NAME is now CPPSymbol::otVariable
-  //ID_FUN_NAME is now CPPSymbol::otFunction
-  //ID_INPUT_PARAMETER is now not used
-  //ID_CLASS_DEF is now CPPSymbol::otClass
-  //ID_SYSTEM_FUNCTION is now not used
-  //ID_CONST_DECL is now not used
-  //ID_TYPEDEF_VAR is now CPPSymbol::otTypedef
-
-  int statementTrace = 2;  // Used to control selected (level) tracing (see support.cpp)
-  // 1 Shows which external and member statements selected
-  // 2 Shows above plus all declarations/definitions
-  // 3 reserved for future use
-  // 4 and above available for user
-
-  void CPPParser::init()
-  {
-    antlrTrace(false);  // This is a dynamic trace facility for use with -traceParser etc.
-    // It requires modification in LLkParser.cpp and LLkParser.hpp
-    // otherwise it should be commented out (see MyReadMe.txt)
-    // true shows antlr trace (or can be set and reset during parsing)
-    // false stops showing antlr trace
-    // Provided the parser is always generated with -traceParser this
-    // facility allows trace output to be turned on or off by changing
-    // the setting here from false to true or vice versa and then
-    // recompiling and linking CPPParser only thus avoiding the need
-    // to use antlr.Tool to re-generate the lexer and parser again
-    // with (or without) -traceParser.
-    // Antlr trace can also be turned on and off dynamically using
-    // antlrTrace_on or antlrTrace_off statements inserted into the
-    // source code being parsed (See below).
-
-    // Creates a dictionary to hold symbols with 4001 buckets, 200 scopes and 800,000 characters
-    // These can be changed to suit the size of program(s) being parsed
-    symbols = new CPPDictionary(4001, 200, 800000);
-
-    // Set template parameter scope - Not used at present
-    templateParameterScope = symbols->getCurrentScopeIndex();  // Set template parameter scope to 0
-
-    symbols->saveScope();  // Advance currentScope from 0 to 1
-    // Set "external" scope for all types
-    externalScope = symbols->getCurrentScopeIndex();  // Set "external" scope to 1 for types
-
-    // Declare predefined scope "std" in external scope
-    CPPSymbol *a = new CPPSymbol("std", CPPSymbol::otTypedef);
-    symbols->define("std", a);
-
-    symbols->saveScope();  // Advance currentScope from 1 to 2 (and higher) for all other symbols
-    // treated as locals
-
-    // Global flags to allow for nested declarations
-    _td = false;    // For typedef
-    _fd = false;    // For friend
-    _sc = scInvalid;  // For StorageClass
-    _tq = tqInvalid;  // For TypeQualifier
-    _ts = tsInvalid;  // For TypeSpecifier
-    _fs = fsInvalid;  // For FunctionSpecifier
-
-    functionDefinition = 0;
-    qualifierPrefix[0] = '\0';
-    enclosingClass = (char *) "";
-    assign_stmt_RHS_found = 0;
-    in_parameter_list = false;
-    K_and_R = false;  // used to distinguish old K & R parameter definitions
-    in_return = false;
-    is_address = false;
-    is_pointer = false;
-  }
-
-}  // End of CPPParser.cpp block
-
-class CPPParser extends Parser;
-
-options
-{
-  k = 2;
-  exportVocab = STDC;
-  buildAST =false;
-  codeGenMakeSwitchThreshold = 2;
-  codeGenBitsetTestThreshold = 3;
-}
-
-{
-  public:
-#define CPPParser_MaxQualifiedItemSize 500
-
-    // These codes are not stored with symbol names in CPPSymbol,
-    //   but they are available for development
-    // Can't bitwise-OR enum elements together, this must be an int
-    typedef unsigned long TypeSpecifier;   // note: must be at least 16 bits
-    typedef unsigned long TypeQualifier;
-
-#define tsInvalid   0x0
-#define tsVOID      0x1
-#define tsCHAR      0x2
-#define tsSHORT     0x4
-#define tsINT       0x8
-#define tsLONG      0x10
-#define tsFLOAT     0x20
-#define tsDOUBLE    0x40
-#define tsSIGNED    0x80
-#define tsUNSIGNED  0x100
-#define tsTYPEID    0x200
-#define tsSTRUCT    0x400
-#define tsENUM      0x800
-#define tsUNION     0x1000
-#define tsCLASS     0x2000
-#define tsWCHAR_T   0x4000
-#define tsBOOL      0x8000
-
-
-#define tqInvalid   0x0
-#define tqCONST     0x1
-#define tqVOLATILE  0x2
-#define tqGFEXCLUDE 0x4
-#define tqGFINCLUDE 0x8
-#define tqGFID      0x10
-#define tqGFUNREAD  0x20
-
-    enum StorageClass
-    {
-      scInvalid=0, scAUTO=1, scREGISTER,
-      scSTATIC, scEXTERN, scMUTABLE
-    };
-
-    enum FunctionSpecifier
-    {
-      fsInvalid=0,
-      fsVIRTUAL, fsINLINE, fsEXPLICIT, fsFRIEND
-    };
-
-    // JEL 3/26/96 changed to allow ORing of values
-    // DW 10/04/05 These codes are stored with the item in CPPSymbol in the dictionary See declaratorID
-    typedef int QualifiedItem;
-#define qiInvalid     0x0
-#define qiType        0x1  // includes enum, class, typedefs, namespace
-#define qiDtor        0x2
-#define qiCtor        0x4
-#define qiOperator    0x8
-#define qiPtrMember   0x10
-#define qiVar         0x20
-#define qiFun         0x40
-#define qiNamespace   0x50
-
-  protected:
-    // Symbol table management stuff
-    CPPDictionary *symbols;
-    int templateParameterScope;
-    int externalScope;
-    int anyType;
-    int anyNonType;
-
-    bool _td;      // For typedef
-    bool _fd;      // For friend
-    StorageClass _sc;  // For storage class
-    TypeQualifier _tq;  // For type qualifier
-    TypeSpecifier _ts;  // For type specifier
-    FunctionSpecifier _fs;  // For declaration specifier
-
-    int functionDefinition;  // 0 = Function definition not being parsed
-    // 1 = Parsing function name
-    // 2 = Parsing function parameter list
-    // 3 = Parsing function block
-
-    char qualifierPrefix[CPPParser_MaxQualifiedItemSize+1];
-    char *enclosingClass;
-    int assign_stmt_RHS_found;
-    bool in_parameter_list;
-    bool K_and_R;  // used to distinguish old K & R parameter definitions
-    bool in_return;
-    bool is_address;
-    bool is_pointer;
-
-    // Limit lookahead for qualifiedItemIs()
-    enum
-    {
-      MaxTemplateTokenScan = 200
-    };
-
-  public:
-    void init();
-
-  protected:
-    // Semantic interface in Support.cpp;
-    // You could subclass and redefine these functions
-    // so you don't have to mess with the grammar itself.
-
-    // Symbol stuff
-    virtual int qualifiedItemIsOneOf(QualifiedItem qiFlags, int lookahead_offset=0);
-    virtual QualifiedItem qualifiedItemIs(int lookahead_offset=0);
-    virtual int skipTemplateQualifiers(int& kInOut);
-    virtual int skipNestedParens(int& kInOut);
-    virtual int scopedItem(int k=1);
-    virtual int finalQualifier(int k=1);
-    virtual int isTypeName(const char *s);
-    virtual int isClassName(const char *s);
-    virtual void end_of_stmt();
-
-    // Scoping stuff
-    virtual void enterNewLocalScope();
-    virtual void exitLocalScope();
-    virtual void enterExternalScope();
-    virtual void exitExternalScope();
-
-	// namespaceEnd stuff
-	virtual void exitNamespaceScope();
-
-    // Aggregate stuff
-    virtual void classForwardDeclaration(TypeSpecifier, FunctionSpecifier,const char *);
-    virtual void beginClassDefinition(TypeSpecifier,const char *);
-    virtual void endClassDefinition();
-    virtual void beginEnumDefinition(const char *);
-    virtual void endEnumDefinition();
-    virtual void enumElement(const char *);
-
-    // Declaration and definition stuff
-    virtual void declarationSpecifier(bool,bool,StorageClass,TypeQualifier,TypeSpecifier,FunctionSpecifier);
-    virtual void beginDeclaration();
-    virtual void endDeclaration();
-    virtual void beginConstructorDeclaration(const char *);
-    virtual void endConstructorDeclaration();
-    virtual void beginDestructorDeclaration(const char *);
-    virtual void endDestructorDeclaration();
-    virtual void beginParameterDeclaration();
-    virtual void beginFieldDeclaration();
-    virtual void beginFunctionDefinition();
-    virtual void endFunctionDefinition();
-    virtual void functionParameterList();
-    virtual void functionEndParameterList(int def);
-    virtual void beginConstructorDefinition();
-    virtual void endConstructorDefinition();
-    virtual void beginDestructorDefinition();
-    virtual void endDestructorDefinition();
-
-    // Declarator stuff
-    virtual void declaratorID(const char *, QualifiedItem);  // This stores new symbol with its type.
-    virtual void declaratorArray();
-    virtual void declaratorParameterList(int def);
-    virtual void declaratorEndParameterList(int def);
-
-    // template stuff
-    virtual void templateTypeParameter(const char *);
-    virtual void beginTemplateDeclaration();
-    virtual void endTemplateDeclaration();
-    virtual void beginTemplateDefinition();
-    virtual void endTemplateDefinition();
-    virtual void beginTemplateParameterList();
-    virtual void endTemplateParameterList();
-
-    // exception stuff
-    virtual void exceptionBeginHandler();
-    virtual void exceptionEndHandler();
-    virtual void panic(const char *);
-
-    // myCode functions ready for overriding in MyCode subclass
-    // Include application code functions here
-    virtual void myCode_pre_processing(int, char *[]);
-    virtual void myCode_post_processing();
-    virtual void myCode_end_of_stmt();
-    virtual void myCode_function_direct_declarator(const char *);
-
-    // Auto-serializer specific stuff
-    virtual void gfArraySize(const char* id) { }
-    virtual void gfArrayElemSize(const char* id) { }
-}
-
-translation_unit
-   :  {enterExternalScope();}
-      (external_declaration)+ EOF
-      {exitExternalScope();}
-   ;
-
-external_declaration
-  {char *s;
-   K_and_R = false;
-   FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-  }
-  :
-  (
-    // Template explicit specialisation
-    ("template" LESSTHAN GREATERTHAN)=>
-    {if(statementTrace>=1)
-      printf("%d external_declaration template explicit-specialisation\n",LT(1)->getLine());
-    }
-    "template" LESSTHAN GREATERTHAN external_declaration
-  |
-    // All typedefs
-    ("typedef")=>
-    (
-      ("typedef" class_specifier)=>
-      {if(statementTrace>=1)
-        printf("%d external_declaration Typedef class type\n",LT(1)->getLine());
-      }
-      "typedef" class_decl_or_def[fs] {_td = true;} (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      ("typedef" "enum")=>
-      {if(statementTrace>=1)
-        printf("%d external_declaration Typedef enum type\n",LT(1)->getLine());
-      }
-      "typedef" enum_specifier {_td = true;} (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      (declaration_specifiers function_declarator[0] SEMICOLON)=>  // DW 11/02/05 This may not be possible
-      {if(statementTrace>=1)
-        printf("%d external_declaration Typedef function type\n",LT(1)->getLine());
-      }
-      declaration
-    |
-      {if(statementTrace>=1)
-        printf("%d external_declaration Typedef variable type\n",LT(1)->getLine());
-      }
-      declaration
-    )
-  |
-    // Class template declaration or definition
-    (template_head (fs = function_specifier)* class_specifier)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Templated class decl or def\n",LT(1)->getLine());
-    }
-    template_head (fs = function_specifier)* class_decl_or_def[fs] (init_declarator_list)? SEMICOLON {end_of_stmt();}  // declaration
-  |
-    // Enum definition (don't want to backtrack over this in other alts)
-    ("enum" (ID)? LCURLY)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Enum definition\n",LT(1)->getLine());
-    }
-    enum_specifier (init_declarator_list)? SEMICOLON {end_of_stmt();}
-  |
-    // Destructor definition (templated or non-templated)
-    ((template_head)? dtor_head[1] LCURLY)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Destructor definition\n",LT(1)->getLine());
-    }
-    (template_head)? dtor_head[1] dtor_body
-  |
-    // Constructor definition (non-templated)
-    // JEL 4/3/96 Added predicate that works, once the
-    // restriction is added that ctor cannot be virtual
-    // and ctor_declarator uses a more restrictive id
-    ( (options {warnWhenFollowAmbig = false;}:
-       ctor_decl_spec)?
-      {qualifiedItemIsOneOf(qiCtor)}?
-    )=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Constructor definition\n",LT(1)->getLine());
-    }
-    ctor_definition
-  |
-    // User-defined type cast
-    (("inline")? scope_override conversion_function_decl_or_def)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Operator function\n",LT(1)->getLine());
-    }
-    ("inline")? s = scope_override conversion_function_decl_or_def
-  |
-    // Function declaration
-    (declaration_specifiers function_declarator[0] SEMICOLON)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Function declaration\n",LT(1)->getLine());
-    }
-    declaration_specifiers function_declarator[0] SEMICOLON {end_of_stmt();}
-  |
-    // Function definition
-    (declaration_specifiers function_declarator[1] LCURLY)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Function definition\n",LT(1)->getLine());
-    }
-    function_definition
-  |
-    // K & R Function definition
-    (declaration_specifiers function_declarator[1] declaration)=>
-    {K_and_R = true;
-     if (statementTrace>=1)
-      printf("%d external_declaration K & R function definition\n",LT(1)->getLine());
-    }
-    function_definition
-  |
-    // K & R Function definition with int return assumed
-    (function_declarator[1] declaration)=>
-    {K_and_R = true;
-     if (statementTrace>=1)
-      printf("%d external_declaration K & R function definition without return type\n",LT(1)->getLine());
-    }
-    function_definition
-  |
-    // Class declaration or definition
-    (("friend")? (fs = function_specifier)* class_specifier)=>
-    {if (statementTrace>=1)
-      printf("%d external_declaration Class decl or def\n",LT(1)->getLine());
-    }
-    ("friend")? (fs = function_specifier)* class_decl_or_def[fs] (init_declarator_list)? SEMICOLON {end_of_stmt();}
-  |
-    // Templated functions and constructors matched here.
-    {beginTemplateDeclaration();}
-    template_head
-    (
-      // templated forward class decl, init/decl of static member in template
-      (declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();})=>
-      {if (statementTrace>=1)
-        printf("%d external_declaration Templated class forward declaration\n",LT(1)->getLine());
-      }
-      declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      // Templated function declaration
-      (declaration_specifiers function_declarator[0] SEMICOLON)=>
-      {if (statementTrace>=1)
-        printf("%d external_declaration Templated function declaration\n",LT(1)->getLine());
-      }
-      declaration
-    |
-      // Templated function definition
-      (declaration_specifiers function_declarator[1] LCURLY)=>
-      {if (statementTrace>=1)
-        printf("%d external_declaration_10c Templated function definition\n",LT(1)->getLine());
-      }
-      function_definition
-    |
-      // Templated constructor definition
-            // JEL 4/3/96 Added predicate that works once the
-            // restriction is added that ctor cannot be virtual
-      ( ctor_decl_spec
-        {qualifiedItemIsOneOf(qiCtor)}?
-      )=>
-      {if (statementTrace>=1)
-        printf("%d external_declaration Templated constructor definition\n",LT(1)->getLine());
-      }
-      ctor_definition
-    )
-    {endTemplateDeclaration();}
-  |
-    // Namespace definition
-    {if (statementTrace>=1)
-      printf("%d external_declaration Namespace definition\n",LT(1)->getLine());
-    }
-    "namespace" namespace_definition
-  |
-    // Anything else
-    {if (statementTrace>=1)
-      printf("%d external_declaration Declaration\n",LT(1)->getLine());
-    }
-    declaration
-  |
-    // Semicolon
-    {if (statementTrace>=1)
-      printf("%d external_declaration Semicolon\n",LT(1)->getLine());
-    }
-    SEMICOLON {end_of_stmt();}
-  |
-    // The next two entries may be used for debugging
-    // Use this statement in the source code to turn antlr trace on (See note above)
-    "antlrTrace_on" {antlrTrace(true);}
-  |
-    // Use this statement in the source code to turn antlr trace off (See note above)
-    "antlrTrace_off" {antlrTrace(false);}
-  )
-  ;  // end of external_declaration
-
-//namespace_definition
-namespace_definition
-  :
-    (ns:ID{declaratorID((ns->getText()).data(),qiNamespace);})?
-    LCURLY
-    {enterNewLocalScope();}
-    (external_declaration)*
-    {exitNamespaceScope();exitLocalScope();}
-    RCURLY
-  ;
-
-//namespace_alias_definition
-namespace_alias_definition
-  {char *qid;}
-  :
-    "namespace"
-    ns2:ID {declaratorID((ns2->getText()).data(),qiNamespace);}
-    ASSIGNEQUAL qid = qualified_id SEMICOLON {end_of_stmt();}
-  ;
-
-member_declaration
-  {char *q;
-   FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-  }
-  :
-  (
-    // Template explicit specialisation
-    ("template" LESSTHAN GREATERTHAN)=>
-    {if(statementTrace>=1)
-      printf("%d member_declaration Template explicit-specialisation\n",LT(1)->getLine());
-    }
-    "template" LESSTHAN GREATERTHAN member_declaration
-  |
-    // All typedefs
-    ("typedef")=>
-    (
-      ("typedef" class_specifier)=>
-      {if(statementTrace>=1)
-        printf("%d member_declaration Typedef class type\n",LT(1)->getLine());
-      }
-      "typedef" class_decl_or_def[fs] {_td = true;}(init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      ("typedef" "enum")=>
-      {if(statementTrace>=1)
-        printf("%d member_declaration Typedef enum type\n",LT(1)->getLine());
-      }
-      "typedef" enum_specifier {_td = true;} (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      (declaration_specifiers function_declarator[0] SEMICOLON)=>  // DW 11/02/05 This may not be possible member declaration
-      {if(statementTrace>=1)
-        printf("%d member_declaration Typedef function type\n",LT(1)->getLine());
-      }
-      declaration
-    |
-      {if(statementTrace>=1)
-        printf("%d member_declaration Typedef variable type\n",LT(1)->getLine());
-      }
-      declaration
-    )
-  |
-    // Templated class declaration or definition
-    (template_head (fs = function_specifier)* class_specifier)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Templated class decl or def\n",LT(1)->getLine());
-    }
-    template_head (fs = function_specifier)* class_decl_or_def[fs] (init_declarator_list)? SEMICOLON {end_of_stmt();}  // declaration
-  |
-    // Enum definition (don't want to backtrack over this in other alts)
-    ("enum" (ID)? LCURLY)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Enum definition\n",LT(1)->getLine());
-    }
-    enum_specifier (member_declarator_list)? SEMICOLON {end_of_stmt();}
-  |
-    // Constructor declarator
-    ( ctor_decl_spec
-      {qualifiedItemIsOneOf(qiCtor)}?
-      ctor_declarator[0] SEMICOLON
-    )=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Constructor declarator\n",LT(1)->getLine());
-    }
-    ctor_decl_spec ctor_declarator[0] SEMICOLON {end_of_stmt();}
-  |
-    // JEL Predicate to distinguish ctor from function
-    // This works now that ctor cannot have VIRTUAL
-    // It unfortunately matches A::A where A is not enclosing
-    // class -- this will have to be checked semantically
-    // Constructor definition
-    ( ctor_decl_spec
-      {qualifiedItemIsOneOf(qiCtor)}?
-      ctor_declarator[1]
-      (COLON        // DEFINITION :ctor_initializer
-      |LCURLY       // DEFINITION (compound Statement) ?
-      )
-    )=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Constructor definition\n",LT(1)->getLine());
-    }
-    ctor_definition
-  |
-    // No template_head allowed for dtor member
-    // Backtrack if not a dtor (no TILDE)
-    // Destructor declaration
-    (dtor_head[0] SEMICOLON)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Destructor declaration\n",LT(1)->getLine());
-    }
-    dtor_head[0] SEMICOLON {end_of_stmt();}
-  |
-    // No template_head allowed for dtor member
-    // Backtrack if not a dtor (no TILDE)
-    // Destructor definition
-    (dtor_head[1] LCURLY)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Destructor definition\n",LT(1)->getLine());
-    }
-    dtor_head[1] dtor_body
-  |
-    // Function declaration
-    (declaration_specifiers function_declarator[0] SEMICOLON)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Function declaration\n",LT(1)->getLine());
-    }
-    declaration_specifiers function_declarator[0] SEMICOLON {end_of_stmt();}
-  |
-    // Function definition
-    (declaration_specifiers function_declarator[1] LCURLY)=>
-    {beginFieldDeclaration();
-     if (statementTrace>=1)
-      printf("%d member_declaration Function definition\n",LT(1)->getLine());
-    }
-    function_definition
-  |
-    // User-defined type cast
-    (("inline")? conversion_function_decl_or_def)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Operator function\n",LT(1)->getLine());
-    }
-    ("inline")? conversion_function_decl_or_def
-  |
-    // Hack to handle decls like "superclass::member",
-    // to redefine access to private base class public members
-    // Qualified identifier
-    (qualified_id SEMICOLON)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Qualified ID\n",LT(1)->getLine());
-    }
-    q = qualified_id SEMICOLON {end_of_stmt();}
-  |
-    // Member with a type (or just a type def?)
-    // A::T a(), ::T a, ::B a, void a, E a (where E is the enclosing class)
-    (declaration_specifiers (init_declarator_list)? SEMICOLON)=>
-    {beginFieldDeclaration();
-     if (statementTrace>=1)
-      printf("%d member_declaration Declaration\n",LT(1)->getLine());
-    }
-    declaration
-  |
-    // Class declaration or definition
-    (("friend")? (fs = function_specifier)* class_specifier)=>
-    {if (statementTrace>=1)
-      printf("%d member_declaration Class decl or def\n",LT(1)->getLine());
-    }
-    ("friend")? (fs = function_specifier)* class_decl_or_def[fs] (init_declarator_list)? SEMICOLON {end_of_stmt();}
-  |
-    // Member without a type (I guess it can only be a function declaration or definition)
-    ((fs = function_specifier)* function_declarator[0] SEMICOLON)=>
-    {beginFieldDeclaration();
-     fprintf(stderr,"%d warning Function declaration found without return type\n",LT(1)->getLine());
-     if (statementTrace>=1)
-      printf("%d member_declaration Function declaration\n",LT(1)->getLine());
-    }
-    (fs = function_specifier)* function_declarator[0] SEMICOLON {end_of_stmt();}
-
-  |
-    // Member without a type (I guess it can only be a function definition)
-    {
-     fprintf(stderr,"%d warning Function definition found without return type\n",LT(1)->getLine());
-     if (statementTrace>=1)
-      printf("%d member_declaration Function definition without return type\n",LT(1)->getLine());
-    }
-    function_declarator[1] compound_statement {endFunctionDefinition();}
-  |
-    // Templated functions and constructors matched here.
-    {beginTemplateDeclaration();}
-    template_head
-    (
-      // templated forward class decl, init/decl of static member in template
-      (declaration_specifiers (init_declarator_list)? SEMICOLON)=>
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated forward declaration\n",LT(1)->getLine());
-      }
-      declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    |
-      // Templated function declaration
-      (declaration_specifiers function_declarator[0] SEMICOLON)=>
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated function declaration\n",LT(1)->getLine());
-      }
-      declaration
-    |
-      // Templated function definition
-      (declaration_specifiers function_declarator[1] LCURLY)=>
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated function definition\n",LT(1)->getLine());
-      }
-      function_definition
-    |
-      // Templated constructor definition
-      // JEL 4/3/96 Added predicate that works once the
-      // restriction is added that ctor cannot be virtual
-      (ctor_decl_spec {qualifiedItemIsOneOf(qiCtor)}?
-      )=>
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated constructor definition\n",LT(1)->getLine());
-      }
-      ctor_definition
-    |
-      // Templated operator function
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated operator function\n",LT(1)->getLine());
-      }
-      conversion_function_decl_or_def
-    |
-      // Templated class definition
-      {if (statementTrace>=1)
-        printf("%d member_declaration Templated class definition\n",LT(1)->getLine());
-      }
-      class_head declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    )
-    {endTemplateDeclaration();}
-  |
-    // Access specifier
-    {if (statementTrace>=1)
-      printf("%d member_declaration Access specifier\n",LT(1)->getLine());
-    }
-    access_specifier COLON
-  |
-    // Semicolon
-    {if (statementTrace>=1)
-      printf("%d member_declaration Semicolon\n",LT(1)->getLine());
-    }
-    SEMICOLON {end_of_stmt();}
-  |
-    // The next two entries may be used for debugging
-    // Use this statement in the source code to turn antlr trace on (See note above)
-    "antlrTrace_on" {antlrTrace(true);}
-  |
-    // Use this statement in the source code to turn antlr trace off (See note above)
-    "antlrTrace_off" {antlrTrace(false);}
-  )
-  ;  // end member_declaration
-
-//function_definition
-function_definition
-  :  // don't want next action as an init-action due to (...)=> caller
-  {
-  beginFunctionDefinition();
-  }
-  (  // Next line is equivalent to guarded predicate in PCCTS
-    // (SCOPE | ID)? => <<qualifiedItemIsOneOf(qiType|qiCtor)>>?
-    {( !(LA(1)==SCOPE||LA(1)==ID) || qualifiedItemIsOneOf(qiType|qiCtor) )}?
-    declaration_specifiers function_declarator[1]
-    ( options{warnWhenFollowAmbig = false;}:
-      (declaration)*  // Possible for K & R definition
-      {in_parameter_list = false;}
-    )?
-    compound_statement
-  |  // Next line is equivalent to guarded predicate in PCCTS
-    // (SCOPE | ID)? => <<qualifiedItemIsOneOf(qiPtrMember)>>?
-    //{( !(LA(1)==SCOPE||LA(1)==ID) || (qualifiedItemIsOneOf(qiPtrMember)) )}?
-    function_declarator[1]
-    ( options{warnWhenFollowAmbig = false;}:
-      (declaration)*  // Possible for K & R definition
-      {in_parameter_list = false;}
-    )?
-    compound_statement
-  )
-  {endFunctionDefinition();}
-  ;
-
-//declaration
-declaration
-  :
-    ("extern" StringLiteral)=>
-    linkage_specification
-  |
-    {beginDeclaration();}
-    declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();}
-    {endDeclaration();}
-  |
-    using_statement
-  ;
-
-//linkage_specification
-linkage_specification
-  :
-    "extern"
-    StringLiteral
-    (LCURLY (external_declaration)* RCURLY
-    |declaration
-    )
-  ;
-
-//class_head
-class_head
-  :  // Used only by predicates
-    ( "struct"
-    | "union"
-    | "class"
-    )
-    (ID
-      (LESSTHAN template_argument_list GREATERTHAN)?
-      (base_clause)?
-    )?
-    LCURLY
-  ;
-
-//declaration_specifiers
-declaration_specifiers
-  {// Locals
-  bool td = false;  // For typedef
-  bool fd = false;  // For friend
-  StorageClass sc = scInvalid;  // auto,register,static,extern,mutable
-  TypeQualifier tq = tqInvalid;  // const,volatile  // aka cv_qualifier See type_qualifier
-  TypeSpecifier ts = tsInvalid;  // char,int,double, etc., class,struct,union
-  FunctionSpecifier fs = fsInvalid;  // inline,virtual,explicit
-  }
-  :
-  {
-  // Global flags to allow for nested declarations
-  _td = false;    // For typedef
-  _fd = false;    // For friend
-  _sc = scInvalid;  // For StorageClass    // auto,register,static,extern,mutable
-  _tq = tqInvalid;  // For TypeQualifier  // aka cv_qualifier See type_qualifier
-  _ts = tsInvalid;  // For TypeSpecifier
-  _fs = fsInvalid;  // For FunctionSpecifier  // inline,virtual,explicit
-
-  }
-  ( (options {warnWhenFollowAmbig = false;}
-    : "typedef" {td=true;}
-    | "friend" {fd=true;}
-    | sc = storage_class_specifier  // auto,register,static,extern,mutable
-    | tq = type_qualifier    // const,volatile  // aka cv_qualifier See type_qualifier
-    | ts = class_specifier  // Only here for disambiguation
-    | "enum"          // Only here for disambiguation
-    | fs = function_specifier  // inline,virtual,explicit
-    | ("_stdcall"|"__stdcall")
-    | "GFEXCLUDE" {tq |= tqGFEXCLUDE; _tq |= tqGFEXCLUDE;}
-    | "GFINCLUDE" {tq |= tqGFINCLUDE; _tq |= tqGFINCLUDE;}
-    | "GFID"      {tq |= tqGFID; _tq |= tqGFID;}
-    | "GFUNREAD"      {tq |= tqGFUNREAD; _tq |= tqGFUNREAD;}
-    | "GFARRAYSIZE" LPAREN gfArr:ID RPAREN {gfArraySize(gfArr->getText().data());}
-	| "GFARRAYSIZES" LPAREN gfArrList:StringLiteral RPAREN {gfArraySize(gfArrList->getText().data());}
-    | "GFARRAYELEMSIZE" LPAREN gfArrElem:ID RPAREN {gfArrayElemSize(gfArrElem->getText().data());}
-    )*
-    ts = type_specifier
-  )
-  {declarationSpecifier(td,fd,sc,tq,ts,fs);}
-  ;
-
-//storage_class_specifier
-storage_class_specifier returns [CPPParser::StorageClass sc = scInvalid]
-  : "auto" {sc = scAUTO;}
-  | "register" {sc = scREGISTER;}
-  | "static" {sc = scSTATIC;}
-  | "extern" {sc = scEXTERN;}
-  | "mutable" {sc = scMUTABLE;}
-  ;
-
-//function_specifier
-function_specifier returns [CPPParser::FunctionSpecifier fs = fsInvalid]
-  : ("inline"|"_inline"|"__inline") {fs = fsINLINE;}
-  | "virtual" {fs = fsVIRTUAL;}
-  | "explicit" {fs = fsEXPLICIT;}
-  ;
-
-//type_specifier
-type_specifier returns [CPPParser::TypeSpecifier ts = tsInvalid]
-  {
-   TypeQualifier tq = tqInvalid;
-  }
-  :
-    ts = simple_type_specifier
-  ;
-
-//simple_type_specifier
-simple_type_specifier returns [CPPParser::TypeSpecifier ts = tsInvalid]
-  {char *s;
-   ts = tsInvalid;
-  }
-  : ( {qualifiedItemIsOneOf(qiType|qiCtor)}?
-       s = qualified_type
-    |
-      "typename"
-       s = qualified_type
-      {declaratorID(s,qiType);}  // This stores typename name in dictionary
-    |
-      ( "char" {ts |= tsCHAR;}
-      | "wchar_t" {ts |= tsWCHAR_T;}
-      | "bool" {ts |= tsBOOL;}
-      | "short" {ts |= tsSHORT;}
-      | "int" {ts |= tsINT;}
-      | ("_int8"|"__int8"|"int8_t") {ts |= tsINT;}
-      | ("_int16"|"__int16"|"int16_t") {ts |= tsINT;}
-      | ("_int32"|"__int32"|"int32_t") {ts |= tsLONG;}
-      | ("_int64"|"__int64"|"int64_t") {ts |= tsLONG;}
-      | ("uint8_t") {ts |= (tsUNSIGNED | tsINT);}
-      | ("uint16_t") {ts |= (tsUNSIGNED | tsINT);}
-      | ("uint32_t") {ts |= (tsUNSIGNED | tsLONG);}
-      | ("uint64_t") {ts |= (tsUNSIGNED | tsLONG);}
-      | ("_w64"|"__w64") {ts |= tsLONG;}
-      | "long" {ts |= tsLONG;}
-      | "signed" {ts |= tsSIGNED;}
-      | "unsigned" {ts |= tsUNSIGNED;}
-      | "float" {ts |= tsFLOAT;}
-      | "double" {ts |= tsDOUBLE;}
-      | "void" {ts |= tsVOID;}
-      | ("_declspec"|"__declspec") LPAREN ID RPAREN
-      )+
-    //|
-    // Possible fix towards allowing us to parse *.cpp files directly
-    //(qualified_type qualified_id)=> s = qualified_type {ts |= tsTYPEID;}
-    //{printf("simple_type_specifier third option entered\n");}
-    )
-  ;
-
-//qualified_type
-qualified_type returns [char *q = NULL]
-  {char *s; static char qitem[CPPParser_MaxQualifiedItemSize+1];}
-  :
-    // JEL 3/29/96 removed this predicate and moved it upwards to
-    // simple_type_specifier.  This was done to allow parsing of ~ID to
-    // be a unary_expression, which was never reached with this
-    // predicate on
-    // {qualifiedItemIsOneOf(qiType|qiCtor)}?
-
-    s = scope_override
-    id:ID
-    (options {warnWhenFollowAmbig = false;}:
-     LESSTHAN template_argument_list GREATERTHAN
-    )?
-    {
-     strcpy(qitem, s);
-     strcat(qitem, (id->getText()).data());
-     q = qitem;
-    }
-  ;
-
-//class_specifier
-class_specifier returns [CPPParser::TypeSpecifier ts = tsInvalid]
-  :
-    ( "class" {ts = tsCLASS;}
-    | "struct" {ts = tsSTRUCT;}
-    | "union" {ts = tsUNION;}
-    )
-  ;
-
-//type_qualifier
-type_qualifier returns [CPPParser::TypeQualifier tq = tqInvalid] // aka cv_qualifier
-  :
-    ( ("const"|"__const") {tq = tqCONST;}
-    | ("volatile"|"__volatile__") {tq = tqVOLATILE;}
-    )
-  ;
-
-//class_prefix
-class_prefix
-  :
-   (("_declspec"!|"__declspec"!) LPAREN! expression RPAREN!)* 
-   {
-   }
-  ;
-  
-
-//class_decl_or_def
-class_decl_or_def [FunctionSpecifier fs]
-  {char *saveClass;
-   char *id;
-   TypeSpecifier ts = tsInvalid;  // Available for use
-  }
-  :
-    ( "class" {ts = tsCLASS;}
-    | "struct" {ts = tsSTRUCT;}
-    | "union" {ts = tsUNION;}
-    )
-    class_prefix // for decltypes
-    ("GFIGNORE" LPAREN expression RPAREN {})*
-    ( id = qualified_id
-      (options{generateAmbigWarnings = false;}:
-        (SEMICOLON)=>
-        // Empty
-        {classForwardDeclaration(ts, fs, id);}
-      |
-        {saveClass = enclosingClass;
-         enclosingClass = symbols->strdup(id);
-        }
-        (base_clause)?
-        LCURLY
-        {beginClassDefinition(ts, id);}  // This stores class name in dictionary
-        (member_declaration)*
-        {endClassDefinition();}
-        RCURLY
-        {enclosingClass = saveClass;}
-      )
-    |
-      LCURLY
-      {saveClass = enclosingClass; enclosingClass = (char *) "__anonymous";}
-      {beginClassDefinition(ts, "anonymous");}  // This stores "anonymous" name in dictionary
-      (member_declaration)*
-      {endClassDefinition();}
-      RCURLY
-      {enclosingClass = saveClass;}
-    )
-  ;
-
-//base_clause
-base_clause
-  :
-    COLON base_specifier (COMMA base_specifier)*
-  ;
-
-//base_specifier
-base_specifier
-  {char *qt;}
-  :
-    ( "virtual" (access_specifier)? qt = qualified_type
-    | access_specifier ("virtual")? qt = qualified_type
-    | qt = qualified_type
-    )
-  ;
-
-//access_specifier
-access_specifier
-  :
-    ( "public"
-    | "protected"
-    | "private"
-    )
-  ;
-
-//enum_specifier
-enum_specifier
-  {char *id;}
-  :
-    "enum"
-    (
-      LCURLY enumerator_list RCURLY
-    |
-      id = qualified_id
-      {beginEnumDefinition(id);}  // This stores id name as an enum type in dictionary
-      (LCURLY enumerator_list RCURLY)?
-      {endEnumDefinition();}
-    )
-  ;
-
-//enumerator_list
-enumerator_list
-  :
-    enumerator (COMMA enumerator)*
-  ;
-
-//enumerator
-enumerator
-  :
-    id:ID (ASSIGNEQUAL constant_expression)?
-    {enumElement((id->getText()).data());}
-  ;
-
-/* This matches a generic qualified identifier ::T::B::foo
- * (including OPERATOR).
- * It might be a good idea to put T::~dtor in here
- * as well, but id_expression in expr.g puts it in manually.
- * Maybe not, 'cause many people use this assuming only A::B.
- * How about a 'qualified_complex_id'?
- */
-//qualified_id
-qualified_id returns [char *q = NULL]
-  {
-  char *so = NULL;
-  static char qitem[CPPParser_MaxQualifiedItemSize+1];
-  }
-  :
-    so = scope_override
-    {strcpy(qitem, so);}
-    (
-      id:ID
-      (options{warnWhenFollowAmbig = false;}:
-       LESSTHAN template_argument_list GREATERTHAN)?
-      {strcat(qitem,(id->getText()).data());}
-    |
-      OPERATOR optor
-      {strcat(qitem,"operator"); strcat(qitem,"NYI");}
-    |
-      "this"  // DW 21/07/03 fix to pass test8.i
-    |
-      ("true"|"false")  // DW 21/07/03 fix to pass test8.i
-    )
-    {q = qitem;}
-  ;
-
-//typeID
-typeID
-  :
-    {isTypeName((LT(1)->getText()).data())}?
-    ID
-  ;
-
-//init_declarator_list
-init_declarator_list
-  :
-    init_declarator (COMMA init_declarator)*
-  ;
-
-//init_declarator
-init_declarator
-  :
-    declarator
-    (
-      ASSIGNEQUAL
-      initializer
-    |
-      LPAREN expression_list RPAREN
-    )?
-  ;
-
-//initializer
-initializer
-  :
-    remainder_expression  // assignment_expression
-  |
-    LCURLY initializer (COMMA (initializer)? )* RCURLY  // Allows comma at end of list
-  ;
-
-//member_declarator_list
-member_declarator_list
-  :
-    member_declarator (ASSIGNEQUAL OCTALINT)? // The value must be 0 (pure virt.)
-    (COMMA member_declarator (ASSIGNEQUAL OCTALINT)? )*
-  ;
-
-//member_declarator
-member_declarator
-  :
-    ((ID)? COLON constant_expression)=>(ID)? COLON constant_expression
-  |
-    declarator
-  ;
-
-//declarator
-declarator
-  :
-    (ptr_operator)=> ptr_operator  // AMPERSAND or STAR etc.
-    declarator
-  |
-    direct_declarator
-  ;
-
-//direct_declarator
-direct_declarator
-  {char *id;
-   CPPParser::TypeQualifier tq;}
-  :
-    (qualified_id LPAREN (RPAREN|declaration_specifiers) )=>  // Must be function declaration
-    id = qualified_id
-    {if (_td==true)       // This statement is a typedef
-      declaratorID(id,qiType);
-     else
-      declaratorID(id,qiFun);
-    }
-    LPAREN {declaratorParameterList(0);}
-    (parameter_list)?
-    RPAREN {declaratorEndParameterList(0);}
-    (tq = type_qualifier)*
-    (exception_specification)?
-  |
-    (qualified_id LPAREN qualified_id)=>  // Must be class instantiation
-    id = qualified_id
-    {declaratorID(id,qiVar);}
-    LPAREN
-    expression_list
-    RPAREN
-  |
-    (qualified_id LSQUARE)=>  // Must be array declaration
-    id = qualified_id
-    {if (_td==true)       // This statement is a typedef
-      declaratorID(id,qiType);  // This statement is a typedef
-     else
-      declaratorID(id,qiVar);
-     is_address = false; is_pointer = false;
-    }
-    (options {warnWhenFollowAmbig = false;}:
-     LSQUARE (constant_expression)? RSQUARE)+
-    {declaratorArray();}
-  |
-    id = qualified_id
-    {if (_td==true)
-      declaratorID(id,qiType);  // This statement is a typedef
-     else
-      declaratorID(id,qiVar);
-     is_address = false; is_pointer = false;
-    }
-  |
-    // DW 24/05/04 This block probably never entered as dtor selected out earlier
-    // Note In fact no dictionary entries for ctor or dtor
-    TILDE dtor:ID {declaratorID((dtor->getText()).data(),qiDtor);}  // Note "class" not recorded in CPPSymbol
-    {fprintf(stderr,"%d warning direct_declarator5 entered unexpectedly with %s\n",
-        LT(1)->getLine(),(dtor->getText()).data());}
-    LPAREN {declaratorParameterList(0);}
-    (parameter_list)?
-    RPAREN {declaratorEndParameterList(0);}
-  |
-    LPAREN declarator RPAREN
-    (options {warnWhenFollowAmbig = false;}:
-     declarator_suffix)? // DW 1/9/04 declarator_suffix made optional as failed on line 2956 in metrics.i
-  ;              // According to the grammar a declarator_suffix is not required here
-
-//declarator_suffix
-declarator_suffix    // Note: Only used above in direct_declarator
-  {CPPParser::TypeQualifier tq;}
-  :
-  (
-    //(options {warnWhenFollowAmbig = false;}:
-    (LSQUARE (constant_expression)? RSQUARE)+
-    {declaratorArray();}
-  |
-    {(!((LA(1)==LPAREN)&&(LA(2)==ID))||(qualifiedItemIsOneOf(qiType|qiCtor,1)))}?
-    LPAREN {declaratorParameterList(0);}
-    (parameter_list)?
-    RPAREN {declaratorEndParameterList(0);}
-    (tq = type_qualifier)*
-    (exception_specification)?
-  )
-  ;
-
-//conversion_function_decl_or_def
-conversion_function_decl_or_def
-  {CPPParser::TypeQualifier tq;}
-  :
-    OPERATOR declaration_specifiers (STAR | AMPERSAND)?  // DW 01/08/03 Use type_specifier here? see syntax
-    (LESSTHAN template_parameter_list GREATERTHAN)?
-    LPAREN (parameter_list)? RPAREN
-    (tq = type_qualifier)*  // DW 29/07/05 ? changed to *
-    (exception_specification)?
-    ( compound_statement
-    | SEMICOLON {end_of_stmt();}
-    )
-  ;
-
- //function_declarator
-function_declarator [int definition]
-  :
-    (ptr_operator)=> ptr_operator function_declarator[definition]
-  |
-    function_direct_declarator[definition]
-  ;
-
-//function_direct_declarator
-function_direct_declarator [int definition]
-  {char *q;
-   CPPParser::TypeQualifier tq;}
-  :
-    /* predicate indicate that plain ID is ok here; this counteracts any
-     * other predicate that gets hoisted (along with this one) that
-     * indicates that an ID is a type or whatever.  E.g.,
-     * another rule testing isTypeName() alone, implies that the
-     * the ID *MUST* be a type name.  Combining isTypeName() and
-     * this predicate in an OR situation like this one:
-     * ( declaration_specifiers ... | function_declarator ... )
-     * would imply that ID can be a type name OR a plain ID.
-     */
-    (  // fix prompted by (isdigit)() in xlocnum
-      LPAREN
-      q = qualified_id
-      {
-      declaratorID(q,qiFun);
-      }
-      RPAREN
-    |
-      q = qualified_id
-      {
-      declaratorID(q,qiFun);
-      }
-    )
-
-    {
-#ifdef MYCODE
-    if (definition)
-      myCode_function_direct_declarator(q);
-#endif //MYCODE
-    }
-
-    LPAREN
-    {
-    functionParameterList();
-    if (K_and_R == false)
-      in_parameter_list = true;
-    }
-    (parameter_list)?
-    {
-    if (K_and_R == false)
-        in_parameter_list = false;
-    else
-      in_parameter_list = true;
-    }
-    RPAREN
-    (options{warnWhenFollowAmbig = false;}:
-     tq = type_qualifier)*
-    (ASSIGNEQUAL OCTALINT)?  // The value of the octal must be 0
-    {functionEndParameterList(definition);}
-    (exception_specification)?
-  ;
-
-
-//ctor_definition
-ctor_definition
-  :
-    ctor_head
-    ctor_body
-    {endConstructorDefinition();}
-  ;
-
-//ctor_head
-ctor_head
-  :
-    ctor_decl_spec
-    ctor_declarator[1]
-  ;
-
-//ctor_decl_spec
-ctor_decl_spec
-  :
-    (("inline"|"_inline"|"__inline")|"explicit")*
-  ;
-
-//ctor_declarator
-ctor_declarator[int definition]
-  {char *q;}
-  :
-    q = qualified_ctor_id
-    {declaratorParameterList(definition);}
-    LPAREN (parameter_list)? RPAREN
-    {declaratorEndParameterList(definition);}
-    (exception_specification)?
-  ;
-
-// This matches a generic qualified identifier ::T::B::foo
-// that is satisfactory for a ctor (no operator, no trailing <>)
-qualified_ctor_id returns [char *q = NULL]
-  {
-  char *so;
-  static char qitem[CPPParser_MaxQualifiedItemSize+1];
-  }
-  :
-    so = scope_override
-    {strcpy(qitem, so);}
-    id:ID  // DW 24/05/04 Note. Neither Ctor or Dtor recorded in dictionary
-    {strcat(qitem,(id->getText()).data());
-    q = qitem;}
-  ;
-
-//ctor_body
-ctor_body
-  :
-    (ctor_initializer)?
-    compound_statement
-  ;
-
-//ctor_initializer
-ctor_initializer
-  :
-    COLON superclass_init (COMMA superclass_init)*
-  ;
-
-//superclass_init
-superclass_init
-  {char *q;}
-  :
-    q = qualified_id LPAREN (expression_list)? RPAREN
-  ;
-
-//dtor_head
-dtor_head[int definition]
-  :
-    dtor_decl_spec
-    dtor_declarator[definition]
-  ;
-
-//dtor_decl_spec
-dtor_decl_spec
-  :
-    (("inline"|"_inline"|"__inline")|"virtual")*
-  ;
-
-//dtor_declarator
-dtor_declarator[int definition]
-  {char *s;}
-  :
-    s = scope_override
-    TILDE ID
-    {declaratorParameterList(definition);}
-    LPAREN ("void")? RPAREN
-    {declaratorEndParameterList(definition);}
-    (exception_specification)?
-  ;
-
-//dtor_body
-dtor_body
-  :
-    compound_statement
-    {endDestructorDefinition();}
-  ;
-
-//parameter_list
-parameter_list
-  :
-    parameter_declaration_list (ELLIPSIS)?
-  ;
-
-//parameter_declaration_list
-parameter_declaration_list
-  :
-    (parameter_declaration (COMMA parameter_declaration)* )
-  ;
-
-//parameter_declaration
-parameter_declaration
-  :
-    {beginParameterDeclaration();}
-    (
-      {!((LA(1)==SCOPE) && (LA(2)==STAR||LA(2)==OPERATOR)) &&
-       (!(LA(1)==SCOPE||LA(1)==ID) || qualifiedItemIsOneOf(qiType|qiCtor) )}?
-
-      declaration_specifiers  // DW 24/3/98 Mods for K & R
-      (
-        (declarator)=> declarator        // if arg name given
-      |
-        abstract_declarator     // if arg name not given  // can be empty
-      )
-    |
-      (declarator)=> declarator      // DW 24/3/98 Mods for K & R
-    |
-      ELLIPSIS
-    )
-    (ASSIGNEQUAL
-     remainder_expression // DW 18/4/01 assignment_expression
-    )?
-  ;
-
-//type_id
-type_id
-  :
-    declaration_specifiers abstract_declarator
-  ;
-
-/* This rule looks a bit weird because (...) can happen in two
- * places within the declaration such as "void (*)()" (ptr to
- * function returning nothing).  However, the () of a function
- * can only occur after having seen either a (abstract_declarator)
- * and not after a [..] or simple '*'.  These are the only two
- * valid () func-groups:
- *    int (*)();     // ptr to func
- *    int (*[])();   // array of ptr to func
- */
-//abstract_declarator
-abstract_declarator
-  :
-    ptr_operator abstract_declarator
-  |
-    (LPAREN (ptr_operator)+ RPAREN)=> LPAREN (ptr_operator)+ RPAREN
-    (options {warnWhenFollowAmbig = false;}:
-    abstract_declarator_suffix)?
-  |
-    // DW 13/06/05
-    (options {warnWhenFollowAmbig = false;}:
-    abstract_declarator_suffix)?
-  ;
-
-//abstract_declarator_suffix
-abstract_declarator_suffix
-  :
-    (LSQUARE (constant_expression)? RSQUARE)+
-    {declaratorArray();}
-  |
-    LPAREN
-    {declaratorParameterList(0);}
-    (parameter_list)?
-    RPAREN
-    {declaratorEndParameterList(0);}
-    cv_qualifier_seq
-    (exception_specification)?
-  ;
-
-//exception_specification
-exception_specification
-  {char *so;}
-  :
-    "throw"
-    LPAREN
-    ( (so = scope_override ID (COMMA so = scope_override ID)* )?
-    | ELLIPSIS
-    )
-    RPAREN
-  ;
-
-//template_head
-template_head
-  :
-    "template"
-    LESSTHAN template_parameter_list GREATERTHAN
-  ;
-
-//template_parameter_list
-template_parameter_list
-  :
-    {beginTemplateParameterList();}
-    template_parameter (COMMA template_parameter)*
-    {endTemplateParameterList();}
-  ;
-
-/* Rule requires >2 lookahead tokens. The ambiguity is resolved
- * correctly, however. According to the manual "...A template argument
- * that can be interpreted either as a parameter-declaration or a
- * type-argument (because its identifier is the name of an
- * already existing class) is taken as type-argument."
- * Therefore, any "class ID" that is seen on the input, should
- * match the first alternative here (it should be a type-argument).
- */
-//template_parameter
-template_parameter
-  :
-    (options{generateAmbigWarnings = false;}:
-     type_parameter
-    |
-     parameter_declaration
-    )
-  ;
-
-//type_parameter
-type_parameter
-  :
-    (
-      ("class"|"typename")
-      (id:ID
-        {
-        templateTypeParameter((id->getText()).data());
-        }
-        (ASSIGNEQUAL assigned_type_name)?
-      )?
-    |
-      template_head "class"
-      (id2:ID
-        {
-        templateTypeParameter((id2->getText()).data());
-        }
-        (ASSIGNEQUAL assigned_type_name)?
-      )?
-    )
-  ;
-
-/* This is to allow an assigned type_name in a template parameter
- *  list to be defined previously in the same parameter list,
- *  as type setting is ineffective whilst guessing
- */
-//assigned_type_name
-assigned_type_name
-  {char* qt; TypeSpecifier ts;}
-  :
-    (options{generateAmbigWarnings = false;}:
-      qt = qualified_type abstract_declarator
-    |
-      ts = simple_type_specifier abstract_declarator
-    )
-  ;
-
-// This rule refers to an instance of a template class or function
-//template_id
-template_id  // aka template_class_name
-  :
-    ID LESSTHAN template_argument_list GREATERTHAN
-  ;
-
-//template_argument_list
-template_argument_list
-  :
-    template_argument (COMMA template_argument)*
-  ;
-
-/* Here assignment_expression was changed to shift_expression to rule out
- *  x< 1<2 > which causes ambiguities. As a result, these can be used only
- *  by enclosing parentheses x<(1<2)>. This is true for x<1+2> ==> bad,
- *  x<(1+2)> ==> ok.
- */
-//template_argument
-template_argument
-  :
-    // DW 07/04/05 This predicate only used here if next is SCOPE or ID
-    {( !(LA(1)==SCOPE||LA(1)==ID) || qualifiedItemIsOneOf(qiType|qiCtor) )}?
-    type_id
-  |
-    shift_expression // failed in iosfwd
-  ;
-
-///////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////
-//////////////////////////////  STATEMENTS ////////////////////////////
-///////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////
-
-statement_list
-  :
-    (statement)+
-  ;
-
-statement
-	{
-	FunctionSpecifier fs = fsInvalid;	// inline,virtual,explicit
-	}
-	:
-		(	("namespace"|"using")=>
-			block_declaration
-		|	(("typedef")? class_specifier (qualified_id)? LCURLY)=>
-			member_declaration
-		|	(declaration_specifiers LPAREN ptr_operator qualified_id RPAREN)=>
-			member_declaration
-		|	(declaration_specifiers (ptr_operator ptr_operator) qualified_id)=>
-			member_declaration
-		|	(declaration_specifiers ((ptr_operator)=>ptr_operator)? qualified_id)=>
-			member_declaration
-		|	labeled_statement
-		|	case_statement
-		|	default_statement
-		|	expression SEMICOLON! {end_of_stmt();}
-		|	compound_statement
-		|	selection_statement
-		|	iteration_statement
-		|	jump_statement
-		|	SEMICOLON! {end_of_stmt();}
-		|	try_block
-		|	throw_statement
-			// The next two entries may be used for debugging
-			// Use this statement in the source code to turn antlr trace on (See note above)
-		|	"antlrTrace_on" {antlrTrace(true);}
-			// Use this statement in the source code to turn antlr trace off (See note above)
-		|	"antlrTrace_off" {antlrTrace(false);}
-		)
-	;
-
-//block_declaration
-block_declaration
-  : simple_declaration
-  | asm_definition
-  | namespace_alias_definition
-  | using_statement
-  ;
-
-//simple_definition
-simple_declaration
-  :
-    declaration_specifiers (init_declarator_list)? SEMICOLON {end_of_stmt();}
-  ;
-
-labeled_statement
-  :
-    ID COLON statement
-  ;
-
-case_statement
-  : "case"
-    constant_expression COLON statement
-  ;
-
-default_statement
-  :
-    "default" COLON statement
-  ;
-
-compound_statement
-  :
-    LCURLY
-    {end_of_stmt();
-     enterNewLocalScope();
-    }
-    (statement_list)?
-    RCURLY
-    {exitLocalScope();}
-  ;
-
-/* NOTE: cannot remove ELSE ambiguity, but it parses correctly.
- * The warning is removed with the options statement
- */
-selection_statement
-  :
-    "if" LPAREN
-    expression RPAREN
-    statement
-    (options {warnWhenFollowAmbig = false;}:
-     "else" statement)?
-  |
-    "switch" LPAREN expression RPAREN statement
-  ;
-
-iteration_statement
-  :
-    "while"
-    LPAREN expression RPAREN
-    statement
-  |
-    "do"
-    statement "while"
-    LPAREN expression RPAREN
-    SEMICOLON {end_of_stmt();}
-  |
-    "for" LPAREN
-    ( (declaration)=> declaration
-    | expression SEMICOLON {end_of_stmt();}
-    | SEMICOLON {end_of_stmt();}
-    )
-    (expression)? SEMICOLON {end_of_stmt();}
-    (expression)?
-    RPAREN statement
-  ;
-
-jump_statement
-  :
-    ( "goto" ID SEMICOLON {end_of_stmt();}
-    | "continue" SEMICOLON {end_of_stmt();}
-    | "break" SEMICOLON {end_of_stmt();}
-    |  // DW 16/05/03 May be problem here if return is followed by a cast expression
-      "return" {in_return = true;}
-      ( options{warnWhenFollowAmbig = false;}:
-        (LPAREN {(qualifiedItemIsOneOf(qiType) )}? ID RPAREN)=>
-        LPAREN ID RPAREN (expression)?  // This is an unsatisfactory fix for problem in xstring re "return (allocator);"
-                        // and in xlocale re return (_E)(_Tolower((unsigned char)_C, &_Ctype));
-        //{printf("%d CPP_parser.g jump_statement Return fix used\n",LT(1)->getLine());}
-      | expression
-      )? SEMICOLON {in_return = false,end_of_stmt();}
-    )
-  ;
-
-try_block
-  :
-    "try" compound_statement (handler)*
-  ;
-
-handler
-  :
-    "catch"
-    {exceptionBeginHandler();}
-    {declaratorParameterList(1);}
-    LPAREN exception_declaration RPAREN
-    {declaratorEndParameterList(1);}
-    compound_statement
-    {exceptionEndHandler();}
-  ;
-
-exception_declaration
-  :
-    parameter_declaration_list
-  ;
-
-/* This is an expression of type void according to the ARM, which
- * to me means "statement"; it removes some ambiguity to put it in
- * as a statement also.
- */
-throw_statement
-  :
-    "throw" (assignment_expression) ? SEMICOLON { end_of_stmt();}
-  ;
-
-using_statement
-  {char *qid;}
-  :
-    "using"
-    ("namespace" qid = qualified_id    // Using-directive
-    |("typename")? qid = qualified_id  // Using-declaration
-    )
-    SEMICOLON {end_of_stmt();}
-  ;
-
-asm_definition
-  :
-    ("asm"|"_asm"|"__asm"|"__asm__") LPAREN StringLiteral RPAREN SEMICOLON {end_of_stmt();}
-  ;
-
-///////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////
-//////////////////////////////  EXPRESSIONS ///////////////////////////
-///////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////
-
-expression
-  :
-    assignment_expression (COMMA assignment_expression)*
-  ;
-
-// right-to-left for assignment op
-assignment_expression
-  :
-    conditional_expression
-    (
-      (ASSIGNEQUAL|TIMESEQUAL|DIVIDEEQUAL|MINUSEQUAL|PLUSEQUAL
-      |MODEQUAL|SHIFTLEFTEQUAL|SHIFTRIGHTEQUAL|BITWISEANDEQUAL
-      |BITWISEXOREQUAL|BITWISEOREQUAL
-      )
-      remainder_expression
-    )?
-  ;
-
-remainder_expression
-  :
-    (
-      (conditional_expression (COMMA|SEMICOLON|RPAREN) )=>
-      {assign_stmt_RHS_found += 1;}
-      assignment_expression
-      {
-      if (assign_stmt_RHS_found > 0)
-        assign_stmt_RHS_found -= 1;
-      else
-        {
-        fprintf(stderr,"%d warning Error in assign_stmt_RHS_found = %d\n",
-          LT(1)->getLine(),assign_stmt_RHS_found);
-        fprintf(stderr,"Press return to continue\n");
-        getchar();
-        }
-      }
-    |
-      assignment_expression
-    )
-  ;
-
-conditional_expression
-  :
-    logical_or_expression
-    (QUESTIONMARK expression COLON conditional_expression)?
-  ;
-
-constant_expression
-  :
-    conditional_expression
-  ;
-
-logical_or_expression
-  :
-    logical_and_expression (OR logical_and_expression)*
-  ;
-
-logical_and_expression
-  :
-    inclusive_or_expression (AND inclusive_or_expression)*
-  ;
-
-inclusive_or_expression
-  :
-    exclusive_or_expression (BITWISEOR exclusive_or_expression)*
-  ;
-
-exclusive_or_expression
-  :
-    and_expression (BITWISEXOR and_expression)*
-  ;
-
-and_expression
-  :
-    equality_expression (AMPERSAND equality_expression)*
-  ;
-
-equality_expression
-  :
-    relational_expression ( (NOTEQUAL|EQUAL) relational_expression)*
-  ;
-
-relational_expression
-  :
-    shift_expression
-    (options {warnWhenFollowAmbig = false;}:
-      ( LESSTHAN
-      | GREATERTHAN
-      | LESSTHANOREQUALTO
-      | GREATERTHANOREQUALTO
-      )
-     shift_expression
-    )*
-  ;
-
-shift_expression
-  :
-    additive_expression ((SHIFTLEFT | SHIFTRIGHT) additive_expression)*
-  ;
-
-// See comment for multiplicative_expression regarding #pragma
-additive_expression
-  :
-    multiplicative_expression
-    (options{warnWhenFollowAmbig = false;}:
-      (PLUS | MINUS) multiplicative_expression
-    )*
-  ;
-
-// ANTLR has trouble dealing with the analysis of the confusing unary/binary
-// operators such as STAR, AMPERSAND, PLUS, etc...
-// With the #pragma (now "(options{warnWhenFollowAmbig = false;}:" etc.)
-// we simply tell ANTLR to use the "quick-to-analyze" approximate lookahead
-// as full LL(k) lookahead will not resolve the ambiguity anyway.  Might
-// as well not bother.  This has the side-benefit that ANTLR doesn't go
-// off to lunch here (take infinite time to read grammar).
-multiplicative_expression
-  :
-    pm_expression
-    (options{warnWhenFollowAmbig = false;}:
-      (STAR|DIVIDE|MOD) pm_expression
-    )*
-  ;
-
-pm_expression
-  :
-    cast_expression ( (DOTMBR|POINTERTOMBR) cast_expression)*
-  ;
-
-/* The string "( ID" can be either the start of a cast or
- * the start of a unary_expression.  However, the ID must
- * be a type name for it to be a cast.  Since ANTLR can only hoist
- * semantic predicates that are visible without consuming a token,
- * the semantic predicate in rule type_name is not hoisted--hence, the
- * rule is reported to be ambiguous.  I am manually putting in the
- * correctly hoisted predicate.
- *
- * Ack! Actually "( ID" might be the start of "(T(expr))" which makes
- * the first parens just an ordinary expression grouping.  The solution
- * is to look at what follows the type, T.  Note, this could be a
- * qualified type.  Yucko.  I believe that "(T(" can only imply
- * function-style type cast in an expression (...) grouping.
- *
- * We DO NOT handle the following situation correctly at the moment:
- * Suppose you have
- *    struct rusage rusage;
- *    return (rusage.fp);
- *    return (rusage*)p;
- * Now essentially there is an ambiguity here. If rusage is followed by any
- * postix operators then it is an identifier else it is a type name. This
- * problem does not occur in C because, unless the tag struct is attached,
- * rusage is not a type name. However in C++ that restriction is removed.
- * No *real* programmer would do this, but it's in the C++ standard just for
- * fun..
- *
- * Another fun one (from an LL standpoint):
- *
- *   (A::B::T *)v;      // that's a cast of v to type A::B::T
- *   (A::B::foo);    // that's a simple member access
- *
- * The qualifiedItemIs(1) function scans ahead to what follows the
- * final "::" and returns qiType if the item is a type.  The offset of
- * '1' makes it ignore the initial LPAREN; normally, the offset is 0.
- */
-
-cast_expression
-  {TypeQualifier tq;
-   TypeSpecifier ts;}
-  :
-    (LPAREN (type_qualifier)* simple_type_specifier (ptr_operator)* RPAREN unary_expression)=>
-     LPAREN (tq = type_qualifier)* ts = simple_type_specifier (ptr_operator)* RPAREN unary_expression
-  |
-    (LPAREN (type_qualifier)* simple_type_specifier (ptr_operator)* RPAREN)=>
-    // Believe it or not, you can get more than one cast expression in sequence
-     LPAREN (tq = type_qualifier)* ts = simple_type_specifier (ptr_operator)* RPAREN cast_expression
-  |
-    unary_expression  // handles outer (...) of "(T(expr))"
-  ;
-
-unary_expression
-  :
-    (
-      (postfix_expression)=>
-      postfix_expression
-    |
-      PLUSPLUS unary_expression
-    |
-      MINUSMINUS unary_expression
-    |
-      unary_operator cast_expression
-    |
-      ( "sizeof"
-      | "__alignof__"   //Zhaojz 02/02/05 to fix bug 29 (GNU)
-      )
-      ( (unary_expression)=>
-         unary_expression
-      |
-        LPAREN type_id RPAREN
-      )
-    |
-      (SCOPE)?
-      (new_expression
-      |delete_expression
-      )
-    )
-  ;
-
-postfix_expression
-  {
-   TypeSpecifier ts;
-  }
-  :
-  (
-    options {warnWhenFollowAmbig = false;}:
-    // Function-style cast must have a leading type
-    {!(LA(1)==LPAREN)}?
-    (ts = simple_type_specifier LPAREN RPAREN LPAREN)=>  // DW 01/08/03 To cope with problem in xtree (see test10.i)
-     ts = simple_type_specifier LPAREN RPAREN LPAREN (expression_list)? RPAREN
-  |
-    {!(LA(1)==LPAREN)}?
-    (ts = simple_type_specifier LPAREN)=>
-     ts = simple_type_specifier LPAREN (expression_list)? RPAREN
-  |
-    primary_expression
-    (options {warnWhenFollowAmbig = false;}:
-          LSQUARE expression RSQUARE
-    |
-      LPAREN (expression_list)? RPAREN
-    | (DOT|POINTERTO) ("template")? id_expression
-    | PLUSPLUS
-    | MINUSMINUS
-    )*
-  |
-    ("dynamic_cast"|"static_cast"|"reinterpret_cast"|"const_cast")
-    LESSTHAN ("const"|"__const")? ts = type_specifier (ptr_operator)? GREATERTHAN
-    LPAREN expression RPAREN
-  |
-    "typeid"
-    LPAREN ((type_id)=>type_id|expression) RPAREN
-  )
-  ;
-
-primary_expression
-  : id_expression
-  | constant
-  | "this"
-  | LPAREN expression RPAREN
-  ;
-
-id_expression
-  {char *s;}
-  :
-    s = scope_override
-    ( ID
-    | OPERATOR optor
-    | TILDE (STAR)? ID  // DW 29/07/03 STAR included to allow for *_S = ~*_S; seen in vector
-    )
-  ;
-
-constant
-  : OCTALINT
-  | DECIMALINT
-  | HEXADECIMALINT
-  | CharLiteral
-  | WCharLiteral
-  | (StringLiteral | WStringLiteral)+
-  | FLOATONE
-  | FLOATTWO
-  | "true"
-  | "false"
-  ;
-
-unary_operator
-  : AMPERSAND
-  | STAR
-  | PLUS
-  | MINUS
-  | TILDE
-  | NOT
-  ;
-
-/* JEL The first ()? is used to resolve "new (expr) (type)" because both
- * (expr) and (type) look identical until you've seen the whole thing.
- *
- * new_initializer appears to be conflicting with function arguments as
- * function arguments can follow a primary_expression.  [This is a full
- * LL(k) versus LALL(k) problem.  Enhancing context by duplication of
- * some rules might handle this.]
- */
-new_expression
-  :
-  (
-    "new"
-    ( (LPAREN expression_list RPAREN)=>
-       LPAREN expression_list RPAREN)?
-    (new_type_id|LPAREN type_id RPAREN)
-    (options{warnWhenFollowAmbig = false;}:
-    (new_initializer)=> new_initializer)?
-  )
-  ;
-
-new_initializer
-  :
-    LPAREN (expression_list)? RPAREN
-  ;
-
-new_type_id
-  :
-    declaration_specifiers
-    (options {warnWhenFollowAmbig = false;}:
-      new_declarator
-    )?
-  ;
-
-new_declarator
-  :
-    ptr_operator
-    (options {warnWhenFollowAmbig = false;}:
-    new_declarator)?
-  |
-    direct_new_declarator
-  ;
-
-/* The "[expression]" construct conflicts with the "new []" construct
- * (and possibly others).  We used approximate lookahead for the "new []"
- * construct so that it would not try to compute full LL(2) lookahead.
- * Here, we use #pragma approx again because anytime we see a [ followed
- * by token that can begin an expression, we always want to loop.
- * Approximate lookahead handles this correctly.  In fact, approximate
- * lookahead is the same as full lookahead when all but the last lookahead
- * depth are singleton sets; e.g., {"["} followed by FIRST(expression).
- */
-direct_new_declarator
-  :
-    (options {warnWhenFollowAmbig = false;}:
-      LSQUARE expression RSQUARE
-    )+
-  ;
-
-//ptr_operator
-ptr_operator
-  :
-    ( AMPERSAND {is_address = true;}
-    | ("_cdecl"|"__cdecl")
-    | ("_near"|"__near")
-    | ("_far"|"__far")
-    | "__interrupt"
-    | ("pascal"|"_pascal"|"__pascal")
-    | ("_stdcall"|"__stdcall")
-    | ptr_to_member  // e.g. STAR
-    )
-   ;
-
-// Match A::B::*
-//ptr_to_member
-ptr_to_member  // Part of ptr_operator in grammar.txt
-  {char *s;}
-  :
-    s = scope_override STAR {is_pointer = true;} cv_qualifier_seq
-  ;
-
-// JEL note:  does not use (const|volatile)* to avoid lookahead problems
-cv_qualifier_seq
-  {CPPParser::TypeQualifier tq;}
-  :
-    (tq = type_qualifier)*
-  ;
-
-//scope_override
-// Match the A::B::C:: or nothing
-scope_override returns [char *s = NULL]
-  {
-  static char sitem[CPPParser_MaxQualifiedItemSize+1];
-  sitem[0]='\0';
-  }
-  :
-    (SCOPE {strcat(sitem,"::");} )?
-    ( options {warnWhenFollowAmbig = false;}:
-      {scopedItem()}?
-      id:ID (LESSTHAN template_argument_list GREATERTHAN)?
-      SCOPE
-      ("template")?  // DW 04/06/05 See _Alloc::template in testMbanefo.i
-      {
-      CPPSymbol *cs = (CPPSymbol *) symbols->lookup((id->getText()).data());
-      strcat(sitem,(id->getText()).data());
-      strcat(sitem,"::");
-      }
-    )*
-    {s = sitem;}
-  ;
-
-delete_expression
-  :
-    "delete" (LSQUARE RSQUARE)? cast_expression
-  ;
-
-expression_list
-  :
-    assignment_expression (COMMA assignment_expression)*
-  ;
-
-optor
-  :
-    "new"
-    (options {warnWhenFollowAmbig = false;}:
-      LSQUARE RSQUARE | )    // check syntax
-  |
-    "delete"
-    (options {warnWhenFollowAmbig = false;}:
-      LSQUARE RSQUARE | )    // check syntax
-  |
-    LPAREN RPAREN
-  |
-    LSQUARE RSQUARE
-  |
-    optor_simple_tokclass  //OPTOR_SIMPLE_TOKCLASS
-  ;
-
-//Zuo 5/11/2001
-// This is the equivalent to "#tokclass OPTOR_SIMPLE_TOKCLASS" in cplusplus.g
-
-optor_simple_tokclass
-  :
-    (PLUS|MINUS|STAR|DIVIDE|MOD|BITWISEXOR|AMPERSAND|BITWISEOR|TILDE|NOT|
-   SHIFTLEFT|SHIFTRIGHT|
-   ASSIGNEQUAL|TIMESEQUAL|DIVIDEEQUAL|MODEQUAL|PLUSEQUAL|MINUSEQUAL|
-   SHIFTLEFTEQUAL|SHIFTRIGHTEQUAL|BITWISEANDEQUAL|BITWISEXOREQUAL|BITWISEOREQUAL|
-   EQUAL|NOTEQUAL|LESSTHAN|GREATERTHAN|LESSTHANOREQUALTO|GREATERTHANOREQUALTO|OR|AND|
-   PLUSPLUS|MINUSMINUS|COMMA|POINTERTO|POINTERTOMBR
-  )
-  ;
-
-class CPPLexer extends Lexer;
-
-options
-  {
-  k = 3;
-  exportVocab = STDC;
-  testLiterals = true;
-  }
-
-// DW 4/11/02 put in to support manual hoisting
-tokens
-  {
-  OPERATOR = "operator";
-  }
-
-{
-void deferredNewline()
-  {
-  deferredLineCount++;  // Declared and initialised in main.cpp
-  }
-
-void newline()
-  {
-  for (;deferredLineCount>0;deferredLineCount--)
-      {
-    CharScanner::newline();
-    }
-    CharScanner::newline();
-    }
-}
-
-// Operators:
-
-ASSIGNEQUAL     : '=' ;
-COLON           : ':' ;
-COMMA           : ',' ;
-QUESTIONMARK    : '?' ;
-SEMICOLON       : ';' ;
-POINTERTO       : "->" ;
-
-// DOT & ELLIPSIS are commented out since they are generated as part of
-// the Number rule below due to some bizarre lexical ambiguity shme.
-// DOT  :       '.' ;
-// ELLIPSIS      : "..." ;
-
-LPAREN          : '(' ;
-RPAREN          : ')' ;
-LSQUARE         : '[' ;
-RSQUARE         : ']' ;
-LCURLY          : '{' ;
-RCURLY          : '}' ;
-
-EQUAL           : "==" ;
-NOTEQUAL        : "!=" ;
-LESSTHANOREQUALTO     : "<=" ;
-LESSTHAN              : "<" ;
-GREATERTHANOREQUALTO  : ">=" ;
-GREATERTHAN           : ">" ;
-
-DIVIDE          : '/' ;
-DIVIDEEQUAL     : "/=" ;
-PLUS            : '+' ;
-PLUSEQUAL       : "+=" ;
-PLUSPLUS        : "++" ;
-MINUS           : '-' ;
-MINUSEQUAL      : "-=" ;
-MINUSMINUS      : "--" ;
-STAR            : '*' ;
-TIMESEQUAL      : "*=" ;
-MOD             : '%' ;
-MODEQUAL        : "%=" ;
-SHIFTRIGHT      : ">>" ;
-SHIFTRIGHTEQUAL : ">>=" ;
-SHIFTLEFT       : "<<" ;
-SHIFTLEFTEQUAL  : "<<=" ;
-
-AND            : "&&" ;
-NOT            : '!' ;
-OR             : "||" ;
-
-AMPERSAND       : '&' ;
-BITWISEANDEQUAL : "&=" ;
-TILDE           : '~' ;
-BITWISEOR       : '|' ;
-BITWISEOREQUAL  : "|=" ;
-BITWISEXOR      : '^' ;
-BITWISEXOREQUAL : "^=" ;
-
-//Zuo: the following tokens are come from cplusplus.g
-
-POINTERTOMBR    : "->*" ;
-DOTMBR          : ".*"  ;
-
-SCOPE           : "::"  ;
-
-Whitespace
-  :
-    (  // whitespace ignored
-      (' ' |'\t' | '\f')
-    |  // handle newlines
-      ( '\r' '\n'  // MS
-      | '\r'    // Mac
-      | '\n'    // Unix
-      ) { newline(); }
-    |  // handle continuation lines
-      ( '\\' '\r' '\n'  // MS
-      | '\\' '\r'    // Mac
-      | '\\' '\n'    // Unix
-      ) {printf("CPP_parser.g continuation line detected\n");
-        deferredNewline();}
-    )
-    {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;}
-  ;
-
-Comment
-  :
-    "/*"
-    ( {LA(2) != '/'}? '*'
-    | EndOfLine {deferredNewline();}
-    | ~('*'| '\r' | '\n')
-    )*
-    "*/" {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;}
-  ;
-
-CPPComment
-  :
-    "//" (~('\n' | '\r'))* EndOfLine
-     {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline();}
-  ;
-
-PREPROC_DIRECTIVE
-  options{paraphrase = "a preprocessor directive";}
-  :
-    ('#' (~('\r' | '\n'))* EndOfLine)
-    {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline();}
-  ;
-
-protected
-LineDirective
-  :
-    ("line")?  // this would be for if the directive started "#line"
-    (Space)+
-    n:Decimal
-    (Space)+
-    (sl:StringLiteral)
-    ((Space)+ Decimal)*  // To support cpp flags (GNU)
-    {
-    process_line_directive((sl->getText()).data(), (n->getText()).data());  // see main()
-    }
-    EndOfLine
-  ;
-
-protected
-Space
-  :
-    (' '|'\t'|'\f')
-  ;
-
-
-protected
-Pragma
-  :
-    ('#' "pragma" (~('\r' | '\n'))* EndOfLine)
-    {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline();}
-  ;
-
-protected
-Error
-  :
-    ('#' "error" (~('\r' | '\n'))* EndOfLine)
-    {_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline();}
-  ;
-
-
-// Literals:
-
-/*
- * Note that we do NOT handle tri-graphs nor multi-byte sequences.
- */
-
-/*
- * Note that we can't have empty character constants (even though we
- * can have empty strings :-).
- */
-CharLiteral
-  :
-    '\'' (Escape | ~('\'')) '\''
-  ;
-
-WCharLiteral
-	:
-		'L' CharLiteral
-	;
-
-
-/*
- * Can't have raw imbedded newlines in string constants.  Strict reading of
- * the standard gives odd dichotomy between newlines & carriage returns.
- * Go figure.
- */
-StringLiteral
-  :
-    '"'
-    ( Escape
-    |
-      ( "\\\r\n"   // MS
-      | "\\\r"     // MAC
-      | "\\\n"     // Unix
-      ) {deferredNewline();}
-    |
-      ~('"'|'\r'|'\n'|'\\')
-    )*
-    '"'
-  ;
-
-WStringLiteral
-	:
-		'L' StringLiteral
-	;
-
-protected
-EndOfLine
-  :
-    ( options{generateAmbigWarnings = false;}:
-      "\r\n"  // MS
-    | '\r'    // Mac
-    | '\n'    // Unix
-    )
-  ;
-
-/*
- * Handle the various escape sequences.
- *
- * Note carefully that these numeric escape *sequences* are *not* of the
- * same form as the C language numeric *constants*.
- *
- * There is no such thing as a binary numeric escape sequence.
- *
- * Octal escape sequences are either 1, 2, or 3 octal digits exactly.
- *
- * There is no such thing as a decimal escape sequence.
- *
- * Hexadecimal escape sequences are begun with a leading \x and continue
- * until a non-hexadecimal character is found.
- *
- * No real handling of tri-graph sequences, yet.
- */
-
-protected
-Escape
-  :
-    '\\'
-    ( options{warnWhenFollowAmbig=false;}:
-      'a'
-    | 'b'
-    | 'f'
-    | 'n'
-    | 'r'
-    | 't'
-    | 'v'
-    | '"'
-    | '\''
-    | '\\'
-    | '?'
-    | ('0'..'3') (options{warnWhenFollowAmbig=false;}: Digit (options{warnWhenFollowAmbig=false;}: Digit)? )?
-    | ('4'..'7') (options{warnWhenFollowAmbig=false;}: Digit)?
-    | 'x' (options{warnWhenFollowAmbig=false;}: Digit | 'a'..'f' | 'A'..'F')+
-    )
-  ;
-
-// Numeric Constants:
-
-protected
-Digit
-  :
-    '0'..'9'
-  ;
-
-protected
-Decimal
-  :
-    ('0'..'9')+
-  ;
-
-protected
-LongSuffix
-  : 'l'
-  | 'L'
-  ;
-
-protected
-UnsignedSuffix
-  : 'u'
-  | 'U'
-  ;
-
-protected
-FloatSuffix
-  : 'f'
-  | 'F'
-  ;
-
-protected
-Exponent
-  :
-    ('e'|'E') ('+'|'-')? (Digit)+
-  ;
-
-protected
-Vocabulary
-  :
-    '\3'..'\377'
-  ;
-
-Number
-  :
-    ( (Digit)+ ('.' | 'e' | 'E') )=>
-    (Digit)+
-    ( '.' (Digit)* (Exponent)? {_ttype = FLOATONE;} //Zuo 3/12/01
-    | Exponent                 {_ttype = FLOATTWO;} //Zuo 3/12/01
-    )                          //{_ttype = DoubleDoubleConst;}
-    (FloatSuffix               //{_ttype = FloatDoubleConst;}
-    |LongSuffix                //{_ttype = LongDoubleConst;}
-    )?
-  |
-    ("...")=> "..."            {_ttype = ELLIPSIS;}
-  |
-    '.'                        {_ttype = DOT;}
-    ( (Digit)+ (Exponent)?     {_ttype = FLOATONE;} //Zuo 3/12/01
-                                   //{_ttype = DoubleDoubleConst;}
-      (FloatSuffix           //{_ttype = FloatDoubleConst;}
-      |LongSuffix            //{_ttype = LongDoubleConst;}
-      )?
-    )?
-  |
-    '0' ('0'..'7')*            //{_ttype = IntOctalConst;}
-    (LongSuffix                //{_ttype = LongOctalConst;}
-    |UnsignedSuffix            //{_ttype = UnsignedOctalConst;}
-    )*                         {_ttype = OCTALINT;}
-  |
-    '1'..'9' (Digit)*          //{_ttype = IntIntConst;}
-    (LongSuffix                //{_ttype = LongIntConst;}
-    |UnsignedSuffix            //{_ttype = UnsignedIntConst;}
-    )*                         {_ttype = DECIMALINT;}
-  |
-    '0' ('x' | 'X') ('a'..'f' | 'A'..'F' | Digit)+
-                                   //{_ttype = IntHexConst;}
-    (LongSuffix                //{_ttype = LongHexConst;}
-    |UnsignedSuffix            //{_ttype = UnsignedHexConst;}
-    )*                         {_ttype = HEXADECIMALINT;}
-  ;
-
-ID
-  options {testLiterals = true;}
-  :
-    ('a'..'z'|'A'..'Z'|'_')
-    ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*
-  ;
-
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/DictEntry.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/DictEntry.hpp
deleted file mode 100644
index 16f5594..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/DictEntry.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * Requires PCCTS 1.32b4 or higher to get past ANTLR.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/* 1999-2005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-#ifndef DictEntry_hpp
-#define DictEntry_hpp
-
-class DictEntry {
- protected:
-  const char *key;
-  int hashCode;
-  DictEntry *next;   // next element in the bucket
-  DictEntry *scope;  // next element in the scope
-
- public:
-  int this_scope;  // 4/2/96 LL - added to store scope
-
-  DictEntry() {
-    key = NULL;
-    hashCode = -1;
-    next = scope = NULL;
-  }
-  DictEntry(const char *k, int h = -1) {
-    key = k;
-    hashCode = h;
-    next = scope = NULL;
-  }
-  virtual ~DictEntry() {
-    key = NULL;
-    hashCode = -1;
-    next = scope = NULL;
-  }
-
-  void setKey(char *k) { key = k; }
-
-  const char *getKey() { return key; }
-
-  void setHashCode(int h) { hashCode = h; }
-
-  int getHashCode() { return hashCode; }
-
-  void setNext(DictEntry *n) { next = n; }
-
-  DictEntry *getNext() { return next; }
-
-  void setScope(DictEntry *s) { scope = s; }
-
-  DictEntry *getNextInScope() { return scope; }
-};
-
-#endif
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.cpp b/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.cpp
deleted file mode 100644
index ea78a3c..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * VERSION 1.1
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * Requires PCCTS 1.32b4 or higher to get past ANTLR.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/* 1999-2004 Version 3.0 July 2004
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- */
-/* 2004-2005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- *
- * See NotesScopes.txt for information about storing symbol names within scope
- *levels
- *
- * Symbols names are stored in lists selected by hashing
- *
- * Symbols are also chained in lists for each scope level,
- *	[0] = template scope	Note: Not used at present
- *	[1] = external scope	Note: These symbols (types) are never deleted.
- *"std" is allocated this scope in CPPParser::init()
- *	[2+]= function/variable scopes	Note: These symbol references are
- *deleted when they go out of scope.
- */
-
-extern "C" {
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-}
-#include "Dictionary.hpp"
-
-/* Hashing function described in                   */
-/* "Fast Hashing of Variable-Length Text Strings," */
-/* by Peter K. Pearson, CACM, June 1990. */
-/* Table from p. 678.*/
-/* Pseudorandom Permutation of the Integers 0 through 255: */
-unsigned char Dictionary::randomNumbers[] = {
-    1,   14,  110, 25,  97,  174, 132, 119, 138, 170, 125, 118, 27,  233, 140,
-    51,  87,  197, 177, 107, 234, 169, 56,  68,  30,  7,   173, 73,  188, 40,
-    36,  65,  49,  213, 104, 190, 57,  211, 148, 223, 48,  115, 15,  2,   67,
-    186, 210, 28,  12,  181, 103, 70,  22,  58,  75,  78,  183, 167, 238, 157,
-    124, 147, 172, 144, 176, 161, 141, 86,  60,  66,  128, 83,  156, 241, 79,
-    46,  168, 198, 41,  254, 178, 85,  253, 237, 250, 154, 133, 88,  35,  206,
-    95,  116, 252, 192, 54,  221, 102, 218, 255, 240, 82,  106, 158, 201, 61,
-    3,   89,  9,   42,  155, 159, 93,  166, 80,  50,  34,  175, 195, 100, 99,
-    26,  150, 16,  145, 4,   33,  8,   189, 121, 64,  77,  72,  208, 245, 130,
-    122, 143, 55,  105, 134, 29,  164, 185, 194, 193, 239, 101, 242, 5,   171,
-    126, 11,  74,  59,  137, 228, 108, 191, 232, 139, 6,   24,  81,  20,  127,
-    17,  91,  92,  251, 151, 225, 207, 21,  98,  113, 112, 84,  226, 18,  214,
-    199, 187, 13,  32,  94,  220, 224, 212, 247, 204, 196, 43,  249, 236, 45,
-    244, 111, 182, 153, 136, 129, 90,  217, 202, 19,  165, 231, 71,  230, 142,
-    96,  227, 62,  179, 246, 114, 162, 53,  160, 215, 205, 180, 47,  109, 44,
-    38,  31,  149, 135, 0,   216, 52,  63,  23,  37,  69,  39,  117, 146, 184,
-    163, 200, 222, 235, 248, 243, 219, 10,  152, 131, 123, 229, 203, 76,  120,
-    209};
-
-char *Dictionary::strings = NULL;
-char *Dictionary::strp = NULL;
-unsigned Dictionary::strsize = 0;
-
-Dictionary::Dictionary(int nb, int ns, int nc) {
-  int i;
-
-  // allocate buckets for names
-  bucket = new DictEntry *[nb];
-  if (bucket == NULL) panic((const char *)"can't alloc buckets");
-
-  // Initialize buckets for names
-  nbuckets = nb;
-  for (i = 0; i < nb; i++) bucket[i] = NULL;
-
-  // allocate a scope list for the start of each scope list
-  scope = new DictEntry *[ns];
-  if (scope == NULL) panic("can't alloc scopes");
-
-  // allocate an endScope list for the end of each scope list
-  endScope = new DictEntry *[ns];
-  if (endScope == NULL) panic("can't alloc endScope");
-
-  // Initialize scopes and endscopes
-  nscopes = ns;
-  for (i = 0; i < ns; i++) {
-    scope[i] = NULL;
-    endScope[i] = NULL;
-  }
-
-  currentScope = 0;
-
-  strsize = nc;
-  strings = new char[nc];
-  strp = strings;
-}
-
-Dictionary::~Dictionary() {
-  delete[] bucket;
-  delete[] scope;
-  delete[] endScope;
-  nbuckets = nscopes = 0;
-  currentScope = -1;
-}
-
-/* Hashing function described in                   */
-/* "Fast Hashing of Variable-Length Text Strings," */
-/* by Peter K. Pearson, CACM, June 1990.           */
-int Dictionary::hash(const char *string) {
-  int hash1 = 0;
-  int hash2 = 0;
-  int length = 0;
-  int r = 0;
-
-  while (*string != 0) {
-    length++;
-    /* Hash function is XOR of successive characters randomized by
-     * the hash table.
-     */
-    hash1 ^= randomNumbers[static_cast<int>(*string++)];
-    if (*string != 0) hash2 ^= randomNumbers[static_cast<int>(*string++)];
-  }
-  r = (hash1 << 8) | hash2;
-  return r;
-}
-
-/* Return ptr to 1st entry found in table under key
- * (return NULL if none found).
- */
-DictEntry *Dictionary::lookup(const char *key, CPPSymbol::ObjectType tp) {
-  // tp is type to be looked for
-  // Default, 0, is to look for any symbol irrespective of type
-  // Each new DictEntry is stored at start of its list so most
-  // recent additions are reached first
-  // DictEntry *q;
-  CPPSymbol *q;
-  // int scope = getCurrentScopeIndex();
-  // if(sc != -1)
-  //		scope = sc;
-
-  int h = hash(key) % nbuckets;
-  q = (CPPSymbol *)bucket[h];
-
-  for (; q != NULL; q = (CPPSymbol *)q->getNext()) {
-    // printf("Dictionary.cpp lookup symbol %s in scope %d current scope %d\n",
-    //	q->getKey(),q->this_scope,getCurrentScopeIndex());
-    if (h != q->getHashCode()) {
-      fprintf(stderr,
-              "dictionary.cpp lookup, h not equal to q->getHashCode() for %s\n",
-              key);
-    }
-
-    if (h == q->getHashCode() && strcmp(key, q->getKey()) == 0) {
-      if (tp == 0) {  // Search for first matching symbol
-        return q;
-      } else {
-        CPPSymbol::ObjectType type = q->getType();
-        if (tp == CPPSymbol::otTypename)  // Search for first type name
-        {
-          if (type == CPPSymbol::otTypedef || type == CPPSymbol::otEnum ||
-              type == CPPSymbol::otClass || type == CPPSymbol::otStruct ||
-              type == CPPSymbol::otUnion) {
-            return q;
-          }
-        } else if (tp ==
-                   CPPSymbol::otNonTypename)  // Search for first non type name
-        {
-          if (type == CPPSymbol::otVariable || type == CPPSymbol::otFunction) {
-            return q;
-          }
-        } else if (type == tp) {  // Search for first symbol with specific type
-          return q;
-        } else {
-          return NULL;
-        }
-      }
-    }
-  }
-  return NULL;
-}
-
-void Dictionary::define(const char *key, DictEntry *entry) {
-  defineInScope(key, entry, currentScope);
-}
-
-void Dictionary::defineInScope(const char *key, DictEntry *entry, int sc) {
-  int h = hash(key) % nbuckets;  // July 2005, nbuckets = 4001 See CPP_parser.g
-  // printf("Dictionary.cpp defineInScope key %s hash(key) %d bucket %d scope
-  // %d\n",
-  //	key,hash(key),h,sc);
-  entry->this_scope = sc;
-  entry->setKey(strdup(key));  // Make a local copy of key
-  entry->setHashCode(h);
-  entry->setNext(bucket[h]);  // Set next pointer to current entry in bucket
-  bucket[h] = entry;          // Replace current entry in bucket
-  if (endScope[sc] == NULL) {
-    scope[sc] = endScope[sc] = entry;
-  } else {
-    endScope[sc]->setScope(entry);
-    endScope[sc] = entry;
-  }
-}
-
-int Dictionary::getCurrentScopeIndex() { return currentScope; }
-
-DictEntry *Dictionary::getCurrentScope() {
-  if (currentScope < 0 || currentScope > nscopes) {
-    panic("getCurrentScope: no scope");
-  }
-  return scope[currentScope];
-}
-
-void Dictionary::saveScope() {
-  // Advance scope number (for included scope)
-  if (currentScope < nscopes) currentScope++;
-  /*
-  if ( currentScope>=nscopes )
-    panic( "saveScope: overflow" );
-  */
-  // printf("Dictionary saveScope entered. Scope now %d\n",currentScope);
-}
-
-void Dictionary::restoreScope() {
-  // Reduce scope number for next highest scope
-  // if ( currentScope==0 )
-  //  panic( "restoreScope: underflow" );
-  if (currentScope > 0) currentScope--;
-  // printf("Dictionary restoreScope entered. Scope now %d\n",currentScope);
-}
-
-/*	This unlinks all entries from the Dictionary that are members
- *	of the current scope.  The scope level is not restored to the previous
- *	scope however. This requires use of restoreScope() above
- */
-DictEntry *Dictionary::removeScope(int sc) {
-  DictEntry *de, *r;
-  if (sc == -1) {  // removeScope() without parameter value defaults sc to -1
-    sc = currentScope;
-  }
-  for (de = scope[sc]; de != NULL; de = de->getNextInScope()) {
-    remove(de);
-  }
-  r = scope[sc];
-  scope[sc] = endScope[sc] = NULL;
-  return r;
-}
-
-//	Remove this dictEntry from its bucket by unlinking it
-DictEntry *Dictionary::remove(DictEntry *de) {
-  DictEntry *prev, *curr;
-  if (de == NULL) panic("Dictionary.cpp remove: NULL ptr");
-  int h = hash(de->getKey()) % nbuckets;  // Find pointer to bucket
-  for (prev = NULL, curr = bucket[h]; curr != NULL;
-       prev = curr, curr = curr->getNext()) {
-    if (de == curr) {
-      if (prev == NULL) {
-        bucket[h] = de->getNext();
-      } else {
-        prev->setNext(de->getNext());
-      }
-      de->setNext(NULL);
-      return de;
-    }
-  }
-  return NULL;  // should never get here...
-}
-
-/*	Lookup the object referred to by 'key' and then physically remove
- *	it from the Dictionary.  Return the object referred to by the key.
- *	If more than one definition is found for 'key', then only the
- *	first one is removed.  Return NULL if not found.
- *  Note: DW 12/06/03 Probably not used
- */
-DictEntry *Dictionary::remove(char *key) {
-  DictEntry *q, *prev;
-
-  int h = hash(key) % nbuckets;
-  for (prev = NULL, q = bucket[h]; q != NULL; prev = q, q = q->getNext()) {
-    if (h == q->getHashCode() && strcmp(key, q->getKey()) == 0) {
-      if (prev == NULL) {
-        bucket[h] = q->getNext();
-      } else {
-        prev->setNext(q->getNext());
-      }
-      q->setNext(NULL);
-      return q;
-    }
-  }
-  return NULL;  // should never get here, but make compiler happy
-}
-
-void Dictionary::dumpScope(FILE *f, int sc) {
-  DictEntry *s;
-
-  if (sc == -1) {  // dumpScope() without parameter value defaults sc to -1
-    sc = currentScope;
-  }
-  for (s = scope[sc]; s != NULL; s = s->getNextInScope()) {
-    dumpSymbol(f, s);
-  }
-}
-
-// This is overridden in CPPDictionary.hpp
-void Dictionary::dumpSymbol(FILE *f, DictEntry *de) {
-  fprintf(f, "%s\n", de->getKey());
-}
-
-// Diagnostic function
-// Contents of first 10 scopes printed
-void Dictionary::dumpScopes() {
-  DictEntry *dictEntry;
-  int i;
-
-  printf("Scopes");
-  for (i = 0; i < 10; i++) {
-    printf("     %d     ", i);
-  }
-  printf("\n");
-  printf(" first");
-  for (i = 0; i < 10; i++) {
-    if (scope[i] != NULL) {
-      dictEntry = scope[i];
-      printf("%10s ", dictEntry->getKey());
-    } else {
-      printf("           ");
-    }
-  }
-  printf("\n");
-  printf(" last ");
-  for (i = 0; i < 10; i++) {
-    if (endScope[i] != NULL) {
-      dictEntry = endScope[i];
-      printf("%10s ", dictEntry->getKey());
-    } else {
-      printf("           ");
-    }
-  }
-  printf("\n");
-}
-
-/* Add a string to the string table and return a pointer to it.
- * Bump the pointer into the string table to next avail position.
- */
-char *Dictionary::strdup(const char *s) {
-  char *start = strp;
-  if (s == NULL) panic("strdup: NULL string");
-  if (start + strlen(s) + 1 > &(strings[strsize - 2])) {
-    panic("string table overflow");
-  }
-  while (*s != '\0') {
-    *strp++ = *s++;
-  }
-  *strp++ = '\0';
-  return start;
-}
-
-void Dictionary::panic(const char *err) {
-  fprintf(stdout, "Dictionary panic: %s\n", err);
-  exit(-1);
-}
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.hpp
deleted file mode 100644
index d5b6c40..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/Dictionary.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * Requires PCCTS 1.32b4 or higher to get past ANTLR.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/*
- * Dictionary.h -- A cool hash table
- *
- * Terence Parr
- * Parr Research Corporation
- * January 1995
- */
-/* 1999-2005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-#ifndef Dictionary_hpp
-#define Dictionary_hpp
-
-#include <iostream>
-#include "DictEntry.hpp"
-#include "CPPSymbol.hpp"
-
-class Dictionary {
- protected:
-  DictEntry **scope, **endScope;
-  int nscopes, currentScope;
-  DictEntry **bucket;
-  int nbuckets;
-  static unsigned char randomNumbers[];
-  static char *strings;
-  static char *strp;
-  static unsigned strsize;
-
-  virtual void dumpSymbol(FILE *, DictEntry *);
-
- public:
-  Dictionary(int nb = 43, int ns = 60, int nc = 30000);
-  virtual ~Dictionary();
-  virtual int hash(const char *s);
-  DictEntry *lookup(const char *,
-                    CPPSymbol::ObjectType type = CPPSymbol::otInvalid);
-  void define(const char *, DictEntry *);
-  void defineInScope(const char *, DictEntry *, int);
-  void saveScope();
-  void restoreScope();
-  DictEntry *getCurrentScope();
-  int getCurrentScopeIndex();
-  DictEntry *removeScope(int scope = -1);
-  DictEntry *remove(char *);
-  DictEntry *remove(DictEntry *);
-
-  void dumpScope(FILE *, int scope = -1);
-  void dumpScopes();
-  char *strdup(const char *);
-
-  virtual void panic(const char *);
-};
-
-#endif
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.hpp b/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.hpp
deleted file mode 100644
index e59b6c5..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.hpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef INC_STDCTokenTypes_hpp_
-#define INC_STDCTokenTypes_hpp_
-
-/* $ANTLR 2.7.7 (20130409): "CPP_parser.g" -> "STDCTokenTypes.hpp"$ */
-
-#ifndef CUSTOM_API
-#define CUSTOM_API
-#endif
-
-#ifdef __cplusplus
-struct CUSTOM_API STDCTokenTypes {
-#endif
-  enum {
-    EOF_ = 1,
-    LITERAL_template = 4,
-    LESSTHAN = 5,
-    GREATERTHAN = 6,
-    LITERAL_typedef = 7,
-    SEMICOLON = 8,
-    LITERAL_enum = 9,
-    ID = 10,
-    LCURLY = 11,
-    LITERAL_inline = 12,
-    LITERAL_friend = 13,
-    LITERAL_namespace = 14,
-    LITERAL_antlrTrace_on = 15,
-    LITERAL_antlrTrace_off = 16,
-    RCURLY = 17,
-    ASSIGNEQUAL = 18,
-    COLON = 19,
-    LITERAL_extern = 20,
-    StringLiteral = 21,
-    LITERAL_struct = 22,
-    LITERAL_union = 23,
-    LITERAL_class = 24,
-    LITERAL__stdcall = 25,
-    LITERAL___stdcall = 26,
-    LITERAL_GFEXCLUDE = 27,
-    LITERAL_GFINCLUDE = 28,
-    LITERAL_GFID = 29,
-    LITERAL_GFUNREAD = 30,
-    LITERAL_GFARRAYSIZE = 31,
-    LPAREN = 32,
-    RPAREN = 33,
-    LITERAL_GFARRAYSIZES = 34,
-    LITERAL_GFARRAYELEMSIZE = 35,
-    LITERAL_auto = 36,
-    LITERAL_register = 37,
-    LITERAL_static = 38,
-    LITERAL_mutable = 39,
-    LITERAL__inline = 40,
-    LITERAL___inline = 41,
-    LITERAL_virtual = 42,
-    LITERAL_explicit = 43,
-    LITERAL_typename = 44,
-    LITERAL_char = 45,
-    LITERAL_wchar_t = 46,
-    LITERAL_bool = 47,
-    LITERAL_short = 48,
-    LITERAL_int = 49,
-    // "_int8" = 50
-    // "__int8" = 51
-    // "int8_t" = 52
-    // "_int16" = 53
-    // "__int16" = 54
-    // "int16_t" = 55
-    // "_int32" = 56
-    // "__int32" = 57
-    // "int32_t" = 58
-    // "_int64" = 59
-    // "__int64" = 60
-    // "int64_t" = 61
-    // "uint8_t" = 62
-    // "uint16_t" = 63
-    // "uint32_t" = 64
-    // "uint64_t" = 65
-    // "_w64" = 66
-    // "__w64" = 67
-    LITERAL_long = 68,
-    LITERAL_signed = 69,
-    LITERAL_unsigned = 70,
-    LITERAL_float = 71,
-    LITERAL_double = 72,
-    LITERAL_void = 73,
-    LITERAL__declspec = 74,
-    LITERAL___declspec = 75,
-    LITERAL_const = 76,
-    LITERAL___const = 77,
-    LITERAL_volatile = 78,
-    LITERAL___volatile__ = 79,
-    LITERAL_GFIGNORE = 80,
-    COMMA = 81,
-    LITERAL_public = 82,
-    LITERAL_protected = 83,
-    LITERAL_private = 84,
-    OPERATOR = 85,
-    LITERAL_this = 86,
-    LITERAL_true = 87,
-    LITERAL_false = 88,
-    OCTALINT = 89,
-    LSQUARE = 90,
-    RSQUARE = 91,
-    TILDE = 92,
-    STAR = 93,
-    AMPERSAND = 94,
-    ELLIPSIS = 95,
-    LITERAL_throw = 96,
-    LITERAL_using = 97,
-    LITERAL_case = 98,
-    LITERAL_default = 99,
-    LITERAL_if = 100,
-    LITERAL_else = 101,
-    LITERAL_switch = 102,
-    LITERAL_while = 103,
-    LITERAL_do = 104,
-    LITERAL_for = 105,
-    LITERAL_goto = 106,
-    LITERAL_continue = 107,
-    LITERAL_break = 108,
-    LITERAL_return = 109,
-    LITERAL_try = 110,
-    LITERAL_catch = 111,
-    LITERAL_asm = 112,
-    LITERAL__asm = 113,
-    LITERAL___asm = 114,
-    LITERAL___asm__ = 115,
-    TIMESEQUAL = 116,
-    DIVIDEEQUAL = 117,
-    MINUSEQUAL = 118,
-    PLUSEQUAL = 119,
-    MODEQUAL = 120,
-    SHIFTLEFTEQUAL = 121,
-    SHIFTRIGHTEQUAL = 122,
-    BITWISEANDEQUAL = 123,
-    BITWISEXOREQUAL = 124,
-    BITWISEOREQUAL = 125,
-    QUESTIONMARK = 126,
-    OR = 127,
-    AND = 128,
-    BITWISEOR = 129,
-    BITWISEXOR = 130,
-    NOTEQUAL = 131,
-    EQUAL = 132,
-    LESSTHANOREQUALTO = 133,
-    GREATERTHANOREQUALTO = 134,
-    SHIFTLEFT = 135,
-    SHIFTRIGHT = 136,
-    PLUS = 137,
-    MINUS = 138,
-    DIVIDE = 139,
-    MOD = 140,
-    DOTMBR = 141,
-    POINTERTOMBR = 142,
-    PLUSPLUS = 143,
-    MINUSMINUS = 144,
-    LITERAL_sizeof = 145,
-    LITERAL___alignof__ = 146,
-    SCOPE = 147,
-    DOT = 148,
-    POINTERTO = 149,
-    LITERAL_dynamic_cast = 150,
-    LITERAL_static_cast = 151,
-    LITERAL_reinterpret_cast = 152,
-    LITERAL_const_cast = 153,
-    LITERAL_typeid = 154,
-    DECIMALINT = 155,
-    HEXADECIMALINT = 156,
-    CharLiteral = 157,
-    WCharLiteral = 158,
-    WStringLiteral = 159,
-    FLOATONE = 160,
-    FLOATTWO = 161,
-    NOT = 162,
-    LITERAL_new = 163,
-    LITERAL__cdecl = 164,
-    LITERAL___cdecl = 165,
-    LITERAL__near = 166,
-    LITERAL___near = 167,
-    LITERAL__far = 168,
-    LITERAL___far = 169,
-    LITERAL___interrupt = 170,
-    LITERAL_pascal = 171,
-    LITERAL__pascal = 172,
-    LITERAL___pascal = 173,
-    LITERAL_delete = 174,
-    Whitespace = 175,
-    Comment = 176,
-    CPPComment = 177,
-    PREPROC_DIRECTIVE = 178,
-    LineDirective = 179,
-    Space = 180,
-    Pragma = 181,
-    Error = 182,
-    EndOfLine = 183,
-    Escape = 184,
-    Digit = 185,
-    Decimal = 186,
-    LongSuffix = 187,
-    UnsignedSuffix = 188,
-    FloatSuffix = 189,
-    Exponent = 190,
-    Vocabulary = 191,
-    Number = 192,
-    NULL_TREE_LOOKAHEAD = 3
-  };
-#ifdef __cplusplus
-};
-#endif
-#endif /*INC_STDCTokenTypes_hpp_*/
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.txt b/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.txt
deleted file mode 100755
index fd6567a..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/STDCTokenTypes.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-// $ANTLR 2.7.7 (20130409): CPP_parser.g -> STDCTokenTypes.txt$
-STDC    // output token vocab name
-LITERAL_template="template"=4
-LESSTHAN=5
-GREATERTHAN=6
-LITERAL_typedef="typedef"=7
-SEMICOLON=8
-LITERAL_enum="enum"=9
-ID=10
-LCURLY=11
-LITERAL_inline="inline"=12
-LITERAL_friend="friend"=13
-LITERAL_namespace="namespace"=14
-LITERAL_antlrTrace_on="antlrTrace_on"=15
-LITERAL_antlrTrace_off="antlrTrace_off"=16
-RCURLY=17
-ASSIGNEQUAL=18
-COLON=19
-LITERAL_extern="extern"=20
-StringLiteral=21
-LITERAL_struct="struct"=22
-LITERAL_union="union"=23
-LITERAL_class="class"=24
-LITERAL__stdcall="_stdcall"=25
-LITERAL___stdcall="__stdcall"=26
-LITERAL_GFEXCLUDE="GFEXCLUDE"=27
-LITERAL_GFINCLUDE="GFINCLUDE"=28
-LITERAL_GFID="GFID"=29
-LITERAL_GFUNREAD="GFUNREAD"=30
-LITERAL_GFARRAYSIZE="GFARRAYSIZE"=31
-LPAREN=32
-RPAREN=33
-LITERAL_GFARRAYSIZES="GFARRAYSIZES"=34
-LITERAL_GFARRAYELEMSIZE="GFARRAYELEMSIZE"=35
-LITERAL_auto="auto"=36
-LITERAL_register="register"=37
-LITERAL_static="static"=38
-LITERAL_mutable="mutable"=39
-LITERAL__inline="_inline"=40
-LITERAL___inline="__inline"=41
-LITERAL_virtual="virtual"=42
-LITERAL_explicit="explicit"=43
-LITERAL_typename="typename"=44
-LITERAL_char="char"=45
-LITERAL_wchar_t="wchar_t"=46
-LITERAL_bool="bool"=47
-LITERAL_short="short"=48
-LITERAL_int="int"=49
-"_int8"=50
-"__int8"=51
-"int8_t"=52
-"_int16"=53
-"__int16"=54
-"int16_t"=55
-"_int32"=56
-"__int32"=57
-"int32_t"=58
-"_int64"=59
-"__int64"=60
-"int64_t"=61
-"uint8_t"=62
-"uint16_t"=63
-"uint32_t"=64
-"uint64_t"=65
-"_w64"=66
-"__w64"=67
-LITERAL_long="long"=68
-LITERAL_signed="signed"=69
-LITERAL_unsigned="unsigned"=70
-LITERAL_float="float"=71
-LITERAL_double="double"=72
-LITERAL_void="void"=73
-LITERAL__declspec="_declspec"=74
-LITERAL___declspec="__declspec"=75
-LITERAL_const="const"=76
-LITERAL___const="__const"=77
-LITERAL_volatile="volatile"=78
-LITERAL___volatile__="__volatile__"=79
-LITERAL_GFIGNORE="GFIGNORE"=80
-COMMA=81
-LITERAL_public="public"=82
-LITERAL_protected="protected"=83
-LITERAL_private="private"=84
-OPERATOR="operator"=85
-LITERAL_this="this"=86
-LITERAL_true="true"=87
-LITERAL_false="false"=88
-OCTALINT=89
-LSQUARE=90
-RSQUARE=91
-TILDE=92
-STAR=93
-AMPERSAND=94
-ELLIPSIS=95
-LITERAL_throw="throw"=96
-LITERAL_using="using"=97
-LITERAL_case="case"=98
-LITERAL_default="default"=99
-LITERAL_if="if"=100
-LITERAL_else="else"=101
-LITERAL_switch="switch"=102
-LITERAL_while="while"=103
-LITERAL_do="do"=104
-LITERAL_for="for"=105
-LITERAL_goto="goto"=106
-LITERAL_continue="continue"=107
-LITERAL_break="break"=108
-LITERAL_return="return"=109
-LITERAL_try="try"=110
-LITERAL_catch="catch"=111
-LITERAL_asm="asm"=112
-LITERAL__asm="_asm"=113
-LITERAL___asm="__asm"=114
-LITERAL___asm__="__asm__"=115
-TIMESEQUAL=116
-DIVIDEEQUAL=117
-MINUSEQUAL=118
-PLUSEQUAL=119
-MODEQUAL=120
-SHIFTLEFTEQUAL=121
-SHIFTRIGHTEQUAL=122
-BITWISEANDEQUAL=123
-BITWISEXOREQUAL=124
-BITWISEOREQUAL=125
-QUESTIONMARK=126
-OR=127
-AND=128
-BITWISEOR=129
-BITWISEXOR=130
-NOTEQUAL=131
-EQUAL=132
-LESSTHANOREQUALTO=133
-GREATERTHANOREQUALTO=134
-SHIFTLEFT=135
-SHIFTRIGHT=136
-PLUS=137
-MINUS=138
-DIVIDE=139
-MOD=140
-DOTMBR=141
-POINTERTOMBR=142
-PLUSPLUS=143
-MINUSMINUS=144
-LITERAL_sizeof="sizeof"=145
-LITERAL___alignof__="__alignof__"=146
-SCOPE=147
-DOT=148
-POINTERTO=149
-LITERAL_dynamic_cast="dynamic_cast"=150
-LITERAL_static_cast="static_cast"=151
-LITERAL_reinterpret_cast="reinterpret_cast"=152
-LITERAL_const_cast="const_cast"=153
-LITERAL_typeid="typeid"=154
-DECIMALINT=155
-HEXADECIMALINT=156
-CharLiteral=157
-WCharLiteral=158
-WStringLiteral=159
-FLOATONE=160
-FLOATTWO=161
-NOT=162
-LITERAL_new="new"=163
-LITERAL__cdecl="_cdecl"=164
-LITERAL___cdecl="__cdecl"=165
-LITERAL__near="_near"=166
-LITERAL___near="__near"=167
-LITERAL__far="_far"=168
-LITERAL___far="__far"=169
-LITERAL___interrupt="__interrupt"=170
-LITERAL_pascal="pascal"=171
-LITERAL__pascal="_pascal"=172
-LITERAL___pascal="__pascal"=173
-LITERAL_delete="delete"=174
-Whitespace=175
-Comment=176
-CPPComment=177
-PREPROC_DIRECTIVE("a preprocessor directive")=178
-LineDirective=179
-Space=180
-Pragma=181
-Error=182
-EndOfLine=183
-Escape=184
-Digit=185
-Decimal=186
-LongSuffix=187
-UnsignedSuffix=188
-FloatSuffix=189
-Exponent=190
-Vocabulary=191
-Number=192
diff --git a/contrib/pdxautoserializer/src/impl/CPPParser/Support.cpp b/contrib/pdxautoserializer/src/impl/CPPParser/Support.cpp
deleted file mode 100644
index 9ba33b3..0000000
--- a/contrib/pdxautoserializer/src/impl/CPPParser/Support.cpp
+++ /dev/null
@@ -1,894 +0,0 @@
-/*
- * PUBLIC DOMAIN PCCTS-BASED C++ GRAMMAR (cplusplus.g, stat.g, expr.g)
- *
- * Authors: Sumana Srinivasan, NeXT Inc.;            sumana_srinivasan@next.com
- *          Terence Parr, Parr Research Corporation; parrt@parr-research.com
- *          Russell Quong, Purdue University;        quong@ecn.purdue.edu
- *
- * VERSION 1.1
- *
- * SOFTWARE RIGHTS
- *
- * This file is a part of the ANTLR-based C++ grammar and is free
- * software.  We do not reserve any LEGAL rights to its use or
- * distribution, but you may NOT claim ownership or authorship of this
- * grammar or support code.  An individual or company may otherwise do
- * whatever they wish with the grammar distributed herewith including the
- * incorporation of the grammar or the output generated by ANTLR into
- * commerical software.  You may redistribute in source or binary form
- * without payment of royalties to us as long as this header remains
- * in all source distributions.
- *
- * We encourage users to develop parsers/tools using this grammar.
- * In return, we ask that credit is given to us for developing this
- * grammar.  By "credit", we mean that if you incorporate our grammar or
- * the generated code into one of your programs (commercial product,
- * research project, or otherwise) that you acknowledge this fact in the
- * documentation, research report, etc....  In addition, you should say nice
- * things about us at every opportunity.
- *
- * As long as these guidelines are kept, we expect to continue enhancing
- * this grammar.  Feel free to send us enhancements, fixes, bug reports,
- * suggestions, or general words of encouragement at parrt@parr-research.com.
- *
- * NeXT Computer Inc.
- * 900 Chesapeake Dr.
- * Redwood City, CA 94555
- * 12/02/1994
- *
- * Restructured for public consumption by Terence Parr late February, 1995.
- *
- * DISCLAIMER: we make no guarantees that this grammar works, makes sense,
- *             or can be used to do anything useful.
- */
-/*
- * 2001-2003 Version 2.0 September 2003
- *
- * Some modifications were made to this file to support a project by
- * Jianguo Zuo and David Wigg at
- * The Centre for Systems and Software Engineering
- * South Bank University
- * London, UK.
- * wiggjd@bcs.ac.uk
- * blackse@lsbu.ac.uk
- *
- * These C++ functions are required to support the correct functioning of
- *	the CPP_parser.g definition of the C++ language.
-*/
-/* 2003-2004 Version 3.0 July 2004
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- */
-/* 2004-1005 Version 3.1 November 2005
- * Modified by David Wigg at London South Bank University for CPP_parser.g
- *
- * See MyReadMe.txt for further information
- *
- * This file is best viewed in courier font with tabs set to 4 spaces
- */
-
-extern "C" {
-#ifndef WIN32
-#include <unistd.h>
-#endif
-}
-
-#include <iostream>
-#include <stdio.h>
-#include <string.h>
-#include "../CPPParser/CPPParser.hpp"
-
-extern int
-    statementTrace;  // Used to control selected tracing at statement level
-//	for testing and program verification purposes
-
-// Shorthand for a string of (qualifiedItemIs()==xxx||...)
-int CPPParser::qualifiedItemIsOneOf(
-    QualifiedItem qiFlags,  // Ored combination of flags
-    int lookahead_offset) {
-  QualifiedItem qi = qualifiedItemIs(lookahead_offset);
-  return (qi & qiFlags) != 0;
-}
-
-// This is an important function, but will be replaced with
-// an enhanced predicate in the future, once predicates
-// and/or predicate guards can contain loops.
-//
-// Scan past the ::T::B:: to see what lies beyond.
-// Return qiType if the qualified item can pose as type name.
-// Note that T::T is NOT a type; it is a constructor.  Also,
-// class T { ... T...} yields the enclosed T as a ctor.  This
-// is probably a type as I separate out the constructor defs/decls,
-// I want it consistent with T::T.
-//
-// In the below examples, I use A,B,T and example types, and
-// a,b as example ids.
-// In the below examples, any A or B may be a
-// qualified template, i.e.,  A<...>
-//
-// T::T outside of class T yields qiCtor.
-// T<...>::T outside of class T yields qiCtor.
-// T inside of class T {...} yields qiCtor.
-// T, ::T, A::T outside of class T yields qiType.
-// a, ::a,  A::B::a yields qiId
-// a::b yields qiInvalid
-// ::operator, operator, A::B::operator yield qiOPerator
-// A::*, A::B::* yield qiPtrMember
-// ::*, * yields qiInvalid
-// ::~T, ~T, A::~T yield qiDtor
-// ~a, ~A::a, A::~T::, ~T:: yield qiInvalid
-
-CPPParser::QualifiedItem CPPParser::qualifiedItemIs(int lookahead_offset) {
-  int offset = lookahead_offset + 1;
-  int final_type_idx = 0;
-  // Skip leading "::"
-  if (LT(offset)->getType() == SCOPE) {
-    offset++;
-  }
-  // Skip sequences of T:: or T<...>::
-  // DW 11/02/05 Note that LT(offset)->getType() is not a "type" but a type of
-  // token, eg. ID
-  // printf("support.cpp qualifiedItemIs while reached offset %d %s type %d
-  // isType %d, isClass %d, guessing %d\n",
-  //	offset,(LT(offset)->getText()).data(),LT(offset)->getType(),isTypeName((LT(offset)->getText()).data()),isClassName((LT(offset)->getText()).data()),inputState->guessing);
-  while (LT(offset)->getType() == ID &&
-         isTypeName((LT(offset)->getText()).data())) {  // If this type is the
-                                                        // same as the last
-                                                        // type, then ctor
-    if (final_type_idx != 0 &&
-        strcmp((LT(final_type_idx)->getText()).data(),
-               (LT(offset)->getText()).data()) == 0) {  // Like T::T
-      // As an extra check, do not allow T::T::
-      if (LT(offset + 1)->getType() == SCOPE) {  // printf("support.cpp
-                                                 // qualifiedItemIs qiInvalid
-                                                 // returned\n");
-        return qiInvalid;
-      } else {  // printf("support.cpp qualifiedItemIs qiCtor_1 returned %s %s
-                // %s \n",
-        // enclosingClass,(LT(lookahead_offset+1)->getText()).data(),
-        //(LT(final_type_idx)->getText()).data());
-        return qiCtor;
-      }
-    }
-
-    // Record this as the most recent type seen in the series
-    final_type_idx = offset;
-
-    // Skip this token
-    offset++;
-
-    // Skip over any template qualifiers <...>
-    // I believe that "T<..." cannot be anything valid but a template
-    if (LT(offset)->getType() == LESSTHAN) {
-      if (!skipTemplateQualifiers(offset)) {  // printf("support.cpp
-                                              // qualifiedItemIs qiInvalid_2
-                                              // returned\n");
-        return qiInvalid;
-      }
-      // printf("support.cpp qualifiedItemIs template skipped, offset
-      // %d\n",offset);
-      // offset has been updated to token following <...>
-    }
-
-    // Skip any "::" and keep going
-    if (LT(offset)->getType() == SCOPE) {
-      offset++;
-    }
-    // Otherwise series terminated -- last ID in the sequence was a type
-    else {
-      // Return ctor if last type is in containing class
-      // We already checked for T::T inside loop
-      if (strcmp(enclosingClass, (LT(final_type_idx)->getText()).data()) ==
-          0) {  // Like class T  T()
-        // printf("support.cpp qualifiedItemIs qiCtor_2 returned %s %s %s\n",
-        //	enclosingClass,(LT(lookahead_offset+1)->getText()).data(),
-        //	(LT(final_type_idx)->getText()).data());
-        return qiCtor;
-      } else {  // printf("support.cpp qualifiedItemIs qiType returned\n");
-        return qiType;
-      }
-    }
-  }
-
-  // LT(offset) is not an ID, or it is an ID but not a typename.
-  // printf("support.cpp qualifiedItemIs second switch reached with type
-  // %d\n",LT(offset)->getType());
-  switch (LT(offset)->getType()) {
-    case ID:
-      // ID but not a typename
-      // Do not allow id::
-      if (LT(offset + 1)->getType() == SCOPE) {
-        // printf("support.cpp qualifiedItemIs qiInvalid_3 returned\n");
-        return qiInvalid;
-      }
-      if (strcmp(enclosingClass, (LT(offset)->getText()).data()) ==
-          0) {  // Like class T  T()
-        // printf("support.cpp qualifiedItemIs qiCtor_3 returned
-        // %s\n",enclosingClass);
-        return qiCtor;
-      } else {
-        if (isTypeName((LT(offset)->getText()).data())) {
-          return qiType;
-        } else {
-          // printf("support.cpp qualifiedItemIs qiVar returned\n");
-          return qiVar;  // DW 19/03/04 was qiVar Could be function, qiFun?
-        }
-      }
-    case TILDE:
-      // check for dtor
-      if (LT(offset + 1)->getType() == ID &&
-          isTypeName((LT(offset + 1)->getText()).data()) &&
-          LT(offset + 2)->getType() != SCOPE) {  // Like ~B or A::B::~B
-        // Also (incorrectly?) matches ::~A.
-        // printf("support.cpp qualifiedItemIs qiDtor returned\n");
-        return qiDtor;
-      } else {  // ~a or ~A::a is qiInvalid
-        // printf("support.cpp qualifiedItemIs qiInvalid_4 returned\n");
-        return qiInvalid;
-      }
-      break;
-    case STAR:
-      // Like A::*
-      // Do not allow * or ::*
-      if (final_type_idx == 0) {  // Haven't seen a type yet
-        // printf("support.cpp qualifiedItemIs qiInvalid_5 returned\n");
-        return qiInvalid;
-      } else {  // printf("support.cpp qualifiedItemIs qiPtrMember returned\n");
-        return qiPtrMember;
-      }
-    case OPERATOR:
-      // Like A::operator, ::operator, or operator
-      // printf("support.cpp qualifiedItemIs qiOperator returned\n");
-      return qiOperator;
-    default:
-      // Something that neither starts with :: or ID, or
-      // a :: not followed by ID, operator, ~, or *
-      // printf("support.cpp qualifiedItemIs qiInvalid_6 returned\n");
-      return qiInvalid;
-  }
-}
-
-// Skip over <...>.  This correctly handles nested <> and (), e.g:
-//    <T>
-//    < (i>3) >
-//    < T2<...> >
-// but not
-//    < i>3 >
-//
-// On input, kInOut is the index of the "<"
-// On output, if the return is true, then
-//                kInOut is the index of the token after ">"
-//            else
-//                kInOut is unchanged
-int CPPParser::skipTemplateQualifiers(int &kInOut) {  // Start after "<"
-  int offset = kInOut + 1;
-
-  while (LT(offset)->getType() != GREATERTHAN)  // scan to end of <...>
-  {
-    switch (LT(offset)->getType()) {
-      case EOF:
-        return 0;
-      case LESSTHAN:
-        if (!skipTemplateQualifiers(offset)) {
-          return 0;
-        }
-        break;
-      case LPAREN:
-        if (!skipNestedParens(offset)) {
-          return 0;
-        }
-        break;
-      default:
-        offset++;  // skip everything else
-        break;
-    }
-    if (offset > MaxTemplateTokenScan) {
-      return 0;
-    }
-  }
-
-  // Update output argument to point past ">"
-  kInOut = offset + 1;
-  return 1;
-}
-
-// Skip over (...).  This correctly handles nested (), e.g:
-//    (i>3, (i>5))
-//
-// On input, kInOut is the index of the "("
-// On output, if the return is true, then
-//                kInOut is the index of the token after ")"
-//            else
-//                kInOut is unchanged
-int CPPParser::skipNestedParens(int &kInOut) {  // Start after "("
-  int offset = kInOut + 1;
-
-  while (LT(offset)->getType() != RPAREN)  // scan to end of (...)
-  {
-    switch (LT(offset)->getType()) {
-      case EOF:
-        return 0;
-      case LPAREN:
-        if (!skipNestedParens(offset)) {
-          return 0;
-        }
-        break;
-      default:
-        offset++;  // skip everything else
-        break;
-    }
-    if (offset > MaxTemplateTokenScan) {
-      return 0;
-    }
-  }
-
-  // Update output argument to point past ")"
-  kInOut = offset + 1;
-  return 1;
-}
-
-// Return true if "::blah" or "foo::bar<args>::..." found.
-int CPPParser::scopedItem(int k) {
-  // printf("support.cpp scopedItem k %d\n",k);
-  return (LT(k)->getType() == SCOPE ||
-          (LT(k)->getType() == ID && !finalQualifier(k)));
-}
-
-// Return true if ID<...> or ID is last item in qualified item list.
-// Return false if LT(k) is not an ID.
-// ID must be a type to check for ID<...>,
-// or else we would get confused by "i<3"
-int CPPParser::finalQualifier(int k) {
-  if (LT(k)->getType() == ID) {
-    if (isTypeName((LT(k)->getText()).data()) &&
-        LT(k + 1)->getType() == LESSTHAN) {  // Starts with "T<".  Skip <...>
-      k++;
-      skipTemplateQualifiers(k);
-    } else {  // skip ID;
-      k++;
-    }
-    return (LT(k)->getType() != SCOPE);
-  } else {  // not an ID
-    return 0;
-  }
-}
-
-/*
- * Return true if 's' can pose as a type name
- */
-int CPPParser::isTypeName(
-    const char *s) {  // printf("isTypeName entered with %s\n",s);
-  // To look for any type name only
-  return 1;
-  /*
-  CPPSymbol *cs = ( CPPSymbol * ) symbols->lookup( s,CPPSymbol::otTypename );
-
-  if ( cs==NULL )
-  {
-    printf("support.cpp isTypeName %s not found\n",s);
-    return 0;
-  }
-
-  // This should now be redundant
-  if ( cs->getType()==CPPSymbol::otTypedef||
-       cs->getType()==CPPSymbol::otEnum||
-       cs->getType()==CPPSymbol::otClass||
-       cs->getType()==CPPSymbol::otStruct||
-       cs->getType()==CPPSymbol::otUnion )
-  {
-    return 1;
-  }
-
-  return 0;
-  */
-}
-
-/*
- * Return true if 's' is a class name (or a struct which is a class
- * with all members public).
- */
-int CPPParser::isClassName(const char *s) {
-  return 1;
-  /*
-  // To look for any type name omly
-  CPPSymbol *cs = ( CPPSymbol * ) symbols->lookup( s,CPPSymbol::otTypename );
-
-  if ( cs==NULL )
-  {
-    printf("support.cpp isClassName %s not found\n",s);
-    return 0;
-  }
-
-  if ( cs->getType()==CPPSymbol::otClass||
-       cs->getType()==CPPSymbol::otStruct||
-       cs->getType()==CPPSymbol::otUnion )
-  {
-    return 1;
-  }
-
-  return 0;
-  */
-}
-
-void CPPParser::beginDeclaration() {}
-
-void CPPParser::endDeclaration() {}
-
-void CPPParser::beginFunctionDefinition() { functionDefinition = 1; }
-
-void CPPParser::endFunctionDefinition() {
-  // Remove parameter scope
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  // printf("endFunctionDefinition remove parameter
-  // scope(%d):\n",symbols->getCurrentScopeIndex());
-  symbols->removeScope();   // Remove symbols stored in current scope
-  symbols->restoreScope();  // Reduce currentScope (higher level)
-  // printf("endFunctionDefinition restoreScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-  functionDefinition = 0;
-}
-
-void CPPParser::beginConstructorDefinition() { functionDefinition = 1; }
-
-void CPPParser::endConstructorDefinition() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-  // printf("endConstructorDefinition restoreScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-  functionDefinition = 0;
-}
-
-void CPPParser::beginConstructorDeclaration(const char *ctor) {}
-
-void CPPParser::endConstructorDeclaration() {}
-
-void CPPParser::beginDestructorDefinition() { functionDefinition = 1; }
-
-void CPPParser::endDestructorDefinition() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-  // printf("endDestructorDefinition restoreScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-  functionDefinition = 0;
-}
-
-void CPPParser::beginDestructorDeclaration(const char *dtor) {}
-
-void CPPParser::endDestructorDeclaration() {}
-
-void CPPParser::beginParameterDeclaration() {}
-
-void CPPParser::beginFieldDeclaration() {}
-
-void CPPParser::declarationSpecifier(bool td, bool fd, StorageClass sc,
-                                     TypeQualifier tq, TypeSpecifier ts,
-                                     FunctionSpecifier fs) {
-  // printf("support.cpp declarationSpecifier td %d, fd %d, sc %d, tq %d, ts %d,
-  // fs %d\n",
-  //	td,fd,sc,tq,ts,fs);
-  _td = td;  // For typedef
-  _fd = fd;  // For friend
-  _sc = sc;
-  _tq = tq;
-  _ts = ts;
-  _fs = fs;
-}
-
-/* Symbols from declarators are added to the symbol table here.
- * The symbol is added to external scope or whatever the current scope is, in
- * the symbol table.
- * See list of object types below.
- */
-void CPPParser::declaratorID(const char *id, QualifiedItem qi) {
-  // printf("declaratorID  entered for %s\n",id);
-  CPPSymbol *c;
-  // printf("support.cpp declaratorID line %d %s found, _ts = %d, _td = %d, qi =
-  // %d\n",
-  //        LT(1)->getLine(),id,_ts,_td,qi);
-  if (qi == qiType || qi == qiNamespace)  // Check for type declaration
-  {
-    c = new CPPSymbol(id, CPPSymbol::otTypedef);
-    if (c == NULL) panic("can't alloc CPPSymbol");
-    symbols->defineInScope(id, c, externalScope);
-    if (statementTrace >= 2) {
-      printf(
-          "%d support.cpp declaratorID declare %s in external scope 1, "
-          "ObjectType %d\n",
-          LT(1)->getLine(), id, c->getType());
-    }
-    // DW 04/08/03 Scoping not fully implemented
-    // Typedefs all recorded in 'external' scope and therefor never removed
-  } else if (qi == qiFun)  // Check for function declaration
-  {
-    c = new CPPSymbol(id, CPPSymbol::otFunction);
-    if (c == NULL) panic("can't alloc CPPSymbol");
-    symbols->define(id, c);  // Add to current scope
-    if (statementTrace >= 2) {
-      printf(
-          "%d support.cpp declaratorID declare %s in current scope %d, "
-          "ObjectType %d\n",
-          LT(1)->getLine(), id, symbols->getCurrentScopeIndex(), c->getType());
-    }
-  } else {
-    if (qi != qiVar) {
-      fprintf(
-          stderr,
-          "%d support.cpp declaratorID warning qi (%d) not qiVar (%d) for %s\n",
-          LT(1)->getLine(), qi, qiVar, id);
-    }
-
-    c = new CPPSymbol(id, CPPSymbol::otVariable);
-    if (c == NULL) panic("can't alloc CPPSymbol");
-    symbols->define(id, c);  // Add to current scope
-    if (statementTrace >= 2) {
-      printf(
-          "%d support.cpp declaratorID declare %s in current scope %d, "
-          "ObjectType %d\n",
-          LT(1)->getLine(), id, symbols->getCurrentScopeIndex(), c->getType());
-    }
-  }
-}
-/* These are the object types
-        0 = otInvalid
-        1 = otFunction
-        2 = otVariable
-        3 = otTypedef	Note. 3-7 are type names
-        4 = otStruct	Note. 4, 5 & 7 are class names
-        5 = otUnion
-        6 = otEnum
-        7 = otClass
-   10 = otTypename
-   11 = otNonTypename
-*/
-
-void CPPParser::declaratorArray() {}
-
-void CPPParser::declaratorParameterList(int def) {
-  symbols->saveScope();  // Advance currentScope (lower level)
-  // printf("declaratorParameterList saveScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-}
-
-void CPPParser::declaratorEndParameterList(int def) {
-  if (!def) {
-    symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-    symbols->removeScope();      // Remove symbols stored in current scope
-    symbols->restoreScope();     // Reduce currentScope (higher level)
-    // printf("declaratorEndParameterList restoreScope() now
-    // %d\n",symbols->getCurrentScopeIndex());
-  }
-}
-
-void CPPParser::functionParameterList() {
-  symbols->saveScope();  // Advance currentScope (lower level)
-  // printf("functionParameterList saveScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-  // DW 25/3/97 change flag from function to parameter list
-  functionDefinition = 2;
-}
-
-void CPPParser::functionEndParameterList(int def) {
-  // If this parameter list is not in a definition then this
-  if (!def) {
-    symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-    symbols->removeScope();      // Remove symbols stored in current scope
-    symbols->restoreScope();     // Reduce currentScope (higher level)
-    // printf("functionEndParameterList restoreScope() now
-    // %d\n",symbols->getCurrentScopeIndex());
-  } else {
-    // Change flag from parameter list to body of definition
-    functionDefinition = 3;
-  }
-  // Otherwise endFunctionDefinition removes the parameters from scope
-}
-
-void CPPParser::enterNewLocalScope() {
-  symbols->saveScope();  // Advance currentScope (lower level)
-  // printf("enterNewLocalScope saveScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-}
-
-void CPPParser::exitLocalScope() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-  // printf("exitLocalScope restoreScope() now
-  // %d\n",symbols->getCurrentScopeIndex());
-}
-
-void CPPParser::enterExternalScope() {  // Scope has been initialised to 1 in
-                                        // CPPParser.init() in CPPParser.hpp
-  functionDefinition = 0;
-}
-
-void CPPParser::exitExternalScope() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope s/b 2
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope s/b 1
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-
-  if (symbols->getCurrentScopeIndex() == 0) {
-    if (statementTrace >= 2) {
-      fprintf(stdout, "\nSupport exitExternalScope, scope now %d as required\n",
-              symbols->getCurrentScopeIndex());
-    }
-  } else {
-    fprintf(stderr, "\nSupport exitExternalScope, scope now %d, should be 0\n",
-            symbols->getCurrentScopeIndex());
-  }
-}
-
-void CPPParser::classForwardDeclaration(TypeSpecifier ts, FunctionSpecifier fs,
-                                        const char *tag)
-// classForwardDeclaration(const char *tag, TypeSpecifier ts, FunctionSpecifier
-// fs)
-{
-  CPPSymbol *c = NULL;
-
-  // if already in symbol table as a class, don't add
-  // of course, this is incorrect as you can rename
-  // classes by entering a new scope, but our limited
-  // example basically keeps all types globally visible.
-  if (symbols->lookup(tag, CPPSymbol::otTypename) != NULL) {
-    CPPSymbol *cs = (CPPSymbol *)symbols->lookup(tag, CPPSymbol::otTypename);
-    if (statementTrace >= 2) {
-      printf(
-          "%d support.cpp classForwardDeclaration %s already stored in "
-          "dictionary, ObjectType %d\n",
-          LT(1)->getLine(), tag, cs->getType());
-    }
-    return;
-  }
-
-  switch (ts) {
-    case tsSTRUCT:
-      c = new CPPSymbol(tag, CPPSymbol::otStruct);
-      break;
-    case tsUNION:
-      c = new CPPSymbol(tag, CPPSymbol::otUnion);
-      break;
-    case tsCLASS:
-      c = new CPPSymbol(tag, CPPSymbol::otClass);
-      break;
-  }
-
-  if (c == NULL) panic("can't alloc CPPSymbol");
-
-  symbols->defineInScope(tag, c, externalScope);
-  if (statementTrace >= 2) {
-    printf(
-        "%d support.cpp classForwardDeclaration declare %s in external scope, "
-        "ObjectType %d\n",
-        LT(1)->getLine(), tag, c->getType());
-  }
-
-  // If it's a friend class forward decl, put in global scope also.
-  // DW 04/07/03 No need if already in external scope. See above.
-  // if ( ds==dsFRIEND )
-  //	{
-  //	CPPSymbol *ext_c = new CPPSymbol(tag, CPPSymbol::otClass);
-  //	if ( ext_c==NULL ) panic("can't alloc CPPSymbol");
-  //	if ( symbols->getCurrentScopeIndex()!=externalScope )	// DW 04/07/03
-  // Not sure this test is really necessary
-  //		{
-  //		printf("classForwardDeclaration
-  // defineInScope(externalScope)\n");
-  //		symbols->defineInScope(tag, ext_c, externalScope);
-  //		}
-  //	}
-}
-
-void CPPParser::exitNamespaceScope() {}
-
-void CPPParser::beginClassDefinition(TypeSpecifier ts, const char *tag) {
-  CPPSymbol *c = NULL;
-
-  // if already in symbol table as a class, don't add
-  // of course, this is incorrect as you can rename
-  // classes by entering a new scope, but our limited
-  // example basically keeps all types globally visible.
-  if (symbols->lookup(tag, CPPSymbol::otTypename) != NULL) {
-    symbols->saveScope();  // still have to use scope to collect members
-    // printf("support.cpp beginClassDefinition_1 saveScope() now
-    // %d\n",symbols->getCurrentScopeIndex());
-    if (statementTrace >= 2) {
-      printf(
-          "%d support.cpp beginClassDefinition classname %s already in "
-          "dictionary\n",
-          LT(1)->getLine(), tag);
-    }
-    return;
-  }
-
-  switch (ts) {
-    case tsSTRUCT:
-      c = new CPPSymbol(tag, CPPSymbol::otStruct);
-      break;
-    case tsUNION:
-      c = new CPPSymbol(tag, CPPSymbol::otUnion);
-      break;
-    case tsCLASS:
-      c = new CPPSymbol(tag, CPPSymbol::otClass);
-      break;
-  }
-  if (c == NULL) panic("can't alloc CPPSymbol");
-
-  symbols->defineInScope(tag, c, externalScope);
-
-  if (statementTrace >= 2) {
-    printf(
-        "%d support.cpp beginClassDefinition define %s in external scope (1), "
-        "ObjectType %d\n",
-        LT(1)->getLine(), tag, c->getType());
-  }
-
-  strcat(qualifierPrefix, tag);
-  strcat(qualifierPrefix, "::");
-
-  // add all member type symbols into the global scope (not correct, but
-  // will work for most code).
-  // This symbol lives until the end of the file
-  symbols->saveScope();  // Advance currentScope (lower level)
-}
-
-void CPPParser::endClassDefinition() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-  // remove final T:: from A::B::C::T::
-  // upon backing out of last class, qualifierPrefix is set to ""
-  char *p = &(qualifierPrefix[strlen(qualifierPrefix) - 3]);
-  while (p > &(qualifierPrefix[0]) && *p != ':') {
-    p--;
-  }
-  if (p > &(qualifierPrefix[0])) p++;
-  *p = '\0';
-}
-
-void CPPParser::enumElement(const char *e) {}
-
-void CPPParser::beginEnumDefinition(
-    const char *e) {  // DW 26/3/97 Set flag for new class
-
-  // add all enum tags into the global scope (not correct, but
-  // will work for most code).
-  // This symbol lives until the end of the file
-  CPPSymbol *c = new CPPSymbol(e, CPPSymbol::otEnum);
-  symbols->defineInScope(e, c, externalScope);
-  if (statementTrace >= 2) {
-    printf(
-        "%d support.cpp beginEnumDefinition %s define in external scope, "
-        "ObjectType %d\n",
-        LT(1)->getLine(), e, c->getType());
-  }
-}
-
-void CPPParser::endEnumDefinition() {}
-
-void CPPParser::templateTypeParameter(const char *t) {
-  // DW 11/06/03 Symbol saved in templateParameterScope (0)
-  //  as a temporary measure until scope is implemented fully
-  // This symbol lives until the end of the file
-  CPPSymbol *e = new CPPSymbol(t, CPPSymbol::otTypedef);  // DW 22/03/05
-  //	CPPSymbol *e = new CPPSymbol(t, CPPSymbol::otClass);
-  if (e == NULL) panic("can't alloc CPPSymbol");
-  //	symbols->defineInScope(t, e, templateParameterScope);	// DW 22/03/05
-  // DW 10/08/05 Replaced to make template parameters local
-  symbols->defineInScope(t, e, externalScope);
-  //	symbols->define(t,e);	// Save template parameter in local scope
-  if (statementTrace >= 2) {
-    //		printf("%d support.cpp templateTypeParameter declare %s in
-    // parameter
-    // scope (0), ObjectType %d\n",
-    printf(
-        "%d support.cpp templateTypeParameter declare %s in  external scope "
-        "(1), ObjectType %d\n",
-        LT(1)->getLine(), t, e->getType());
-  }
-  //		printf("%d support.cpp templateTypeParameter declare %s in
-  // current
-  // scope %d, ObjectType %d\n",
-  //			LT(1)->getLine(),t,symbols->getCurrentScopeIndex(),e->getType());
-}
-
-void CPPParser::beginTemplateDeclaration() {
-  symbols->saveScope();  // Advance currentScope (lower level)
-  // printf("Support beginTemplateDeclaration, Scope now
-  // %d\n",symbols->getCurrentScopeIndex());
-}
-
-void CPPParser::endTemplateDeclaration() {
-  symbols->dumpScope(stdout);  // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();      // Remove symbols stored in current scope
-  symbols->restoreScope();     // Reduce currentScope (higher level)
-  // printf("Support endTemplateDeclaration, Scope now
-  // %d\n",symbols->getCurrentScopeIndex());
-}
-
-void CPPParser::beginTemplateDefinition() {}
-
-void CPPParser::endTemplateDefinition() {}
-
-void CPPParser::beginTemplateParameterList() {
-  // DW 26/05/03 To scope template parameters
-  symbols->saveScope();  // Advance currentScope (lower level)
-}
-
-void CPPParser::endTemplateParameterList() {
-  // DW 26/05/03 To end scope template parameters
-  symbols->restoreScope();  // Reduce currentScope (higher level)
-}
-
-void CPPParser::exceptionBeginHandler() {}
-
-void CPPParser::exceptionEndHandler() {  // remove parm elements from the
-                                         // handler scope
-  symbols->dumpScope(stdout);            // Diagnostic - See CPPDictionary.hpp
-  symbols->removeScope();   // Remove symbols stored in current scope
-  symbols->restoreScope();  // Reduce currentScope (higher level)
-}
-
-void CPPParser::end_of_stmt() {
-#ifdef MYCODE
-  myCode_end_of_stmt();
-#endif  // MYCODE
-}
-
-void CPPParser::panic(const char *err) {
-  fprintf(stdout, "CPPParser: %s\n", err);
-  _exit(-1);
-}
-
-/* DW 090204 leave out of support.cpp for the time being
-// want to see how supplied routine in LLkParser works first
-void CPPParser::
-tracein(char *r)
-{
-// testing
-        printf("support tracein entered\n");
-        getchar();
-   if ( !doTracing ) return;
-   for (int i=1; i<=traceIndentLevel; i++)
-           fprintf(stdout, " ");
-   traceIndentLevel++;
-   fprintf(stdout, "enter %s('%s %s')%s\n",
-      r,
-      (LT(1)->getText()).data(),
-      (LT(2)->getText()).data(),
-      inputState->guessing?" [guessing]":""
-   );
-   fflush(stdout);
-}
-
-void CPPParser::
-traceout(char *r)
-{
-   if ( !doTracing ) return;
-   traceIndentLevel--;
-   for (int i=1; i<=traceIndentLevel; i++)
-           fprintf(stdout, " ");
-   fprintf(stdout, "exit %s('%s %s')%s\n",
-      r,
-      (LT(1)->getText()).data(),
-      (LT(2)->getText()).data(),
-      inputState->guessing?" [guessing]":""
-   );
-   fflush(stdout);
-}
-*/
-
-//	Functions which may be overridden by MyCode subclass
-
-void CPPParser::myCode_pre_processing(int argc, char *argv[]) {}
-
-void CPPParser::myCode_post_processing() {}
-
-void CPPParser::myCode_end_of_stmt() {}
-
-void CPPParser::myCode_function_direct_declarator(const char *id) {
-  // printf("support myCode_function_direct_declarator entered for %s\n",id);
-}
diff --git a/contrib/pdxautoserializer/src/impl/Helper.cpp b/contrib/pdxautoserializer/src/impl/Helper.cpp
deleted file mode 100644
index edbea45..0000000
--- a/contrib/pdxautoserializer/src/impl/Helper.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../base_types.hpp"
-#include "Helper.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-void Helper::splitString(const std::string& str, const std::string& delim,
-                         StringVector& splitStr) {
-  std::string::size_type offset = 0;
-  std::string::size_type delimIndex;
-
-  while ((delimIndex = str.find(delim, offset)) != std::string::npos) {
-    splitStr.push_back(str.substr(offset, delimIndex - offset));
-    offset += delimIndex - offset + delim.length();
-  }
-  splitStr.push_back(str.substr(offset));
-}
-
-std::string Helper::stringReplace(const std::string& source,
-                                  const std::string& findStr,
-                                  const std::string& replaceStr) {
-  std::string resultStr;
-  std::string::const_iterator srcIterator = source.begin();
-  while (srcIterator != source.end()) {
-    bool matchFound = true;
-    std::string::const_iterator matchIterator = srcIterator;
-    std::string::const_iterator findIterator = findStr.begin();
-    while (findIterator != findStr.end()) {
-      if (matchIterator == source.end() ||
-          *matchIterator++ != *findIterator++) {
-        matchFound = false;
-        break;
-      }
-    }
-    if (matchFound) {
-      resultStr += replaceStr;
-      srcIterator = matchIterator;
-    } else {
-      resultStr += *srcIterator;
-      ++srcIterator;
-    }
-  }
-  return resultStr;
-}
-
-bool Helper::getSingleProperty(PropertyMap& properties, const std::string& name,
-                               std::string& value) {
-  PropertyMap::iterator propertyFind = properties.find(name);
-  if (propertyFind != properties.end()) {
-    if (propertyFind->second.size() == 1) {
-      value = propertyFind->second[0];
-    }
-    properties.erase(propertyFind);
-    return true;
-  }
-  return false;
-}
-
-bool Helper::getMultiProperty(PropertyMap& properties, const std::string& name,
-                              StringVector& value) {
-  PropertyMap::iterator propertyFind = properties.find(name);
-  if (propertyFind != properties.end()) {
-    value = propertyFind->second;
-    properties.erase(propertyFind);
-    return true;
-  }
-  return false;
-}
-
-void Helper::deleteASClasses(ASClassVector& classes) {
-  for (ASClassVector::const_iterator classIterator = classes.begin();
-       classIterator != classes.end(); ++classIterator) {
-    delete *classIterator;
-  }
-  classes.clear();
-}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/impl/Helper.hpp b/contrib/pdxautoserializer/src/impl/Helper.hpp
deleted file mode 100644
index a25ac06..0000000
--- a/contrib/pdxautoserializer/src/impl/Helper.hpp
+++ /dev/null
@@ -1,191 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_IMPL_HELPER_H_
-#define GEODE_PDXAUTOSERIALIZER_IMPL_HELPER_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../InputParser.hpp"
-#include <algorithm>
-#include <cctype>
-#include <sstream>
-
-// TODO cmake what is the purpose of only doing this on GNU? #ifdef __GNUC__
-#if !defined(_WIN32)
-extern "C" {
-#include <cxxabi.h>
-#include <stdlib.h>
-#include <string.h>
-}
-#endif
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * Class containing some static utility methods.
- */
-class Helper {
- public:
-  /**
-   * Set the various fields for a <code>TypeInfo</code> object.
-   *
-   * @param type Pointer to the type whose fields have to be set.
-   * @param kind The kind (using the constants defined in
-   *             <code>TypeKind</code>) for the type.
-   * @param modified The modifier (using the constants defined in
-   *                 <code>TypeModifier</code> for the type.
-   * @param nameOrSize The name or size of this type.
-   * @param child Child type of this, if any.
-   */
-  inline static void setTypeInfo(TypeInfo* type, const int kind,
-                                 const int modifier,
-                                 const std::string& nameOrSize,
-                                 const std::string& nameOfArrayElemSize,
-                                 TypeInfo* children, int numChildren) {
-    type->m_kind = kind;
-    type->m_modifier = modifier;
-    type->m_nameOrSize = nameOrSize;
-    type->m_nameOfArrayElemSize = nameOfArrayElemSize;
-    type->m_children = children;
-    type->m_numChildren = numChildren;
-  }
-
-  /**
-   *  Convert a given string to lower-case.
-   *
-   * @param str The string to be converted.
-   * @return The string converted to lower-case.
-   */
-  inline static std::string toLower(const std::string& str) {
-    std::string strLower = str;
-    std::transform(strLower.begin(), strLower.end(), strLower.begin(),
-                   (int (*)(int))std::tolower);
-    return strLower;
-  }
-
-  /**
-   * Convenience function to split a given string on the given delimiter.
-   *
-   * @param str The string to be split.
-   * @param delim The delimiter to be used for splitting the string.
-   * @param splitStr The vector containing the split portions of string.
-   */
-  static void splitString(const std::string& str, const std::string& delim,
-                          StringVector& splitStr);
-
-  /**
-   * Replace all the occurances of a sequence with a given string.
-   * Right now uses a simple sliding window algorithm.
-   *
-   * @param source The string to search in.
-   * @param findStr The sequence to search for in <code>source</code>.
-   * @param replaceStr The replacement string.
-   * @return The result string after replacing all occurances of
-   *         <code>findStr</code> with <code>replaceStr</code> in
-   *         <code>source</code>.
-   */
-  static std::string stringReplace(const std::string& source,
-                                   const std::string& findStr,
-                                   const std::string& replaceStr);
-
-  /**
-   * Template function to convert between different types when possible.
-   * Tries to emulate the function of same name provided by the boost
-   * library.
-   *
-   * @param val The source to be converted.
-   * @param dest The destination that shall contain the conversion.
-   */
-  template <typename TDest, class TSrc>
-  inline static void lexical_cast(const TSrc& src, TDest& dest) {
-    std::stringstream ss;
-    if (!(ss << src && ss >> dest && ss >> std::ws && ss.eof())) {
-      throw std::invalid_argument("Conversion failed.");
-    }
-  }
-
-  /**
-   * Get a property with single value and erase from the property map.
-   *
-   * @param properties The property map. If the property is found in
-   *                   the map then it is erased.
-   * @param name The name of the property to obtain.
-   * @param value The value of the property. It should have a single
-   *              value else this is not filled in.
-   * @return True if the property was found in the map.
-   */
-  static bool getSingleProperty(PropertyMap& properties,
-                                const std::string& name, std::string& value);
-
-  /**
-   * Get a property with multiple values and erase from the property map.
-   *
-   * @param properties The property map. If the property is found in
-   *                   the map then it is erased.
-   * @param name The name of the property to obtain.
-   * @param value The value vector for the property.
-   * @return True if the property was found in the map.
-   */
-  static bool getMultiProperty(PropertyMap& properties, const std::string& name,
-                               StringVector& value);
-
-  /**
-   * Cleanup the vector of allocated <code>ClassInfo</code> objects.
-   *
-   * @param classes The vector of <code>ClassInfo</code>es.
-   */
-  static void deleteASClasses(ASClassVector& classes);
-
-  /**
-   * Get the typename after demangling (if required) the name returned
-   * by <code>typeid</code> for a given object.
-   *
-   * @param obj The object whose type name is required.
-   * @return The type name of the given object.
-   */
-  template <typename T>
-  static std::string typeName(const T& obj) {
-    const char* typeidName = typeid(obj).name();
-    std::string typeName;
-#ifdef __GNUC__
-    int status;
-    char* demangledName = abi::__cxa_demangle(typeidName, NULL, NULL, &status);
-    if (status == 0 && demangledName != NULL) {
-      typeName = demangledName;
-      free(demangledName);
-    }
-#endif
-    if (typeName.length() == 0) {
-      typeName = typeidName;
-    }
-    const char* classPrefix = "class ";
-    size_t classPrefixLen = ::strlen(classPrefix);
-    if (typeName.substr(0, classPrefixLen) == classPrefix) {
-      typeName = typeName.substr(classPrefixLen);
-    }
-    return typeName;
-  }
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_IMPL_HELPER_H_
diff --git a/contrib/pdxautoserializer/src/impl/Log.cpp b/contrib/pdxautoserializer/src/impl/Log.cpp
deleted file mode 100644
index ade30cb..0000000
--- a/contrib/pdxautoserializer/src/impl/Log.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "Log.hpp"
-#include <iostream>
-#include <stdexcept>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-static std::ostream* g_outStream = &std::cout;
-static std::ostream* g_errStream = &std::cerr;
-
-void Log::init(std::ostream* outStream, std::ostream* errStream) {
-  g_outStream = outStream;
-  g_errStream = errStream;
-}
-
-void Log::info(const std::string& moduleName, const std::string& message) {
-  *g_outStream << moduleName << ":: " << message << std::endl;
-}
-
-void Log::warn(const std::string& moduleName, const std::string& message) {
-  *g_errStream << moduleName << ":: Warning: " << message << std::endl;
-}
-
-void Log::fatal(const std::string& moduleName, const std::string& message) {
-  throw std::invalid_argument(moduleName + ":: FATAL: " + message);
-}
-
-void Log::debug(const std::string& moduleName, const std::string& message) {
-#ifdef _DEBUG
-  *g_outStream << moduleName << ":: DEBUG: " << message << std::endl;
-#endif
-}
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/contrib/pdxautoserializer/src/impl/Log.hpp b/contrib/pdxautoserializer/src/impl/Log.hpp
deleted file mode 100644
index e2e9a16..0000000
--- a/contrib/pdxautoserializer/src/impl/Log.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_IMPL_LOG_H_
-#define GEODE_PDXAUTOSERIALIZER_IMPL_LOG_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <string>
-#include <iosfwd>
-
-namespace apache {
-namespace geode {
-namespace client {
-namespace pdx_auto_serializer {
-/**
- * This class provides simple static functions to print messages on the
- * console in a uniform manner, or to throw exceptions on fatal conditions.
- */
-class Log {
- public:
-  /**
-   * Initialize the log with the given output and error streams. The
-   * default is to use <code>std::cout</code> and <code>std::cerr</code>
-   * for them respectively.
-   *
-   * @param outStream The output stream to use for logging of
-   *                  <code>Log::info</code> and <code>Log::debug</code>
-   *                  level messages below.
-   * @param errStream The output stream to use for logging of
-   *                  <code>Log::warn</code> level messages.
-   */
-  static void init(std::ostream* outStream, std::ostream* errStream);
-
-  /**
-   * Write info level message on the console.
-   *
-   * @param moduleName The module which needs to print the message.
-   * @param message The message to be printed.
-   */
-  static void info(const std::string& moduleName, const std::string& message);
-
-  /**
-   * Write a warning message on the console.
-   *
-   * @param moduleName The module which needs to print the message.
-   * @param message The message to be printed.
-   */
-  static void warn(const std::string& moduleName, const std::string& message);
-
-  /**
-   * Throw a fatal exception -- for now this uses
-   * <code>std::invalid_argument</code> exception.
-   *
-   * @param moduleName The module which needs to print the message.
-   * @param message The message to be printed.
-   */
-  static void fatal(const std::string& moduleName, const std::string& message);
-
-  /**
-   * Write debug level message on the console. This is only enabled in the
-   * debug build when _DEBUG macro is set.
-   *
-   * @param moduleName The module which needs to print the message.
-   * @param message The message to be printed.
-   */
-  static void debug(const std::string& moduleName, const std::string& message);
-
- private:
-  // The default and copy constructors are never defined.
-  Log();
-  Log(const Log&);
-};
-}  // namespace pdx_auto_serializer
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_PDXAUTOSERIALIZER_IMPL_LOG_H_
diff --git a/contrib/pdxautoserializer/src/impl/Main.cpp b/contrib/pdxautoserializer/src/impl/Main.cpp
deleted file mode 100644
index 42e651f..0000000
--- a/contrib/pdxautoserializer/src/impl/Main.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../base_types.hpp"
-#include "../InputParserFactory.hpp"
-#include "../CodeGeneratorFactory.hpp"
-#include "../CodeGenerator.hpp"
-#include "Log.hpp"
-#include "Helper.hpp"
-#include <iostream>
-
-/**
-* @namespace apache::geode::client::pdx_auto_serializer The namespace containing
-* the
-*                                     auto-serializer classes.
-*/
-using namespace apache::geode::client::pdx_auto_serializer;
-
-/** The name used for invocation of the program on command-line. */
-std::string progName;
-/** The parser factory object. */
-InputParserFactory parserFactory;
-/** The code generator factory object. */
-CodeGeneratorFactory generatorFactory;
-/** The parser returned by the parser factory. */
-InputParser* parser = NULL;
-/** The list of classes given by the parser. */
-ASClassVector classes;
-/** The <code>CodeGenerator</code> object returned by the factory. */
-CodeGenerator* codeGenerator = NULL;
-/**
-* The options with their usage for the tool with current parser and
-* code generator.
-*/
-OptionMap toolOptions;
-
-/** Name of this module. */
-static std::string ModuleName = "PdxAutoSerializer";
-
-/**
-* The option used to specify the language of the code to be auto-serialized.
-*/
-static const std::string LanguageOption = "language";
-
-/**
-* The option used to specify the language in which the auto-serialized code
-* is to be generated.
-*/
-static const std::string GeneratorOption = "generator";
-
-/** The option name for class name. */
-static const std::string ClassNameOption = "className";
-
-/** The option name for class name String */
-static const std::string getClassNameOption = "classNameStr";
-
-/** The option used to obtain usage information. */
-static const std::string UsageOption = "usage";
-
-/** The option for help -- gives same output as usage for now. */
-static const std::string HelpOption = "help";
-
-/** the option for directory to generate auto-generated files */
-static const std::string outDirectoryOption = "outDir";
-
-/** Fill in the default top-level options required for the tool. */
-void addMainOptions();
-
-/**
-* Parse the command-line and get the resource names and the properties.
-*
-* @param argc The number of command-line arguments.
-* @param argv The string array containing the command-line arguments.
-* @param resources The names of the resources.
-* @param properties Output parameter containing the properties as a map.
-*/
-void parseCommandLine(int argc, char** argv, StringVector& resources,
-                      PropertyMap& properties);
-
-/**
-* Show the program usage. If any language/generator has been selected then
-* its options are also shown.
-*/
-void showUsage();
-
-/** Cleanly destroy all the global objects. */
-void cleanupObjects();
-
-/** Cleanup any files or other artifacts in case of abnormal exit. */
-void cleanup();
-
-/**
-* The main entry point of the tool.
-*
-* @param argc The number of command-line arguments.
-* @param argv The string array containing the command-line arguments.
-*/
-
-static void Tokenize(const std::string& str, std::vector<std::string>& tokens,
-                     const std::string& delimiters = " ") {
-  std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
-  std::string::size_type pos = str.find_first_of(delimiters, lastPos);
-  while (std::string::npos != pos || std::string::npos != lastPos) {
-    tokens.push_back(str.substr(lastPos, pos - lastPos));
-    lastPos = str.find_first_not_of(delimiters, pos);
-    pos = str.find_first_of(delimiters, lastPos);
-  }
-}
-int main(int argc, char** argv) {
-  bool success = false;
-  struct CleanUp {
-   private:
-    bool& m_success;
-
-   public:
-    explicit CleanUp(bool& success) : m_success(success) {}
-    ~CleanUp() {
-      if (m_success) {
-        cleanupObjects();
-      } else {
-        cleanup();
-      }
-    }
-  } cleanOnExit(success);
-
-  try {
-    StringVector resources;
-    PropertyMap properties;
-    const std::string languageString = "C++";
-    const std::string generatorString = "C++";
-    StringVector classNames;
-
-    progName = argv[0];
-    std::string::size_type baseIndex = progName.find_last_of("/\\");
-    if (baseIndex != std::string::npos) {
-      progName = progName.substr(baseIndex + 1);
-    }
-    addMainOptions();
-    parseCommandLine(argc, argv, resources, properties);
-    std::map<std::string, std::string> classNameStringMap;
-
-    try {
-      if (languageString.length() > 0 &&
-          (parser = parserFactory.getInstance(languageString)) == NULL) {
-        throw std::invalid_argument("No such language: " + languageString);
-      }
-
-      if (generatorString.length() > 0 &&
-          (codeGenerator = generatorFactory.getInstance(generatorString)) ==
-              NULL) {
-        throw std::invalid_argument("No such code generator: " +
-                                    generatorString);
-      }
-
-      if (parser != NULL) {
-        parser->getOptions(toolOptions);
-      }
-      if (codeGenerator != NULL) {
-        codeGenerator->getOptions(toolOptions);
-      }
-
-      std::string usageString;
-      if (Helper::getSingleProperty(properties, UsageOption, usageString) ||
-          Helper::getSingleProperty(properties, HelpOption, usageString)) {
-        showUsage();
-        return 0;
-      }
-
-      if (parser == NULL) {
-        throw std::invalid_argument("No input language specified.");
-      }
-      if (codeGenerator == NULL) {
-        throw std::invalid_argument("No output language specified.");
-      }
-      if (resources.size() == 0) {
-        throw std::invalid_argument("No input resources specified.");
-      }
-
-      if (!Helper::getMultiProperty(properties, ClassNameOption, classNames) ||
-          classNames.size() == 0) {
-        Log::warn(ModuleName,
-                  "No class name specified; "
-                  "will serialize all classes.");
-      }
-
-      std::string classNameString;
-
-      std::vector<std::string> classNameStringVector;
-
-      Helper::getMultiProperty(properties, getClassNameOption,
-                               classNameStringVector);
-      for (std::vector<std::string>::iterator itr =
-               classNameStringVector.begin();
-           itr != classNameStringVector.end(); ++itr) {
-        std::vector<std::string> eachClassNameVector;
-        Tokenize(*itr, eachClassNameVector, ":");
-        if (eachClassNameVector.size() == 2) {
-          classNameStringMap.insert(std::pair<std::string, std::string>(
-              eachClassNameVector[0], eachClassNameVector[1]));
-        } else {
-          throw std::invalid_argument("No input class name string specified.");
-        }
-      }
-
-      parser->init(properties);
-      parser->selectClasses(resources, classNames);
-      parser->getSelectedClasses(classes);
-
-      codeGenerator->init(properties);
-
-    } catch (const std::exception& ex) {
-      std::cerr << Helper::typeName(ex) << ": " << ex.what() << std::endl;
-      std::cerr << "Use --help or --usage option for help" << std::endl;
-      return 1;
-    }
-
-    if (properties.size() > 0) {
-      showUsage();
-      return 1;
-    }
-
-    Log::info(ModuleName, "Classes being serialized:");
-    for (ASClassVector::const_iterator classIterator = classes.begin();
-         classIterator != classes.end(); ++classIterator) {
-      Log::info(ModuleName, '\t' + (*classIterator)->getName());
-    }
-
-    for (ASClassVector::const_iterator classIterator = classes.begin();
-         classIterator != classes.end(); ++classIterator) {
-      ReferenceVector references;
-      TypeInfo classInfo;
-      VariableVector members;
-      std::string varName = "__var";
-
-      const ClassInfo* currentClass = *classIterator;
-
-      try {
-        currentClass->getTypeInfo(classInfo);
-        codeGenerator->initClass(classInfo);
-      } catch (const std::exception& ex) {
-        std::cerr << Helper::typeName(ex) << ": " << ex.what() << std::endl;
-        std::cerr << "Use --help or --usage option for help" << std::endl;
-        return 1;
-      }
-
-      currentClass->getReferences(references);
-      currentClass->getMembers(members);
-
-      codeGenerator->addFileHeader(argc, argv);
-      codeGenerator->addReferences(references);
-      codeGenerator->startClass(members);
-
-      std::vector<CodeGenerator::Method::Type> methods;
-      methods.push_back(CodeGenerator::Method::TODATA);
-      methods.push_back(CodeGenerator::Method::FROMDATA);
-      for (size_t index = 0; index < methods.size(); ++index) {
-        CodeGenerator::Method::Type method = methods[index];
-        codeGenerator->startMethod(method, varName,
-                                   currentClass->getMethodPrefix());
-        // Adding try block
-        // Ticket #905 Changes starts here
-        codeGenerator->addTryBlockStart(method);
-        // Ticket #905 Changes ends here
-        for (VariableVectorIterator memberIterator = members.begin();
-             memberIterator != members.end(); ++memberIterator) {
-          codeGenerator->genMethod(method, varName, *memberIterator);
-        }
-        // Finish try block
-        // Ticket #905 Changes starts here
-        codeGenerator->finishTryBlock(method);
-        // Ticket #905 Changes ends here
-        codeGenerator->endMethod(method, varName);
-      }
-      codeGenerator->genClassNameMethod(classNameStringMap,
-                                        currentClass->getMethodPrefix());
-      codeGenerator->genCreateDeserializable(currentClass->getMethodPrefix());
-      codeGenerator->genTypeId(currentClass->getMethodPrefix());
-      codeGenerator->endClass();
-    }
-  } catch (const std::invalid_argument& ex) {
-    std::cerr << "Use --help or --usage option for help" << std::endl;
-    return 1;
-  } catch (const std::exception& ex) {
-    std::cerr << Helper::typeName(ex) << ": " << ex.what() << std::endl;
-    return 1;
-  } catch (...) {
-    std::cerr << "Caught an unknown exception." << std::endl;
-    return 1;
-  }
-  success = true;
-  return 0;
-}
-
-void addMainOptions() {
-  std::pair<bool, std::string> optionPair;
-  // std::string languageStr;
-  // StringVector languages = parserFactory.getParsers();
-  // assert(languages.size() > 0);
-  // StringVectorIterator languageIterator = languages.begin();
-  // languageStr = *languageIterator;
-  // while (++languageIterator != languages.end()) {
-  //    languageStr += ',' + *languageIterator;
-  //}
-  // optionPair.first = true;
-  ///*optionPair.second = "Generate code for the given language "
-  //    "-- one of " + languageStr + " (SINGLE)";
-  // toolOptions[LanguageOption] = optionPair;*/
-
-  // std::string generatorStr;
-  // StringVector generators = generatorFactory.getGenerators();
-  // assert(generators.size() > 0);
-  // StringVectorIterator generatorIterator = generators.begin();
-  // generatorStr = *generatorIterator;
-  // while (++generatorIterator != generators.end()) {
-  //    generatorStr += ',' + *generatorIterator;
-  //}
-  /*optionPair.second = "Generate code in the given generator "
-  "-- one of " + generatorStr + " (SINGLE)";
-  toolOptions[GeneratorOption] = optionPair;*/
-
-  optionPair.first = true;
-  optionPair.second =
-      "Name of the class for which to generate "
-      "auto-serialization code (MULTIPLE,OPTIONAL)";
-  toolOptions[ClassNameOption] = optionPair;
-
-  optionPair.first = false;
-  optionPair.second = (std::string) "\t\tThis usage message.";
-  toolOptions[UsageOption] = optionPair;
-
-  optionPair.first = false;
-  optionPair.second = (std::string) "\t\tThis help message.";
-  toolOptions[HelpOption] = optionPair;
-
-  optionPair.first = true;
-  optionPair.second = (std::string) "Name of the class in string representation"
-    "(MULTIPLE,OPTIONAL)";
-  toolOptions[getClassNameOption] = optionPair;
-
-  optionPair.first = false;
-  optionPair.second = (std::string) "\tName of the directory where auto-generated"
-    "files will be written, default is current working directory";
-  toolOptions[outDirectoryOption] = optionPair;
-}
-
-void parseCommandLine(int argc, char** argv, StringVector& resources,
-                      PropertyMap& properties) {
-  if (argc < 2) {
-    throw std::invalid_argument("");
-  }
-  for (int propertyIndex = 1; propertyIndex < argc; propertyIndex++) {
-    char* arg = argv[propertyIndex];
-    if (arg[0] == '-' && arg[1] == '-') {
-      // Is a property value option.
-      std::string prop = arg + 2;
-      std::string propertyName;
-      std::string propertyValue;
-      std::string::size_type valPos;
-      if ((valPos = prop.find('=')) != std::string::npos) {
-        propertyName = prop.substr(0, valPos);
-        propertyValue = prop.substr(valPos + 1);
-      } else {
-        propertyName = prop;
-      }
-      PropertyMap::iterator propertyFind = properties.find(propertyName);
-      if (propertyFind == properties.end()) {
-        StringVector propertyValues;
-        if (propertyValue.length() > 0) {
-          propertyValues.push_back(propertyValue);
-        }
-        properties[propertyName] = propertyValues;
-      } else if (propertyValue.length() > 0) {
-        propertyFind->second.push_back(propertyValue);
-      }
-    } else {
-      resources.push_back(arg);
-    }
-  }
-}
-
-void showUsage() {
-  std::cout << "Usage: " << progName << " [OPTIONS] <resources e.g. "
-                                        "header> ...\n\n";
-
-  std::cout << "Resource name should be the path to the header "
-               "containing the classes to be auto-serialized.\n\n";
-  std::cout
-      << "Options may be one of those given below.\nSINGLE denotes "
-         "that the option should be specified only once.\nMULTIPLE denotes "
-         "that the "
-         "option can be specified more than once.\nOPTIONAL denotes that the "
-         "option may be skipped in which case the default for that shall be "
-         "chosen.";
-  std::cout << '\n' << std::endl;
-  for (OptionMap::const_iterator optionIterator = toolOptions.begin();
-       optionIterator != toolOptions.end(); ++optionIterator) {
-    std::cout << "--" << optionIterator->first;
-    if (optionIterator->second.first) {
-      std::cout << "=VALUE";
-    }
-    std::cout << '\t' << optionIterator->second.second << '\n';
-  }
-  std::cout << std::endl;
-
-  std::cout << "Examples:" << std::endl;
-  std::cout << "\t pdxautoserializer -outDir=<DIR NAME> <RESOURCE>"
-            << std::endl;
-  std::cout
-      << "\t pdxautoserializer -outDir=<DIR NAME> --className=<CLASSNAME1> ";
-  std::cout << "--className=<CLASSNAME2> <RESOURCE>" << std::endl;
-  std::cout << "\t pdxautoserializer -outDir=<DIR NAME> "
-               "--classNameStr=<CLASSNAME1:User defined String> ";
-  std::cout << "--classNameStr=<CLASSNAME:User defined String> <RESOURCE>"
-            << std::endl
-            << std::endl;
-  std::cout << "Helper Macros to be defined in Input Header File : "
-            << std::endl;
-  std::cout << "GFINCLUDE\t for including a specific member for serialization"
-            << std::endl;
-  std::cout << "GFEXCLUDE\t for excluding a specific member for serialization"
-            << std::endl;
-  std::cout << "GFID\t\t for considering a member as Identify Field"
-            << std::endl;
-  std::cout << "GFARRAYSIZE\t for specifying a array length member"
-            << std::endl;
-  std::cout << "GFIGNORE\t for ignoring certain keywords" << std::endl;
-  std::cout << "For more details refer to documentation on this utility."
-            << std::endl;
-}
-
-void cleanupObjects() {
-  Helper::deleteASClasses(classes);
-  if (parser != NULL) {
-    delete parser;
-    parser = NULL;
-  }
-  if (codeGenerator != NULL) {
-    delete codeGenerator;
-    codeGenerator = NULL;
-  }
-}
-
-void cleanup() {
-  if (codeGenerator != NULL) {
-    codeGenerator->cleanup();
-  }
-  cleanupObjects();
-}
diff --git a/cppcache/CMakeLists.txt b/cppcache/CMakeLists.txt
index 5182494..524e52a 100644
--- a/cppcache/CMakeLists.txt
+++ b/cppcache/CMakeLists.txt
@@ -13,9 +13,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.10)
 project(cppcache LANGUAGES CXX)
 
+include(CheckIncludeFile)
+include(CheckFunctionExists)
+
+find_package(Threads)
+if (CMAKE_USE_PTHREADS_INIT)
+  check_include_file("pthread.h" HAVE_PTHREAD_H)
+  check_function_exists("pthread_setname_np" HAVE_pthread_setname_np)
+endif()
+
 set(COMMON_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
 set(COMMON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
 
@@ -86,9 +94,11 @@
 endif()
 
 target_link_libraries(_apache-geode INTERFACE
-  ACE
-  boost
-  libxml2
+  ACE::ACE
+  Boost::boost
+  Boost::filesystem
+  Boost::thread
+  LibXml2::LibXml2
 )
 
 if (USE_PCH)
@@ -118,5 +128,9 @@
 add_subdirectory(static)
 add_subdirectory(test)
 add_subdirectory(internal)
+add_subdirectory(integration)
 add_subdirectory(integration-test)
-add_subdirectory(integration-test-2)
+
+if (BUILD_BENCHMARKS)
+  add_subdirectory(benchmark)
+endif()
\ No newline at end of file
diff --git a/cppcache/README.md b/cppcache/README.md
new file mode 100644
index 0000000..e947804
--- /dev/null
+++ b/cppcache/README.md
@@ -0,0 +1,37 @@
+Contents
+========
+
+
+## Main sources
+
+# include/
+Public include header files for C++ library.
+
+# src/
+Sources for both static and shared C++ library.
+
+# shared/
+Shared library definition only. Should not contain any sources.
+
+# static/
+Static library definition only. Should not contain any sources.
+
+
+## Test and Benchmark sources
+
+# integration/
+Integration syle tests, benchmarks, and common sources. These are all "modern"
+single process style and shoult not use any of the "legacy" multiple process
+framework.
+
+## integrtion-test/
+Legacy integration tests written in the multiple process framework. No new tests
+should be added to this collections. Fixes and rewrites should be migrated to
+the new framework in the _integration/test_ directory metioned above.
+
+## test/
+Unit style tests.
+
+## benchmark/
+Unit style or micro benchmark tests.
+
diff --git a/contrib/pdxautoserializer/src/CMakeLists.txt b/cppcache/benchmark/CMakeLists.txt
similarity index 70%
rename from contrib/pdxautoserializer/src/CMakeLists.txt
rename to cppcache/benchmark/CMakeLists.txt
index 895cd74..5461abe 100644
--- a/contrib/pdxautoserializer/src/CMakeLists.txt
+++ b/cppcache/benchmark/CMakeLists.txt
@@ -4,24 +4,31 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(pdxautoserializer)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
+add_executable(cpp-benchmark
+  main.cpp
+  GeodeHashBM.cpp
+  )
 
-add_executable(pdxautoserializer ${SOURCES})
-target_link_libraries(pdxautoserializer
+target_link_libraries(cpp-benchmark
+  PUBLIC
+    apache-geode-static
+    benchmark::benchmark
   PRIVATE
-    antlr
-)
+    _WarningsAsError
+  )
 
-install(TARGETS pdxautoserializer DESTINATION bin)
-include_directories(${CMAKE_SOURCE_DIR}/../../src/cppcache/include)
+target_include_directories(cpp-benchmark
+  PRIVATE
+  $<TARGET_PROPERTY:apache-geode-static,SOURCE_DIR>/../src
+  )
+
+add_clangformat(cpp-benchmark)
diff --git a/cppcache/benchmark/GeodeHashBM.cpp b/cppcache/benchmark/GeodeHashBM.cpp
new file mode 100644
index 0000000..2aa8c9d
--- /dev/null
+++ b/cppcache/benchmark/GeodeHashBM.cpp
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <benchmark/benchmark.h>
+
+#include <geode/CacheableString.hpp>
+
+#include "util/string.hpp"
+
+using apache::geode::client::to_utf16;
+using apache::geode::client::to_utf8;
+using apache::geode::client::internal::geode_hash;
+
+template <class ToString, class FromString>
+ToString convert(const FromString& from);
+
+template <>
+std::string convert(const std::u32string& from) {
+  return to_utf8(from);
+}
+
+template <>
+std::u16string convert(const std::u32string& from) {
+  return to_utf16(from);
+}
+
+template <class String, char32_t UnicodeChar>
+void GeodeHashBM(benchmark::State& state) {
+  const std::u32string u32String(state.range(0), UnicodeChar);
+  const String string = convert<String>(u32String);
+
+  for (auto _ : state) {
+    int hashcode;
+    benchmark::DoNotOptimize(hashcode = geode_hash<String>{}(string));
+  }
+}
+
+constexpr char32_t LATIN_CAPITAL_LETTER_C = U'\U00000043';
+constexpr char32_t INVERTED_EXCLAMATION_MARK = U'\U000000A1';
+constexpr char32_t SAMARITAN_PUNCTUATION_ZIQAA = U'\U00000838';
+constexpr char32_t LINEAR_B_SYLLABLE_B008_A = U'\U00010000';
+
+BENCHMARK_TEMPLATE(GeodeHashBM, std::string, LATIN_CAPITAL_LETTER_C)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, LATIN_CAPITAL_LETTER_C)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::string, INVERTED_EXCLAMATION_MARK)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, INVERTED_EXCLAMATION_MARK)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::string, SAMARITAN_PUNCTUATION_ZIQAA)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, SAMARITAN_PUNCTUATION_ZIQAA)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::string, LINEAR_B_SYLLABLE_B008_A)
+    ->Range(8, 8 << 10);
+BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, LINEAR_B_SYLLABLE_B008_A)
+    ->Range(8, 8 << 10);
diff --git a/cppcache/integration-test-2/framework/Framework.cpp b/cppcache/benchmark/main.cpp
similarity index 93%
rename from cppcache/integration-test-2/framework/Framework.cpp
rename to cppcache/benchmark/main.cpp
index fe6942a..782f521 100644
--- a/cppcache/integration-test-2/framework/Framework.cpp
+++ b/cppcache/benchmark/main.cpp
@@ -15,4 +15,6 @@
  * limitations under the License.
  */
 
-#include "Framework.h"
+#include <benchmark/benchmark.h>
+
+BENCHMARK_MAIN();
diff --git a/cppcache/include/geode/Exception.hpp b/cppcache/include/geode/Exception.hpp
index 2df6d3f..8bde954 100644
--- a/cppcache/include/geode/Exception.hpp
+++ b/cppcache/include/geode/Exception.hpp
@@ -33,9 +33,11 @@
 
 class StackTrace;
 
+#if defined(_MSC_VER)
 // Ignore C4275 - This class extends std C++ class
 #pragma warning(push)
 #pragma warning(disable : 4275)
+#endif
 
 /**
  * A description of an exception that occurred during a cache operation.
@@ -73,7 +75,9 @@
   std::shared_ptr<StackTrace> stack_;
 };
 
+#if defined(_MSC_VER)
 #pragma warning(pop)
+#endif
 
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/util/functional.cpp b/cppcache/include/geode/HashMapOfPools.hpp
similarity index 73%
rename from cppcache/src/util/functional.cpp
rename to cppcache/include/geode/HashMapOfPools.hpp
index c526eaf..75cd5ab 100644
--- a/cppcache/src/util/functional.cpp
+++ b/cppcache/include/geode/HashMapOfPools.hpp
@@ -15,25 +15,18 @@
  * limitations under the License.
  */
 
-#include <codecvt>
-#include <locale>
+#pragma once
+
+#include <memory>
 #include <string>
-
-#include <geode/internal/functional.hpp>
-
-#include "string.hpp"
+#include <unordered_map>
 
 namespace apache {
 namespace geode {
 namespace client {
-namespace internal {
+class Pool;
 
-int32_t geode_hash<std::string>::operator()(const std::string& val) {
-  // TODO string optimize without conversion to UTF-16
-  return geode_hash<std::u16string>{}(to_utf16(val));
-}
-
-}  // namespace internal
+using HashMapOfPools = std::unordered_map<std::string, std::shared_ptr<Pool>>;
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/PoolManager.hpp b/cppcache/include/geode/PoolManager.hpp
index fe57e04..058a9bb 100644
--- a/cppcache/include/geode/PoolManager.hpp
+++ b/cppcache/include/geode/PoolManager.hpp
@@ -29,6 +29,7 @@
 #include "Pool.hpp"
 #include "PoolFactory.hpp"
 #include "Region.hpp"
+#include "geode/HashMapOfPools.hpp"
 #include "internal/geode_base.hpp"
 #include "internal/geode_globals.hpp"
 
@@ -46,8 +47,6 @@
 class Region;
 class RegionFactory;
 
-typedef std::unordered_map<std::string, std::shared_ptr<Pool>> HashMapOfPools;
-
 /**
  * Manages creation and access to {@link Pool connection pools} for clients.
  * <p>
diff --git a/cppcache/include/geode/SystemProperties.hpp b/cppcache/include/geode/SystemProperties.hpp
index ef2f35d..2f22c2b 100644
--- a/cppcache/include/geode/SystemProperties.hpp
+++ b/cppcache/include/geode/SystemProperties.hpp
@@ -314,23 +314,6 @@
   bool isDhOn() const { return !m_securityClientDhAlgo.empty(); }
 
   /**
-   * Checks to see if this native client is being invoked as part of small
-   * grid jobs; use this setting to disable some creation of threads and
-   * reduce start/stop time. Note that this setting can cause improper
-   * behavior in some cases like:
-   *  1) client that is setup in listening mode and a server failure may not
-   *     lead to failover by client
-   *  2) while shutting down the client will not send a proper CLOSE_CONNECTION
-   *     message so server will report EOF exceptions and may detect client
-   *     disconnect after quite some time
-   * Also note that there may be some performance loss in queries and
-   * Region::getAll due to unavailability of parallel processing threads.
-   *
-   * @return true if the "grid-client" property is set
-   */
-  inline bool isGridClient() const { return m_gridClient; }
-
-  /**
    * Whether a non durable client starts to receive and process
    * subscription events automatically.
    * If set to false then a non-durable client should call the
@@ -403,8 +386,6 @@
   std::chrono::milliseconds m_connectWaitTimeout;
   std::chrono::milliseconds m_bucketWaitTimeout;
 
-  bool m_gridClient;
-
   bool m_autoReadyForEvents;
 
   bool m_sslEnabled;
diff --git a/cppcache/include/geode/internal/functional.hpp b/cppcache/include/geode/internal/functional.hpp
index 7cb4377..6fde1d6 100644
--- a/cppcache/include/geode/internal/functional.hpp
+++ b/cppcache/include/geode/internal/functional.hpp
@@ -104,7 +104,48 @@
  */
 template <>
 struct geode_hash<std::string> {
-  int32_t operator()(const std::string& val);
+  inline int32_t operator()(const std::string& val) {
+    int32_t hash = 0;
+
+    for (auto&& it = val.cbegin(); it < val.cend(); it++) {
+      auto cp = static_cast<uint32_t>(0xff & *it);
+      if (cp < 0x80) {
+        // 1 byte
+      } else if ((cp >> 5) == 0x6) {
+        // 2 bytes
+        ++it;
+        cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f);
+      } else if ((cp >> 4) == 0xe) {
+        // 3 bytes
+        ++it;
+        cp = ((cp << 12) & 0xffff) + (((0xff & *it) << 6) & 0xfff);
+        ++it;
+        cp += (*it) & 0x3f;
+      } else if ((cp >> 3) == 0x1e) {
+        // 4 bytes
+        ++it;
+        cp = ((cp << 18) & 0x1fffff) + (((0xff & *it) << 12) & 0x3ffff);
+        ++it;
+        cp += ((0xff & *it) << 6) & 0xfff;
+        ++it;
+        cp += (*it) & 0x3f;
+      } else {
+        // TODO throw exception
+      }
+
+      if (cp > 0xffff) {
+        // surrogate pair
+        hash = 31 * hash +
+               static_cast<uint16_t>((cp >> 10) + (0xD800 - (0x10000 >> 10)));
+        hash = 31 * hash + static_cast<uint16_t>((cp & 0x3ff) + 0xdc00u);
+      } else {
+        // single code unit
+        hash = 31 * hash + cp;
+      }
+    }
+
+    return hash;
+  }
 };
 
 }  // namespace internal
diff --git a/cppcache/integration-test/CMakeLists.txt b/cppcache/integration-test/CMakeLists.txt
index fc52ad6..0daaeb9 100644
--- a/cppcache/integration-test/CMakeLists.txt
+++ b/cppcache/integration-test/CMakeLists.txt
@@ -22,20 +22,19 @@
   CacheHelper.cpp
   CacheableWrapper.cpp
 )
-
 target_link_libraries(test-cppcache-utils
   PRIVATE
-    ACE
+    ACE::ACE
     _WarningsAsError
   PUBLIC
     apache-geode
     framework
 )
-
 set_target_properties(test-cppcache-utils PROPERTIES
+  CXX_VISIBILITY_PRESET hidden
+  VISIBILITY_INLINES_HIDDEN ON
 	FOLDER cpp/test/integration
 )
-
 target_compile_definitions(test-cppcache-utils
   PRIVATE
     $<MAKE_C_IDENTIFIER:test-cppcache-utils>_static=1
@@ -50,7 +49,7 @@
 add_library(unit_test_callbacks SHARED LibraryCallbacks.cpp)
 target_link_libraries(unit_test_callbacks
   PRIVATE
-    ACE
+    ACE::ACE
     _WarningsAsError
   PUBLIC
     apache-geode
@@ -77,7 +76,7 @@
 endmacro()
 
 # Add lazy loaded shared library paths to test environment
-foreach( lib ssl sqlite )
+foreach( lib OpenSSL::SSL SQLite::sqlite3 )
   get_target_property(library_path ${lib} INTERFACE_LIBRARY_DIR)
   set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${library_path})
   get_target_property(runtime_path ${lib} INTERFACE_RUNTIME_DIR)
@@ -100,7 +99,7 @@
 
   target_link_libraries(${TEST}
     PRIVATE
-      ACE
+      ACE::ACE
       test-cppcache-utils
       _WarningsAsError
       _CppCodeCoverage
@@ -165,7 +164,6 @@
 set_property(TEST testLRUList PROPERTY LABELS STABLE QUICK)
 set_property(TEST testSystemProperties PROPERTY LABELS STABLE QUICK)
 set_property(TEST testLogger PROPERTY LABELS STABLE QUICK)
-set_property(TEST testCache PROPERTY LABELS STABLE QUICK)
 set_property(TEST testLinkage PROPERTY LABELS STABLE QUICK)
 set_property(TEST testRegionTemplateArgs PROPERTY LABELS STABLE QUICK)
 set_property(TEST testRegionMap PROPERTY LABELS STABLE QUICK)
@@ -174,8 +172,8 @@
 set_property(TEST testXmlCacheCreationWithOverFlow PROPERTY LABELS STABLE QUICK)
 set_property(TEST testThinClientRemoveAllLocal PROPERTY LABELS STABLE QUICK)
 set_property(TEST testDunit PROPERTY LABELS STABLE QUICK)
-set_property(TEST testAttributesMutator PROPERTY LABELS STABLE QUICK)
 set_property(TEST testSpinLock PROPERTY LABELS STABLE QUICK)
+set_property(TEST testSubRegions PROPERTY LABELS STABLE QUICK)
 set_property(TEST testThinClientSSLAuthFail PROPERTY LABELS STABLE QUICK)
 set_property(TEST testThinClientSSLAuthCorrupt PROPERTY LABELS STABLE QUICK)
 set_property(TEST testThinClientSSLAuthUntrusted PROPERTY LABELS STABLE QUICK)
diff --git a/cppcache/integration-test/CacheHelper.cpp b/cppcache/integration-test/CacheHelper.cpp
index 182af52..6347d4f 100644
--- a/cppcache/integration-test/CacheHelper.cpp
+++ b/cppcache/integration-test/CacheHelper.cpp
@@ -1700,6 +1700,8 @@
       break;
   }
 
+  int jmxManagerPort = CacheHelper::staticJmxManagerPort;
+
   currDir += locDirname;
 
   ACE_OS::mkdir(locDirname.c_str());
@@ -1720,9 +1722,10 @@
           : std::string("--properties-file=") + geodeFile;
   sprintf(cmd,
           "%s/bin/%s start locator --name=%s --port=%d --dir=%s "
-          "%s --http-service-port=0 --classpath=%s",
+          "%s --http-service-port=0 --classpath=%s "
+          "--J=-Dgemfire.jmx-manager-port=%d",
           gfjavaenv, GFSH, locDirname.c_str(), portnum, currDir.c_str(),
-          propertiesFile.c_str(), classpath);
+          propertiesFile.c_str(), classpath, jmxManagerPort);
 
   LOG(cmd);
   ACE_OS::system(cmd);
diff --git a/cppcache/integration-test/CacheHelper.hpp b/cppcache/integration-test/CacheHelper.hpp
index 8bbaac4..71ba2ed 100644
--- a/cppcache/integration-test/CacheHelper.hpp
+++ b/cppcache/integration-test/CacheHelper.hpp
@@ -288,6 +288,9 @@
   static int staticLocatorHostPort1;
   static int staticLocatorHostPort2;
   static int staticLocatorHostPort3;
+
+  static int staticJmxManagerPort;
+
   static const char* getstaticLocatorHostPort1();
 
   static const char* getstaticLocatorHostPort2();
@@ -393,6 +396,9 @@
 int CacheHelper::staticLocatorHostPort1 = CacheHelper::getRandomAvailablePort();
 int CacheHelper::staticLocatorHostPort2 = CacheHelper::getRandomAvailablePort();
 int CacheHelper::staticLocatorHostPort3 = CacheHelper::getRandomAvailablePort();
+
+int CacheHelper::staticJmxManagerPort = CacheHelper::getRandomAvailablePort();
+
 #endif
 
 }  // namespace client
diff --git a/cppcache/integration-test/DeltaEx.hpp b/cppcache/integration-test/DeltaEx.hpp
index 931456c..f1f4de2 100644
--- a/cppcache/integration-test/DeltaEx.hpp
+++ b/cppcache/integration-test/DeltaEx.hpp
@@ -27,10 +27,11 @@
 #include <geode/PdxWriter.hpp>
 #include <geode/PdxReader.hpp>
 #include <geode/Delta.hpp>
+#include <geode/DataSerializable.hpp>
 
 #include "CacheHelper.hpp"
 
-namespace { // NOLINT(google-build-namespaces)
+namespace {  // NOLINT(google-build-namespaces)
 
 using apache::geode::client::DataInput;
 using apache::geode::client::DataOutput;
diff --git a/cppcache/integration-test/ThinClientDistOps.hpp b/cppcache/integration-test/ThinClientDistOps.hpp
index 406d576..fa73eb9 100644
--- a/cppcache/integration-test/ThinClientDistOps.hpp
+++ b/cppcache/integration-test/ThinClientDistOps.hpp
@@ -59,22 +59,9 @@
 const char* locatorsG =
     CacheHelper::getLocatorHostPort(isLocator, isLocalServer, numberOfLocators);
 
-bool g_isGridClient = false;
-
-DUNIT_TASK_DEFINITION(CLIENT1, Alter_Client_Grid_Property_1)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
-DUNIT_TASK_DEFINITION(CLIENT2, Alter_Client_Grid_Property_2)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
 void initClient(const bool isthinClient, const bool redirectLog) {
   if (cacheHelper == nullptr) {
     auto config = Properties::create();
-    if (g_isGridClient) {
-      config->insert("grid-client", "true");
-    }
     config->insert("log-level", "finer");
 
     if (redirectLog) {
@@ -819,9 +806,6 @@
 END_TASK_DEFINITION
 
 void runDistOpsNotSticky() {
-  CALL_TASK(Alter_Client_Grid_Property_1);
-  CALL_TASK(Alter_Client_Grid_Property_2);
-
   CALL_TASK(CreateLocator1);
   CALL_TASK(CreateServer1_With_Locator)
 
@@ -846,9 +830,6 @@
 }
 
 void runDistOpsSticky() {
-  CALL_TASK(Alter_Client_Grid_Property_1);
-  CALL_TASK(Alter_Client_Grid_Property_2);
-
   CALL_TASK(CreateLocator1);
   CALL_TASK(CreateServer1_With_Locator)
 
diff --git a/cppcache/integration-test/ThinClientHelper.hpp b/cppcache/integration-test/ThinClientHelper.hpp
index 56736aa..74e5a67 100644
--- a/cppcache/integration-test/ThinClientHelper.hpp
+++ b/cppcache/integration-test/ThinClientHelper.hpp
@@ -57,22 +57,6 @@
 
 CacheHelper* cacheHelper = nullptr;
 
-void initGridClient(const bool isthinClient,
-                    const std::shared_ptr<Properties>& configPtr = nullptr) {
-  static bool s_isGridClient = true;
-
-  s_isGridClient = !s_isGridClient;
-  if (cacheHelper == nullptr) {
-    auto config = configPtr;
-    if (config == nullptr) {
-      config = Properties::create();
-    }
-    config->insert("grid-client", s_isGridClient ? "true" : "false");
-    cacheHelper = new CacheHelper(isthinClient, config);
-  }
-  ASSERT(cacheHelper, "Failed to create a CacheHelper client instance.");
-}
-
 void initClient(const bool isthinClient,
                 const std::shared_ptr<Properties>& configPtr = nullptr) {
   if (cacheHelper == nullptr) {
@@ -110,22 +94,6 @@
   ASSERT(cacheHelper, "Failed to create a CacheHelper client instance.");
 }
 
-void initGridClient(int redundancyLevel,
-                    const std::shared_ptr<Properties>& configPtr = nullptr) {
-  static bool s_isGridClient = true;
-
-  s_isGridClient = !s_isGridClient;
-  if (cacheHelper == nullptr) {
-    auto config = configPtr;
-    if (config == nullptr) {
-      config = Properties::create();
-    }
-    config->insert("grid-client", s_isGridClient ? "true" : "false");
-    cacheHelper = new CacheHelper(redundancyLevel, config);
-  }
-  ASSERT(cacheHelper, "Failed to create a CacheHelper client instance.");
-}
-
 void cleanProc() {
   if (cacheHelper != nullptr) {
     delete cacheHelper;
diff --git a/cppcache/integration-test/ThinClientTransactions.hpp b/cppcache/integration-test/ThinClientTransactions.hpp
index c770f44..2c59300 100644
--- a/cppcache/integration-test/ThinClientTransactions.hpp
+++ b/cppcache/integration-test/ThinClientTransactions.hpp
@@ -61,22 +61,9 @@
 const char* locatorsG =
     CacheHelper::getLocatorHostPort(isLocator, isLocalServer, numberOfLocators);
 
-bool g_isGridClient = false;
-
-DUNIT_TASK_DEFINITION(CLIENT1, Alter_Client_Grid_Property_1)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
-DUNIT_TASK_DEFINITION(CLIENT2, Alter_Client_Grid_Property_2)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
 void initClient(const bool isthinClient) {
   if (cacheHelper == nullptr) {
     auto config = Properties::create();
-    if (g_isGridClient) {
-      config->insert("grid-client", "true");
-    }
     config->insert("suspended-tx-timeout", std::chrono::minutes(1));
     cacheHelper = new CacheHelper(isthinClient, config);
   }
diff --git a/cppcache/integration-test/ThinClientTransactionsXA.hpp b/cppcache/integration-test/ThinClientTransactionsXA.hpp
index bfdda2a..3d50393 100644
--- a/cppcache/integration-test/ThinClientTransactionsXA.hpp
+++ b/cppcache/integration-test/ThinClientTransactionsXA.hpp
@@ -62,22 +62,9 @@
 const char* locatorsG =
     CacheHelper::getLocatorHostPort(isLocator, isLocalServer, numberOfLocators);
 
-bool g_isGridClient = false;
-
-DUNIT_TASK_DEFINITION(CLIENT1, Alter_Client_Grid_Property_1)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
-DUNIT_TASK_DEFINITION(CLIENT2, Alter_Client_Grid_Property_2)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
 void initClient(const bool isthinClient) {
   if (cacheHelper == nullptr) {
     auto config = Properties::create();
-    if (g_isGridClient) {
-      config->insert("grid-client", "true");
-    }
     config->insert("suspended-tx-timeout", std::chrono::seconds(1));
     cacheHelper = new CacheHelper(isthinClient, config);
   }
@@ -1131,9 +1118,6 @@
 END_TASK_DEFINITION
 
 void runTransactionOps(bool isSticky = false) {
-  CALL_TASK(Alter_Client_Grid_Property_1);
-  CALL_TASK(Alter_Client_Grid_Property_2);
-
   CALL_TASK(CreateLocator1);
   CALL_TASK(CreateServer1_With_Locator)
 
diff --git a/cppcache/integration-test/fw_spawn.hpp b/cppcache/integration-test/fw_spawn.hpp
index 0411a63..e49da7d 100644
--- a/cppcache/integration-test/fw_spawn.hpp
+++ b/cppcache/integration-test/fw_spawn.hpp
@@ -22,13 +22,13 @@
 // Spawn.cpp,v 1.4 2004/01/07 22:40:16 shuston Exp
 
 // @TODO, this out this include list..
-#include "ace/OS_NS_stdio.h"
-#include "ace/OS_NS_fcntl.h"
-#include "ace/OS_NS_pwd.h"
-#include "ace/os_include/os_pwd.h"
-#include "ace/OS_NS_stdlib.h"
-#include "ace/OS_NS_string.h"
-#include "ace/OS_NS_unistd.h"
+#include <ace/OS_NS_stdio.h>
+#include <ace/OS_NS_fcntl.h>
+#include <ace/OS_NS_pwd.h>
+#include <ace/os_include/os_pwd.h>
+#include <ace/OS_NS_stdlib.h>
+#include <ace/OS_NS_string.h>
+#include <ace/OS_NS_unistd.h>
 
 #if defined(_WIN32)
 #if (FD_SETSIZE != 1024)
@@ -36,8 +36,8 @@
 #endif
 #endif
 
-#include "ace/Process.h"
-#include "ace/Log_Msg.h"
+#include <ace/Process.h>
+#include <ace/Log_Msg.h>
 
     namespace dunit {
 
diff --git a/cppcache/integration-test/testAttributesMutator.cpp b/cppcache/integration-test/testAttributesMutator.cpp
deleted file mode 100644
index ec6fd26..0000000
--- a/cppcache/integration-test/testAttributesMutator.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <geode/CacheFactory.hpp>
-#include <geode/Region.hpp>
-#include <geode/RegionAttributesFactory.hpp>
-
-#include "CacheImpl.hpp"
-#include "CacheRegionHelper.hpp"
-
-#include "fw_dunit.hpp"
-
-using apache::geode::client::Cache;
-using apache::geode::client::CacheableInt32;
-using apache::geode::client::CacheFactory;
-using apache::geode::client::CacheRegionHelper;
-using apache::geode::client::ExpirationAction;
-using apache::geode::client::Region;
-using apache::geode::client::RegionAttributesFactory;
-
-class TestData {
- public:
-  std::shared_ptr<Region> m_region;
-  std::shared_ptr<Cache> m_cache;
-
-} Test;
-
-#define A s1p1
-
-/* setup recipient */
-DUNIT_TASK(A, Init)
-  {
-    auto cacheFactory = CacheFactory();
-    Test.m_cache = std::make_shared<Cache>(cacheFactory.create());
-
-    RegionAttributesFactory regionAttributesFactory;
-    regionAttributesFactory.setEntryTimeToLive(
-        ExpirationAction::LOCAL_INVALIDATE, std::chrono::seconds(5));
-    auto regionAttributes = regionAttributesFactory.create();
-
-    auto &&cacheImpl = CacheRegionHelper::getCacheImpl(Test.m_cache.get());
-    cacheImpl->createRegion("Local_ETTL_LI", regionAttributes, Test.m_region);
-  }
-ENDTASK
-
-DUNIT_TASK(A, CreateAndVerifyExpiry)
-  {
-    auto value = CacheableInt32::create(1);
-    LOGDEBUG("### About to put of :one:1: ###");
-    Test.m_region->put("one", value);
-    LOGDEBUG("### Finished put of :one:1: ###");
-
-    // countdown begins... it is ttl so access should not play into it..
-    SLEEP(3000);  // sleep for a second, expect value to still be there.
-    auto res =
-        std::dynamic_pointer_cast<CacheableInt32>(Test.m_region->get("one"));
-    ASSERT(res->value() == 1, "Expected to find value 1.");
-    fflush(stdout);
-    SLEEP(5000);  // sleep for 5 more seconds, expect value to be invalid.
-    fflush(stdout);
-    res = nullptr;
-    ASSERT(Test.m_region->containsValueForKey("one") == false,
-           "should not contain value.");
-  }
-ENDTASK
-
-/* Test value sizes up to 1meg */
-DUNIT_TASK(A, Close)
-  {
-    Test.m_region->destroyRegion();
-    Test.m_cache->close();
-    Test.m_cache = nullptr;
-    Test.m_region = nullptr;
-  }
-ENDTASK
diff --git a/cppcache/integration-test/testSpinLock.cpp b/cppcache/integration-test/testSpinLock.cpp
index 348add1..ec93060 100644
--- a/cppcache/integration-test/testSpinLock.cpp
+++ b/cppcache/integration-test/testSpinLock.cpp
@@ -20,8 +20,6 @@
 #include <mutex>
 #include <util/concurrent/spinlock_mutex.hpp>
 
-#include <Condition.hpp>
-
 #include <ace/Task.h>
 #include <ace/Time_Value.h>
 #include <ace/Guard_T.h>
@@ -117,38 +115,4 @@
   }
 END_TASK(TwoThreads)
 
-DUNIT_TASK(s1p1, Cond)
-  {
-    // Test that the Condtion wrapper times out properly.
-    // Does not test signal..
-    ACE_Time_Value stopAt = ACE_OS::gettimeofday();
-    stopAt -= 10;  // Make sure it is in the past.
-
-    ACE_Recursive_Thread_Mutex mutex;
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(mutex);
-    apache::geode::client::Condition cond(mutex);
-    LOG("About to wait on Condition with past time.");
-    if (cond.waitUntil(&stopAt) != false) {
-      FAIL("Should have timed out immediately.");
-    }
-
-    stopAt = ACE_OS::gettimeofday();
-    LOG("About to wait on Condition with present time.");
-    if (cond.waitUntil(&stopAt) != false) {
-      FAIL("Should have timed out immediately.");
-    }
-
-    ACE_Time_Value begin = ACE_OS::gettimeofday();
-    stopAt = begin;
-    ACE_Time_Value delay(5);
-    stopAt += delay;
-    if (cond.waitUntil(&stopAt) != false) {
-      FAIL("Should have timed out immediately.");
-    }
-    ACE_Time_Value delta = ACE_OS::gettimeofday();
-    delta -= begin;
-    printf("delta is %lu, delay is %lu", delta.msec(), delay.msec());
-    XASSERT(delta.msec() >= (delay.msec() - 50));
-  }
-ENDTASK
 }  // namespace
diff --git a/cppcache/integration-test/testCache.cpp b/cppcache/integration-test/testSubRegions.cpp
similarity index 100%
rename from cppcache/integration-test/testCache.cpp
rename to cppcache/integration-test/testSubRegions.cpp
diff --git a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
index d7ae849..789647a 100644
--- a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
+++ b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
@@ -226,7 +226,7 @@
 }
 
 void stepOne() {
-  initGridClient(true);
+  initClient(true);
   try {
     auto serializationRegistry =
         CacheRegionHelper::getCacheImpl(cacheHelper->getCache().get())
@@ -243,6 +243,8 @@
         PortfolioPdx::createDeserializable);
   } catch (const IllegalStateException &) {
     // ignore exception
+    LOG("testThinClientRemoteQuerySS stepOne caught exception using "
+        "serializationRegistry");
   }
 
   isPoolConfig = true;
diff --git a/cppcache/integration-test/testThinClientRemoveOps.cpp b/cppcache/integration-test/testThinClientRemoveOps.cpp
index c35fa48..c08f8da 100644
--- a/cppcache/integration-test/testThinClientRemoveOps.cpp
+++ b/cppcache/integration-test/testThinClientRemoveOps.cpp
@@ -54,22 +54,9 @@
 const char *locatorsG =
     CacheHelper::getLocatorHostPort(isLocator, isLocalServer, numberOfLocators);
 
-bool g_isGridClient = false;
-
-DUNIT_TASK_DEFINITION(CLIENT1, Alter_Client_Grid_Property_1)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
-DUNIT_TASK_DEFINITION(CLIENT2, Alter_Client_Grid_Property_2)
-  { g_isGridClient = !g_isGridClient; }
-END_TASK_DEFINITION
-
 void initClient(const bool isthinClient) {
   if (cacheHelper == nullptr) {
     auto config = Properties::create();
-    if (g_isGridClient) {
-      config->insert("grid-client", "true");
-    }
     cacheHelper = new CacheHelper(isthinClient, config);
   }
   ASSERT(cacheHelper, "Failed to create a CacheHelper client instance.");
diff --git a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
index 81d7cf0..0b68be8 100644
--- a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
+++ b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
@@ -24,7 +24,7 @@
 
 #include "CacheHelper.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 
 #include "ThinClientSecurity.hpp"
 
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
index 450e840..cc1c8ea 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
@@ -23,7 +23,7 @@
 
 #include "CacheHelper.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 
 #include "ThinClientSecurity.hpp"
 
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
index c20ffd1..5d2d05c 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
@@ -26,7 +26,7 @@
 
 #include "CacheHelper.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 
 #include "ThinClientSecurity.hpp"
 
diff --git a/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
index e29691b..e1fef02 100644
--- a/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
@@ -40,7 +40,7 @@
 
 #include "CacheHelper.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 
 using apache::geode::client::testframework::security::CredentialGenerator;
 
diff --git a/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
index 8754d34..9fa35ab 100644
--- a/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
@@ -40,7 +40,7 @@
 
 #include "CacheHelper.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 
 using apache::geode::client::AuthenticatedView;
 using apache::geode::client::CqAttributesFactory;
diff --git a/cppcache/integration-test/testThinClientTransactionsWithSticky.cpp b/cppcache/integration-test/testThinClientTransactionsWithSticky.cpp
index f24a16f..d27131d 100644
--- a/cppcache/integration-test/testThinClientTransactionsWithSticky.cpp
+++ b/cppcache/integration-test/testThinClientTransactionsWithSticky.cpp
@@ -19,9 +19,6 @@
 
 DUNIT_MAIN
   {
-    CALL_TASK(Alter_Client_Grid_Property_1);
-    CALL_TASK(Alter_Client_Grid_Property_2);
-
     CALL_TASK(CreateLocator1);
     CALL_TASK(CreateServer1_With_Locator)
 
diff --git a/cppcache/integration-test/testThinClientTransactionsWithoutSticky.cpp b/cppcache/integration-test/testThinClientTransactionsWithoutSticky.cpp
index f87a922..e3d2351 100644
--- a/cppcache/integration-test/testThinClientTransactionsWithoutSticky.cpp
+++ b/cppcache/integration-test/testThinClientTransactionsWithoutSticky.cpp
@@ -19,9 +19,6 @@
 
 DUNIT_MAIN
   {
-    CALL_TASK(Alter_Client_Grid_Property_1);
-    CALL_TASK(Alter_Client_Grid_Property_2);
-
     CALL_TASK(CreateLocator1);
     CALL_TASK(CreateServer1_With_Locator)
 
diff --git a/cppcache/integration-test/testThinClientWriterException.cpp b/cppcache/integration-test/testThinClientWriterException.cpp
index 0e8df9c..ea54f5f 100644
--- a/cppcache/integration-test/testThinClientWriterException.cpp
+++ b/cppcache/integration-test/testThinClientWriterException.cpp
@@ -16,7 +16,7 @@
  */
 #include "fw_dunit.hpp"
 #include "ThinClientHelper.hpp"
-#include "ace/Process.h"
+#include <ace/Process.h>
 #include "TallyListener.hpp"
 #include "TallyWriter.hpp"
 
diff --git a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
index d882422..ea9a1b9 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
@@ -95,13 +95,13 @@
     std::cout << "vc[" << i << "].m_reaPtr=" << vrp.at(i).get() << std::endl;
     std::cout << "vc[" << i << "]=" << vrp.at(i)->getName() << std::endl;
   }
-  auto regPtr1 = vrp.at(0);
+  auto regPtr1 = cptr->getRegion("Root1");
 
   std::cout
       << "Test if the number of sub regions with the root region Root1 are "
          "correct"
       << std::endl;
-  std::vector<std::shared_ptr<Region>> vr = regPtr1->subregions(true);
+  auto vr = regPtr1->subregions(true);
   std::cout << "  vr.size=" << vr.size() << std::endl;
   if (vr.size() != totalSubRegionsRoot1) {
     std::cout << "Number of Subregions does not match" << std::endl;
@@ -116,7 +116,7 @@
   }
 
   std::cout << "Test if the nesting of regions is correct" << std::endl;
-  auto regPtr2 = vrp.at(1);
+  auto regPtr2 = cptr->getRegion("Root2");
   auto &&vsr = regPtr2->subregions(true);
   for (auto &&regPtr : vsr) {
     auto &&childName = regPtr->getName();
diff --git a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
index a207e69..81329a5 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
@@ -311,7 +311,7 @@
     std::cout << "vc[" << i << "].m_regionPtr=" << vrp.at(i).get() << std::endl;
     std::cout << "vc[" << i << "]=" << vrp.at(i)->getName() << std::endl;
   }
-  auto regPtr1 = vrp.at(0);
+  auto regPtr1 = cptr->getRegion("Root1");
 
   auto &&vr = regPtr1->subregions(true);
   std::cout << "Test if the number of sub regions with the root region Root1 "
@@ -335,7 +335,7 @@
   // pools. Check if this assumption is valid and if so then break up this test.
   auto subRegPtr = vr.at(0);
 
-  auto regPtr2 = vrp.at(1);
+  auto regPtr2 = cptr->getRegion("Root2");
 
   std::cout << "Test if the number of sub regions with the root region Root2 "
                "are correct"
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/cppcache/integration/CMakeLists.txt
similarity index 86%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to cppcache/integration/CMakeLists.txt
index b817deb..c7e76eb 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/cppcache/integration/CMakeLists.txt
@@ -4,16 +4,18 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+add_subdirectory(framework)
+add_subdirectory(test)
+
+if (BUILD_BENCHMARKS)
+  add_subdirectory(benchmark)
+endif()
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/cppcache/integration/benchmark/CMakeLists.txt
similarity index 73%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to cppcache/integration/benchmark/CMakeLists.txt
index b817deb..c15ffeb 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/cppcache/integration/benchmark/CMakeLists.txt
@@ -4,16 +4,27 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+add_executable(cpp-integration-benchmark
+  main.cpp
+  RegionBM.cpp
+  )
+
+target_link_libraries(cpp-integration-benchmark
+  PUBLIC
+    apache-geode
+    benchmark::benchmark
+    integration-framework
+  PRIVATE
+    _WarningsAsError
+  )
+
+add_clangformat(cpp-integration-benchmark)
diff --git a/cppcache/integration/benchmark/RegionBM.cpp b/cppcache/integration/benchmark/RegionBM.cpp
new file mode 100644
index 0000000..8ca972f
--- /dev/null
+++ b/cppcache/integration/benchmark/RegionBM.cpp
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <benchmark/benchmark.h>
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
+#include <boost/log/core.hpp>
+#include <boost/log/expressions.hpp>
+#include <boost/log/trivial.hpp>
+
+#include <geode/Cache.hpp>
+#include <geode/CacheableString.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableInt32;
+using apache::geode::client::CacheableString;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+namespace {
+
+class RegionBM : public benchmark::Fixture {
+ public:
+  RegionBM() {
+    boost::log::core::get()->set_filter(boost::log::trivial::severity >=
+                                        boost::log::trivial::warning);
+  }
+
+  using benchmark::Fixture::SetUp;
+  void SetUp(benchmark::State&) override {
+    if (!cluster) {
+      cluster = std::unique_ptr<Cluster>(
+          new Cluster(Name{name_}, LocatorCount{1}, ServerCount{1}));
+      cluster->getGfsh()
+          .create()
+          .region()
+          .withName("region")
+          .withType("REPLICATE")
+          .execute();
+
+      cache = std::unique_ptr<Cache>(new Cache(cluster->createCache()));
+      region = cache->createRegionFactory(RegionShortcut::PROXY)
+                   .setPoolName("default")
+                   .create("region");
+    }
+  }
+
+  using benchmark::Fixture::TearDown;
+  void TearDown(benchmark::State&) override {
+    if (cluster) {
+      region = nullptr;
+      cache = nullptr;
+      cluster = nullptr;
+    }
+  }
+
+ protected:
+  void SetName(const char* name) {
+    name_ = name;
+
+    Benchmark::SetName(name);
+  }
+
+  std::unique_ptr<Cluster> cluster;
+  std::unique_ptr<Cache> cache;
+  std::shared_ptr<Region> region;
+
+ private:
+  std::string name_;
+};
+
+BENCHMARK_F(RegionBM, put_string)(benchmark::State& state) {
+  auto key = CacheableString::create("key");
+  auto value = CacheableString::create("value");
+
+  for (auto _ : state) {
+    region->put(key, value);
+  }
+}
+
+BENCHMARK_F(RegionBM, put_int)(benchmark::State& state) {
+  auto key = CacheableInt32::create(1);
+  auto value = CacheableInt32::create(1);
+
+  for (auto _ : state) {
+    region->put(key, value);
+  }
+}
+
+BENCHMARK_F(RegionBM, get_string)(benchmark::State& state) {
+  auto key = CacheableString::create("key");
+  auto value = CacheableString::create("value");
+
+  region->put(key, value);
+
+  for (auto _ : state) {
+    region->get(key);
+  }
+}
+
+BENCHMARK_F(RegionBM, get_int)(benchmark::State& state) {
+  auto key = CacheableInt32::create(1);
+  auto value = CacheableInt32::create(1);
+
+  region->put(key, value);
+
+  for (auto _ : state) {
+    region->get(key);
+  }
+}
+
+}  // namespace
diff --git a/cppcache/integration-test-2/framework/Framework.cpp b/cppcache/integration/benchmark/main.cpp
similarity index 93%
copy from cppcache/integration-test-2/framework/Framework.cpp
copy to cppcache/integration/benchmark/main.cpp
index fe6942a..782f521 100644
--- a/cppcache/integration-test-2/framework/Framework.cpp
+++ b/cppcache/integration/benchmark/main.cpp
@@ -15,4 +15,6 @@
  * limitations under the License.
  */
 
-#include "Framework.h"
+#include <benchmark/benchmark.h>
+
+BENCHMARK_MAIN();
diff --git a/cppcache/integration-test-2/framework/.clang-tidy b/cppcache/integration/framework/.clang-tidy
similarity index 100%
rename from cppcache/integration-test-2/framework/.clang-tidy
rename to cppcache/integration/framework/.clang-tidy
diff --git a/cppcache/integration/framework/CMakeLists.txt b/cppcache/integration/framework/CMakeLists.txt
new file mode 100644
index 0000000..8aa234c
--- /dev/null
+++ b/cppcache/integration/framework/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+configure_file(config.h.in config.h)
+
+add_library(integration-framework STATIC
+  Gfsh.cpp
+  Gfsh.h
+  Framework.cpp
+  Framework.h
+  Cluster.cpp
+  Cluster.h
+  GfshExecute.cpp
+  GfshExecute.h
+  )
+
+target_compile_definitions(integration-framework
+  PUBLIC
+    BOOST_ASIO_HAS_MOVE
+)
+
+target_include_directories(integration-framework
+  PUBLIC
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+  PRIVATE
+    ${CMAKE_CURRENT_BINARY_DIR}
+
+)
+
+target_link_libraries(integration-framework
+  PUBLIC
+    apache-geode
+    GTest::gtest
+    Boost::boost
+    Boost::system
+    Boost::log
+    Boost::filesystem
+  PRIVATE
+    _WarningsAsError
+    internal
+)
+
+if(WIN32)
+  target_compile_definitions(integration-framework
+    PUBLIC
+      # Required for Boost.WinAPI
+      _WIN32_WINNT=0x06020000
+  )
+endif()
diff --git a/cppcache/integration-test-2/framework/Cluster.cpp b/cppcache/integration/framework/Cluster.cpp
similarity index 100%
rename from cppcache/integration-test-2/framework/Cluster.cpp
rename to cppcache/integration/framework/Cluster.cpp
diff --git a/cppcache/integration-test-2/framework/Cluster.h b/cppcache/integration/framework/Cluster.h
similarity index 99%
rename from cppcache/integration-test-2/framework/Cluster.h
rename to cppcache/integration/framework/Cluster.h
index a8aefad..06a8a84 100644
--- a/cppcache/integration-test-2/framework/Cluster.h
+++ b/cppcache/integration/framework/Cluster.h
@@ -23,7 +23,7 @@
 #include <cstdint>
 #include <string>
 
-#include <gtest/gtest.h>
+#include "gtest/gtest.h"
 
 #include <geode/Cache.hpp>
 #include <geode/PoolManager.hpp>
diff --git a/cppcache/integration-test-2/framework/Framework.cpp b/cppcache/integration/framework/Framework.cpp
similarity index 70%
copy from cppcache/integration-test-2/framework/Framework.cpp
copy to cppcache/integration/framework/Framework.cpp
index fe6942a..4454ffc 100644
--- a/cppcache/integration-test-2/framework/Framework.cpp
+++ b/cppcache/integration/framework/Framework.cpp
@@ -16,3 +16,19 @@
  */
 
 #include "Framework.h"
+
+#include <boost/asio.hpp>
+
+uint16_t Framework::getAvailablePort() {
+  using boost::asio::io_service;
+  using boost::asio::ip::tcp;
+
+  io_service service;
+  tcp::socket socket{service};
+  socket.open(tcp::v4());
+  socket.bind(tcp::endpoint{tcp::v4(), 0});
+  auto port = socket.local_endpoint().port();
+  socket.close();
+
+  return port;
+}
diff --git a/cppcache/integration-test-2/framework/Framework.h b/cppcache/integration/framework/Framework.h
similarity index 78%
rename from cppcache/integration-test-2/framework/Framework.h
rename to cppcache/integration/framework/Framework.h
index ea98760..aaaca36 100644
--- a/cppcache/integration-test-2/framework/Framework.h
+++ b/cppcache/integration/framework/Framework.h
@@ -21,19 +21,10 @@
 #define INTEGRATION_TEST_FRAMEWORK_FRAMEWORK_H
 
 #include <chrono>
-#include <cstdint>
-#include <random>
 
 class Framework {
  public:
-  static uint16_t getAvailablePort() {
-    // TODO boost open ephemeral port.
-    std::random_device randomDevice;
-    std::default_random_engine randomEngine(randomDevice());
-    std::uniform_int_distribution<uint16_t> uniformDist;
-    auto port = uniformDist(randomEngine);
-    return port;
-  }
+  static uint16_t getAvailablePort();
 };
 
 template <class _Rep, class _Period>
diff --git a/cppcache/integration-test-2/framework/Gfsh.cpp b/cppcache/integration/framework/Gfsh.cpp
similarity index 100%
rename from cppcache/integration-test-2/framework/Gfsh.cpp
rename to cppcache/integration/framework/Gfsh.cpp
diff --git a/cppcache/integration-test-2/framework/Gfsh.h b/cppcache/integration/framework/Gfsh.h
similarity index 100%
rename from cppcache/integration-test-2/framework/Gfsh.h
rename to cppcache/integration/framework/Gfsh.h
diff --git a/cppcache/integration-test-2/framework/GfshExecute.cpp b/cppcache/integration/framework/GfshExecute.cpp
similarity index 97%
rename from cppcache/integration-test-2/framework/GfshExecute.cpp
rename to cppcache/integration/framework/GfshExecute.cpp
index b9d8f69..5ae9023 100644
--- a/cppcache/integration-test-2/framework/GfshExecute.cpp
+++ b/cppcache/integration/framework/GfshExecute.cpp
@@ -55,11 +55,11 @@
   std::string line;
 
   while (outStream && std::getline(outStream, line)) {
-    BOOST_LOG_TRIVIAL(debug) << "Gfsh::execute: " << line;
+    BOOST_LOG_TRIVIAL(trace) << "Gfsh::execute: " << line;
   }
 
   while (errStream && std::getline(errStream, line)) {
-    BOOST_LOG_TRIVIAL(error) << "Gfsh::execute: " << line;
+    BOOST_LOG_TRIVIAL(debug) << "Gfsh::execute: " << line;
   }
 
   gfsh.wait();
diff --git a/cppcache/integration-test-2/framework/GfshExecute.h b/cppcache/integration/framework/GfshExecute.h
similarity index 100%
rename from cppcache/integration-test-2/framework/GfshExecute.h
rename to cppcache/integration/framework/GfshExecute.h
diff --git a/cppcache/integration-test-2/framework/config.h.in b/cppcache/integration/framework/config.h.in
similarity index 100%
rename from cppcache/integration-test-2/framework/config.h.in
rename to cppcache/integration/framework/config.h.in
diff --git a/cppcache/integration-test-2/CMakeLists.txt b/cppcache/integration/test/CMakeLists.txt
similarity index 66%
rename from cppcache/integration-test-2/CMakeLists.txt
rename to cppcache/integration/test/CMakeLists.txt
index 322550c..f38a5b0 100644
--- a/cppcache/integration-test-2/CMakeLists.txt
+++ b/cppcache/integration/test/CMakeLists.txt
@@ -13,76 +13,70 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-configure_file(framework/config.h.in config.h)
-
-add_executable(integration-test-2
+add_executable(cpp-integration-test
+  ChunkedHeaderTest.cpp
+  DataSerializableTest.cpp
+  EnableChunkHandlerThreadTest.cpp
   ExampleTest.cpp
-  framework/Gfsh.cpp
-  framework/Gfsh.h
-  framework/Framework.cpp
-  framework/Framework.h
-  framework/Cluster.cpp
-  framework/Cluster.h
-  framework/GfshExecute.cpp
-  framework/GfshExecute.h
-  RegionPutGetAllTest.cpp
+  ExpirationTest.cpp
+  FunctionExecutionTest.cpp
   PdxInstanceTest.cpp
+  RegionPutGetAllTest.cpp
   RegisterKeysTest.cpp
   StructTest.cpp
-  EnableChunkHandlerThreadTest.cpp
-  DataSerializableTest.cpp
 )
 
-target_compile_definitions(integration-test-2
+target_compile_definitions(cpp-integration-test
   PUBLIC
     BOOST_ASIO_HAS_MOVE
     GTEST_ELLIPSIS_NEEDS_POD_
 )
 
-target_include_directories(integration-test-2
+target_include_directories(cpp-integration-test
   PUBLIC
    ${CMAKE_CURRENT_BINARY_DIR}
 )
 
-target_link_libraries(integration-test-2
+target_link_libraries(cpp-integration-test
   PUBLIC
     apache-geode
+    integration-framework
     testobject
-    ACE
-    GTest::GTest
-    GTest::Main
+    ACE::ACE
+    GTest::gtest
+    GTest::gtest_main
     Boost::boost
     Boost::system
     Boost::log
     Boost::filesystem
- PRIVATE
+  PRIVATE
     _WarningsAsError
- internal
+    internal
 )
 
 if(WIN32)
-  target_compile_definitions(integration-test-2
+  target_compile_definitions(cpp-integration-test
     PUBLIC
       # Required for Boost.WinAPI
       _WIN32_WINNT=0x06020000
   )
 
   foreach (_target apache-geode testobject)
-    add_custom_command(TARGET integration-test-2 POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    add_custom_command(TARGET cpp-integration-test POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
         "$<TARGET_FILE:${_target}>"
         "$<$<CONFIG:Debug>:$<TARGET_PDB_FILE:${_target}>>"
-        "$<TARGET_FILE_DIR:integration-test-2>")
+        "$<TARGET_FILE_DIR:cpp-integration-test>")
   endforeach()
 endif()
 
-set_target_properties(integration-test-2 PROPERTIES
+set_target_properties(cpp-integration-test PROPERTIES
   CXX_VISIBILITY_PRESET hidden
   VISIBILITY_INLINES_HIDDEN ON
   FOLDER cpp/test/integration
 )
 
-add_clangformat(integration-test-2)
+add_clangformat(cpp-integration-test)
 
 enable_testing()
 include(GoogleTest)
-gtest_discover_tests(integration-test-2)
\ No newline at end of file
+gtest_discover_tests(cpp-integration-test)
diff --git a/cppcache/integration/test/ChunkedHeaderTest.cpp b/cppcache/integration/test/ChunkedHeaderTest.cpp
new file mode 100644
index 0000000..767c8fc
--- /dev/null
+++ b/cppcache/integration/test/ChunkedHeaderTest.cpp
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <DataInputInternal.hpp>
+#include <TcrMessage.hpp>
+
+#include <gtest/gtest.h>
+
+using apache::geode::client::DataInput;
+using apache::geode::client::DataInputInternal;
+using apache::geode::client::DSCode;
+using apache::geode::client::MessageException;
+using apache::geode::client::Region;
+using apache::geode::client::Serializable;
+using apache::geode::client::TcrMessage;
+using apache::geode::client::TcrMessageHelper;
+using apache::geode::client::ThinClientBaseDM;
+
+namespace {
+class TcrMessageTestFixture : public TcrMessage {
+ public:
+  TcrMessageTestFixture() : TcrMessage() {}
+  virtual ~TcrMessageTestFixture() {}
+};
+}  // namespace
+
+TEST(TcrMessageHelperTest, readChunkPartHeaderExpectsAnObject) {
+  TcrMessageTestFixture msg;
+
+  uint8_t fakeBuffer[5] = {0, 0, 0, 1};
+
+  auto input = DataInputInternal(fakeBuffer, sizeof(fakeBuffer));
+
+  uint32_t partLength;
+
+  EXPECT_THROW(TcrMessageHelper::readChunkPartHeader(
+                   msg, input,
+                   "TcrMessageHelperTest, readChunkPartHeaderExpectsAnObject",
+                   partLength, 0),
+               MessageException);
+}
+
+TEST(TcrMessageHelperTest, readChunkPartHeaderExceptionChunkHack) {
+  TcrMessageTestFixture msg;
+
+  uint8_t fakeBuffer[] = {
+      0, 0, 0, 1, 1, static_cast<uint8_t>(DSCode::JavaSerializable),
+      0, 0, 0, 0, 0};
+
+  auto input = DataInputInternal(fakeBuffer, sizeof(fakeBuffer));
+
+  uint32_t partLength;
+
+  EXPECT_EQ(TcrMessageHelper::readChunkPartHeader(
+                msg, input,
+                "TcrMessageHelperTest, readChunkPartHeaderExceptionChunkHack",
+                partLength, 64),
+            TcrMessageHelper::ChunkObjectType::EXCEPTION);
+}
diff --git a/cppcache/integration-test-2/DataSerializableTest.cpp b/cppcache/integration/test/DataSerializableTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/DataSerializableTest.cpp
rename to cppcache/integration/test/DataSerializableTest.cpp
diff --git a/cppcache/integration-test-2/EnableChunkHandlerThreadTest.cpp b/cppcache/integration/test/EnableChunkHandlerThreadTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/EnableChunkHandlerThreadTest.cpp
rename to cppcache/integration/test/EnableChunkHandlerThreadTest.cpp
diff --git a/cppcache/integration-test-2/ExampleTest.cpp b/cppcache/integration/test/ExampleTest.cpp
similarity index 97%
rename from cppcache/integration-test-2/ExampleTest.cpp
rename to cppcache/integration/test/ExampleTest.cpp
index 6458ac1..bd96453 100644
--- a/cppcache/integration-test-2/ExampleTest.cpp
+++ b/cppcache/integration/test/ExampleTest.cpp
@@ -15,6 +15,10 @@
  * limitations under the License.
  */
 
+#include <framework/Cluster.h>
+#include <framework/Framework.h>
+#include <framework/Gfsh.h>
+
 #include <future>
 #include <iostream>
 #include <random>
@@ -27,10 +31,6 @@
 #include <geode/RegionFactory.hpp>
 #include <geode/RegionShortcut.hpp>
 
-#include "framework/Cluster.h"
-#include "framework/Framework.h"
-#include "framework/Gfsh.h"
-
 namespace {
 
 using apache::geode::client::Cache;
diff --git a/cppcache/integration/test/ExpirationTest.cpp b/cppcache/integration/test/ExpirationTest.cpp
new file mode 100644
index 0000000..fddf72d
--- /dev/null
+++ b/cppcache/integration/test/ExpirationTest.cpp
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <future>
+#include <iostream>
+#include <random>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/CacheableBuiltins.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "framework/Cluster.h"
+#include "framework/Framework.h"
+#include "framework/Gfsh.h"
+
+namespace {
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableInt32;
+using apache::geode::client::CacheableString;
+using apache::geode::client::ExpirationAction;
+using apache::geode::client::Pool;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+using std::chrono::minutes;
+
+const int TEST_TTL_ENTRY_TIMEOUT = 5;
+
+Cache createCache() {
+  using apache::geode::client::CacheFactory;
+
+  auto cache = CacheFactory()
+                   .set("log-level", "none")
+                   .set("statistic-sampling-enabled", "false")
+                   .create();
+
+  return cache;
+}
+
+std::shared_ptr<Region> setupRegion(Cache& cache) {
+  auto region = cache.createRegionFactory(RegionShortcut::LOCAL)
+                    .setEntryTimeToLive(ExpirationAction::LOCAL_INVALIDATE,
+                                        std::chrono::seconds(5))
+                    .create("region");
+
+  return region;
+}
+
+TEST(ExpirationTest, verifyExpiration) {
+  auto cache = createCache();
+  auto region = setupRegion(cache);
+
+  region->put(1, "one");
+  std::this_thread::sleep_for(std::chrono::seconds(3));
+  ASSERT_TRUE(region->containsValueForKey(1));
+  auto result = std::dynamic_pointer_cast<CacheableString>(region->get(1));
+  ASSERT_NE(result, nullptr);
+  ASSERT_EQ(result->value(), "one");
+
+  std::this_thread::sleep_for(std::chrono::seconds(5));
+  ASSERT_FALSE(region->containsValueForKey(1));
+}
+
+}  // namespace
diff --git a/cppcache/integration/test/FunctionExecutionTest.cpp b/cppcache/integration/test/FunctionExecutionTest.cpp
new file mode 100644
index 0000000..06b9e02
--- /dev/null
+++ b/cppcache/integration/test/FunctionExecutionTest.cpp
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/ExceptionTypes.hpp>
+#include <geode/FunctionService.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "framework/Cluster.h"
+#include "framework/Gfsh.h"
+
+using apache::geode::client::Cache;
+using apache::geode::client::Cacheable;
+using apache::geode::client::CacheableVector;
+using apache::geode::client::FunctionExecutionException;
+using apache::geode::client::FunctionService;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+using apache::geode::client::ResultCollector;
+
+std::shared_ptr<Region> setupRegion(Cache &cache) {
+  auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+                    .setPoolName("default")
+                    .create("region");
+
+  return region;
+}
+
+TEST(FunctionExecutionTest, UnknownFunctionOnServer) {
+  Cluster cluster{LocatorCount{1}, ServerCount{1}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+
+  ASSERT_THROW(FunctionService::onServer(region->getRegionService())
+                   .execute("I_Don_t_Exist"),
+               FunctionExecutionException);
+}
+
+TEST(FunctionExecutionTest, UnknownFunctionOnRegion) {
+  Cluster cluster{LocatorCount{1}, ServerCount{1}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+
+  ASSERT_THROW(FunctionService::onRegion(region).execute("I_Don_t_Exist"),
+               FunctionExecutionException);
+}
+
+class TestResultCollector : public ResultCollector {
+  virtual std::shared_ptr<CacheableVector> getResult(
+      std::chrono::milliseconds) override {
+    return std::shared_ptr<CacheableVector>();
+  }
+
+  virtual void addResult(const std::shared_ptr<Cacheable> &) override {}
+
+  virtual void endResults() override {}
+
+  virtual void clearResults() override {}
+};
+
+TEST(FunctionExecutionTest, UnknownFunctionAsyncOnServer) {
+  Cluster cluster{LocatorCount{1}, ServerCount{1}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+
+  ASSERT_THROW(FunctionService::onServer(region->getRegionService())
+                   .withCollector(std::make_shared<TestResultCollector>())
+                   .execute("I_Don_t_Exist"),
+               FunctionExecutionException);
+}
+
+TEST(FunctionExecutionTest, UnknownFunctionAsyncOnRegion) {
+  Cluster cluster{LocatorCount{1}, ServerCount{1}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+
+  ASSERT_THROW(FunctionService::onRegion(region)
+                   .withCollector(std::make_shared<TestResultCollector>())
+                   .execute("I_Don_t_Exist"),
+               FunctionExecutionException);
+}
diff --git a/cppcache/integration-test-2/PdxInstanceTest.cpp b/cppcache/integration/test/PdxInstanceTest.cpp
similarity index 99%
rename from cppcache/integration-test-2/PdxInstanceTest.cpp
rename to cppcache/integration/test/PdxInstanceTest.cpp
index dadbe32..b68a1a5 100644
--- a/cppcache/integration-test-2/PdxInstanceTest.cpp
+++ b/cppcache/integration/test/PdxInstanceTest.cpp
@@ -15,6 +15,9 @@
  * limitations under the License.
  */
 
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
 #include <future>
 #include <initializer_list>
 #include <iostream>
@@ -33,8 +36,6 @@
 #include "LocalRegion.hpp"
 #include "NestedPdxObject.hpp"
 #include "PdxType.hpp"
-#include "framework/Cluster.h"
-#include "framework/Gfsh.h"
 
 namespace {
 
diff --git a/cppcache/integration/test/RegionGetAllTest.cpp b/cppcache/integration/test/RegionGetAllTest.cpp
new file mode 100644
index 0000000..b032f96
--- /dev/null
+++ b/cppcache/integration/test/RegionGetAllTest.cpp
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <future>
+#include <iostream>
+#include <random>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "framework/Cluster.h"
+#include "framework/Framework.h"
+#include "framework/Gfsh.h"
+
+namespace {
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableString;
+using apache::geode::client::Pool;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+using std::chrono::minutes;
+
+Cache createCache() {
+  using apache::geode::client::CacheFactory;
+
+  auto cache = CacheFactory()
+                   .set("log-level", "none")
+                   .set("statistic-sampling-enabled", "false")
+                   .create();
+
+  return cache;
+}
+
+std::shared_ptr<Pool> createPool(Cluster& cluster, Cache& cache) {
+  auto poolFactory = cache.getPoolManager().createFactory();
+  cluster.applyLocators(poolFactory);
+  poolFactory.setPRSingleHopEnabled(true);
+  return poolFactory.create("default");
+}
+
+std::shared_ptr<Region> setupRegion(Cache& cache,
+                                    const std::shared_ptr<Pool>& pool) {
+  auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+                    .setPoolName(pool->getName())
+                    .create("region");
+
+  return region;
+}
+
+TEST(RegionGetAllTest, getAllFromPartitionedRegion) {
+  Cluster cluster{LocatorCount{1}, ServerCount{2}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("PARTITION")
+      .execute();
+
+  auto cache = createCache();
+  auto pool = createPool(cluster, cache);
+  auto region = setupRegion(cache, pool);
+
+  region->put(1, "one");
+  region->put(2, "two");
+
+  auto keys = region->serverKeys();
+
+  for (int i = 0; i < 100; i++) {
+    auto all = region->getAll(keys);
+  }
+}
+
+}  // namespace
diff --git a/cppcache/integration/test/RegionPutAllTest.cpp b/cppcache/integration/test/RegionPutAllTest.cpp
new file mode 100644
index 0000000..03bd31f
--- /dev/null
+++ b/cppcache/integration/test/RegionPutAllTest.cpp
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <chrono>
+#include <future>
+#include <iostream>
+#include <random>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "CacheRegionHelper.hpp"
+#include "framework/Cluster.h"
+#include "framework/Framework.h"
+#include "framework/Gfsh.h"
+
+namespace {
+
+using apache::geode::client::Cache;
+using apache::geode::client::Cacheable;
+using apache::geode::client::CacheableKey;
+using apache::geode::client::CacheableString;
+using apache::geode::client::HashMapOfCacheable;
+using apache::geode::client::Pool;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+using std::chrono::minutes;
+
+Cache createCache() {
+  using apache::geode::client::CacheFactory;
+
+  auto cache = CacheFactory()
+                   .set("log-level", "debug")
+                   .set("statistic-sampling-enabled", "false")
+                   .create();
+
+  return cache;
+}
+
+std::shared_ptr<Pool> createPool(Cluster& cluster, Cache& cache) {
+  auto poolFactory = cache.getPoolManager().createFactory();
+  cluster.applyLocators(poolFactory);
+  poolFactory.setPRSingleHopEnabled(true);
+  return poolFactory.create("default");
+}
+
+std::shared_ptr<Region> setupRegion(Cache& cache,
+                                    const std::shared_ptr<Pool>& pool) {
+  auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+                    .setPoolName(pool->getName())
+                    .create("region");
+
+  return region;
+}
+
+TEST(RegionPutAllTest, putAllToPartitionedRegion) {
+  Cluster cluster{LocatorCount{1}, ServerCount{2}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("PARTITION")
+      .execute();
+
+  auto cache = createCache();
+  auto pool = createPool(cluster, cache);
+  auto region = setupRegion(cache, pool);
+
+  HashMapOfCacheable all;
+  for (int i = 0; i < 100; i++) {
+    region->put(CacheableKey::create(i), Cacheable::create(std::to_string(i)));
+    all.emplace(CacheableKey::create(i), Cacheable::create(std::to_string(i)));
+  }
+
+  for (int i = 0; i < 100; i++) {
+    // TODO some way force synchronous client metadata update first.
+    region->putAll(all);
+    std::this_thread::sleep_for(std::chrono::seconds(1));
+  }
+}
+
+}  // namespace
diff --git a/cppcache/integration-test-2/RegionPutGetAllTest.cpp b/cppcache/integration/test/RegionPutGetAllTest.cpp
similarity index 90%
rename from cppcache/integration-test-2/RegionPutGetAllTest.cpp
rename to cppcache/integration/test/RegionPutGetAllTest.cpp
index 4b5633f..910566d 100644
--- a/cppcache/integration-test-2/RegionPutGetAllTest.cpp
+++ b/cppcache/integration/test/RegionPutGetAllTest.cpp
@@ -15,6 +15,10 @@
  * limitations under the License.
  */
 
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
+#include <VariousPdxTypes.hpp>
 #include <future>
 #include <initializer_list>
 #include <iostream>
@@ -29,14 +33,11 @@
 #include <geode/RegionShortcut.hpp>
 #include <geode/TypeRegistry.hpp>
 
-#include "VariousPdxTypes.hpp"
-#include "framework/Cluster.h"
-#include "framework/Gfsh.h"
-
 namespace {
 
 using apache::geode::client::Cache;
 using apache::geode::client::CacheableInt32;
+using apache::geode::client::CacheServerException;
 using apache::geode::client::HashMapOfCacheable;
 using apache::geode::client::Region;
 using apache::geode::client::RegionShortcut;
@@ -198,4 +199,29 @@
   assert_eq(putAllMap, getAllMap);
 }
 
+TEST(RegionPutGetAllTest, nullValue) {
+  Cluster cluster{LocatorCount{1}, ServerCount{2}};
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+
+  setupPdxTypes(cache);
+
+  HashMapOfCacheable map;
+
+  // Add a null value
+  map.emplace(CacheableInt32::create(PdxTypesHelper1::index),
+              std::shared_ptr<PdxTypesHelper1::type>());
+
+  auto keys = to_keys(map);
+
+  ASSERT_THROW(region->putAll(map), CacheServerException);
+}
+
 }  // namespace
diff --git a/cppcache/integration-test-2/RegisterKeysTest.cpp b/cppcache/integration/test/RegisterKeysTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/RegisterKeysTest.cpp
rename to cppcache/integration/test/RegisterKeysTest.cpp
diff --git a/cppcache/integration-test-2/StructTest.cpp b/cppcache/integration/test/StructTest.cpp
similarity index 96%
rename from cppcache/integration-test-2/StructTest.cpp
rename to cppcache/integration/test/StructTest.cpp
index 6f5d0d0..b65c6d7 100644
--- a/cppcache/integration-test-2/StructTest.cpp
+++ b/cppcache/integration/test/StructTest.cpp
@@ -15,6 +15,9 @@
  * limitations under the License.
  */
 
+#include <framework/Cluster.h>
+#include <framework/Framework.h>
+#include <framework/Gfsh.h>
 #include <hacks/range.h>
 
 #include <iostream>
@@ -29,10 +32,6 @@
 #include <geode/RegionShortcut.hpp>
 #include <geode/Struct.hpp>
 
-#include "framework/Cluster.h"
-#include "framework/Framework.h"
-#include "framework/Gfsh.h"
-
 namespace {
 
 using apache::geode::client::Cache;
diff --git a/cppcache/shared/CMakeLists.txt b/cppcache/shared/CMakeLists.txt
index 09c11ec..e8803a0 100644
--- a/cppcache/shared/CMakeLists.txt
+++ b/cppcache/shared/CMakeLists.txt
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.4)
 project(apache-geode LANGUAGES CXX)
 
 add_library(apache-geode SHARED ${SOURCES_ALL} ${RESOURCES})
@@ -24,6 +23,11 @@
 
 #define APACHE_GEODE_EXTERN_TEMPLATE_EXPORT
 ")
+
+  target_compile_options(apache-geode
+    PRIVATE
+      /bigobj # C1128 - large number of templates causes too many section.
+  )
 else()
   set(EXPORT_HEADER_CUSTOM_CONTENT "
 #define APACHE_GEODE_EXPLICIT_TEMPLATE_EXPORT
diff --git a/cppcache/src/AdminRegion.cpp b/cppcache/src/AdminRegion.cpp
index 5a93743..e08c734 100644
--- a/cppcache/src/AdminRegion.cpp
+++ b/cppcache/src/AdminRegion.cpp
@@ -20,6 +20,7 @@
 #include <geode/SystemProperties.hpp>
 
 #include "CacheImpl.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "ThinClientRegion.hpp"
 #include "statistics/StatisticsManager.hpp"
diff --git a/cppcache/src/CacheFactory.cpp b/cppcache/src/CacheFactory.cpp
index 3f368fe..72e63dd 100644
--- a/cppcache/src/CacheFactory.cpp
+++ b/cppcache/src/CacheFactory.cpp
@@ -19,9 +19,6 @@
 #include <map>
 #include <string>
 
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/Cache.hpp>
 #include <geode/CacheFactory.hpp>
 #include <geode/PoolManager.hpp>
@@ -111,9 +108,8 @@
       std::bind(VersionTag::createDeserializable, memberListForVersionStamp));
 
   serializationRegistry->addDataSerializableFixedIdType(
-      static_cast<int64_t>(DSFid::DiskVersionTag),
-      std::bind(DiskVersionTag::createDeserializable,
-                memberListForVersionStamp));
+      DSFid::DiskVersionTag, std::bind(DiskVersionTag::createDeserializable,
+                                       memberListForVersionStamp));
 
   serializationRegistry->setPdxTypeHandler(new PdxTypeHandler());
   serializationRegistry->setDataSerializableHandler(
diff --git a/cppcache/src/CacheImpl.cpp b/cppcache/src/CacheImpl.cpp
index f18c67d..87e0c61 100644
--- a/cppcache/src/CacheImpl.cpp
+++ b/cppcache/src/CacheImpl.cpp
@@ -14,12 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "CacheImpl.hpp"
 
 #include <string>
 
-#include <ace/OS.h>
-
 #include <geode/CacheStatistics.hpp>
 #include <geode/PersistenceManager.hpp>
 #include <geode/PoolManager.hpp>
@@ -30,12 +29,14 @@
 #include "AutoDelete.hpp"
 #include "CacheXmlParser.hpp"
 #include "ClientProxyMembershipID.hpp"
+#include "EvictionController.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "InternalCacheTransactionManager2PCImpl.hpp"
 #include "LocalRegion.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "RegionExpiryHandler.hpp"
 #include "SerializationRegistry.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientHARegion.hpp"
 #include "ThinClientPoolDM.hpp"
@@ -65,9 +66,7 @@
       m_distributedSystem(DistributedSystem::create(DEFAULT_DS_NAME, dsProps)),
       m_clientProxyMembershipIDFactory(m_distributedSystem.getName()),
       m_cache(c),
-      m_cond(m_mutex),
       m_attributes(nullptr),
-      m_evictionControllerPtr(nullptr),
       m_tcrConnectionManager(nullptr),
       m_remoteQueryServicePtr(nullptr),
       m_destroyPending(false),
@@ -77,20 +76,18 @@
           *(std::make_shared<MemberListForVersionStamp>())),
       m_serializationRegistry(std::make_shared<SerializationRegistry>()),
       m_pdxTypeRegistry(nullptr),
-      m_threadPool(new ThreadPool(
-          m_distributedSystem.getSystemProperties().threadPoolSize())),
+      m_threadPool(m_distributedSystem.getSystemProperties().threadPoolSize()),
       m_authInitialize(authInitialize) {
   using apache::geode::statistics::StatisticsManager;
 
   m_cacheTXManager = std::shared_ptr<InternalCacheTransactionManager2PC>(
       new InternalCacheTransactionManager2PCImpl(this));
 
-  m_regions = new MapOfRegionWithLock();
   auto& prop = m_distributedSystem.getSystemProperties();
   if (prop.heapLRULimitEnabled()) {
-    m_evictionControllerPtr =
-        new EvictionController(prop.heapLRULimit(), prop.heapLRUDelta(), this);
-    m_evictionControllerPtr->start();
+    m_evictionController = std::unique_ptr<EvictionController>(
+        new EvictionController(prop.heapLRULimit(), prop.heapLRUDelta(), this));
+    m_evictionController->start();
     LOGINFO("Heap LRU eviction controller thread started");
   }
 
@@ -186,14 +183,11 @@
   return regionKind;
 }
 
-int CacheImpl::removeRegion(const char* name) {
+void CacheImpl::removeRegion(const std::string& name) {
   TryReadGuard guardCacheDestroy(m_destroyCacheMutex, m_destroyPending);
-  if (m_destroyPending) {
-    return 0;
+  if (!m_destroyPending) {
+    m_regions.erase(name);
   }
-
-  MapOfRegionGuard guard(m_regions->mutex());
-  return m_regions->unbind(name);
 }
 
 std::shared_ptr<QueryService> CacheImpl::getQueryService(bool noInit) {
@@ -234,10 +228,6 @@
   if (!m_closed) {
     close();
   }
-
-  if (m_regions != nullptr) {
-    delete m_regions;
-  }
 }
 
 const std::string& CacheImpl::getName() const {
@@ -310,24 +300,22 @@
     m_tcrConnectionManager->close();
   }
 
-  MapOfRegionWithLock regions;
+  std::unordered_map<std::string, std::shared_ptr<Region>> regions;
   getSubRegions(regions);
 
-  for (MapOfRegionWithLock::iterator q = regions.begin(); q != regions.end();
-       ++q) {
+  for (const auto& kv : regions) {
     // TODO: remove dynamic_cast here by having RegionInternal in the regions
     // map
-    auto rImpl = std::dynamic_pointer_cast<RegionInternal>((*q).int_id_);
-    if (rImpl != nullptr) {
+    auto rImpl = std::dynamic_pointer_cast<RegionInternal>(kv.second);
+    if (rImpl) {
       rImpl->destroyRegionNoThrow(
           nullptr, false,
           CacheEventFlags::LOCAL | CacheEventFlags::CACHE_CLOSE);
     }
   }
 
-  if (m_evictionControllerPtr != nullptr) {
-    m_evictionControllerPtr->stop();
-    _GEODE_SAFE_DELETE(m_evictionControllerPtr);
+  if (m_evictionController) {
+    m_evictionController->stop();
   }
 
   // Close CachePef Stats
@@ -345,7 +333,7 @@
     _GEODE_SAFE_DELETE(m_cacheStats);
   }
 
-  m_regions->unbind_all();
+  m_regions.clear();
   LOGDEBUG("CacheImpl::close( ): destroyed regions.");
 
   _GEODE_SAFE_DELETE(m_tcrConnectionManager);
@@ -384,7 +372,7 @@
                              RegionAttributes regionAttributes,
                              std::shared_ptr<Region>& regionPtr) {
   {
-    ACE_Guard<ACE_Thread_Mutex> _guard(m_initDoneLock);
+    std::lock_guard<decltype(m_initDoneLock)> _guard(m_initDoneLock);
     if (!m_initDone) {
       if (regionAttributes.getPoolName().empty()) {
         m_tcrConnectionManager->init();
@@ -408,12 +396,9 @@
   validateRegionAttributes(name, regionAttributes);
   std::shared_ptr<RegionInternal> rpImpl = nullptr;
   {
-    // For multi threading and the operations between bind and find seems to be
-    // hard to be atomic since a regionImpl needs to be valid before it can be
-    // bound
-    MapOfRegionGuard guard1(m_regions->mutex());
-    std::shared_ptr<Region> tmp;
-    if (0 == m_regions->find(name, tmp)) {
+    auto&& lock = m_regions.make_lock();
+
+    if (m_regions.find(name) != m_regions.end()) {
       throw RegionExistsException("Cache::createRegion: \"" + name +
                                   "\" region exists in local cache");
     }
@@ -457,27 +442,22 @@
     }
 
     rpImpl->acquireReadLock();
-    m_regions->bind(regionPtr->getName(), regionPtr);
+    m_regions.emplace(regionPtr->getName(), regionPtr);
+  }
 
-    // When region is created, added that region name in client meta data
-    // service to fetch its
-    // metadata for single hop.
-    auto& props = m_distributedSystem.getSystemProperties();
-    if (!props.isGridClient()) {
-      const auto& poolName = regionAttributes.getPoolName();
-      if (!poolName.empty()) {
-        auto pool = getPoolManager().find(poolName);
-        if (pool != nullptr && !pool->isDestroyed() &&
-            pool->getPRSingleHopEnabled()) {
-          ThinClientPoolDM* poolDM =
-              dynamic_cast<ThinClientPoolDM*>(pool.get());
-          if ((poolDM != nullptr) &&
-              (poolDM->getClientMetaDataService() != nullptr)) {
-            LOGFINE("enqueued region " + name +
-                    " for initial metadata refresh for singlehop ");
-            poolDM->getClientMetaDataService()->enqueueForMetadataRefresh(
-                regionPtr->getFullPath(), 0);
-          }
+  // When region is created, added that region name in client meta data
+  // service to fetch its metadata for single hop.
+  const auto& poolName = regionAttributes.getPoolName();
+  if (!poolName.empty()) {
+    const auto& pool = getPoolManager().find(poolName);
+    if (pool && !pool->isDestroyed() && pool->getPRSingleHopEnabled()) {
+      if (const auto& poolDM =
+              std::dynamic_pointer_cast<ThinClientPoolDM>(pool)) {
+        if (auto clientMetaDataService = poolDM->getClientMetaDataService()) {
+          LOGFINE("enqueued region " + name +
+                  " for initial metadata refresh for singlehop ");
+          poolDM->getClientMetaDataService()->enqueueForMetadataRefresh(
+              regionPtr->getFullPath(), 0);
         }
       }
     }
@@ -488,6 +468,15 @@
   rpImpl->releaseReadLock();
 }
 
+std::shared_ptr<Region> CacheImpl::findRegion(const std::string& name) {
+  auto&& lock = m_regions.make_lock<std::lock_guard>();
+  const auto& find = m_regions.find(name);
+  if (find != m_regions.end()) {
+    return find->second;
+  }
+  return nullptr;
+}
+
 std::shared_ptr<Region> CacheImpl::getRegion(const std::string& path) {
   LOGDEBUG("Cache::getRegion " + path);
 
@@ -499,34 +488,30 @@
     return nullptr;
   }
 
-  MapOfRegionGuard guard(m_regions->mutex());
   static const std::string slash("/");
   if (path == slash || path.length() < 1) {
     LOGERROR("Cache::getRegion: path [" + path + "] is not valid.");
     throw IllegalArgumentException("Cache::getRegion: path is empty or a /");
   }
+
   auto fullname = path;
   if (fullname.substr(0, 1) == slash) {
     fullname = path.substr(1);
   }
 
   // find second separator
-  auto idx = static_cast<uint32_t>(fullname.find('/'));
+  auto idx = fullname.find('/');
   auto stepname = fullname.substr(0, idx);
 
-  std::shared_ptr<Region> region = nullptr;
-
-  if (0 == m_regions->find(stepname, region)) {
+  auto region = findRegion(stepname);
+  if (region) {
     if (stepname != fullname) {
       auto remainder = fullname.substr(stepname.length() + 1);
-
-      if (region != nullptr) {
-        region = region->getSubregion(remainder.c_str());
-      }
+      region = region->getSubregion(remainder);
     }
   }
 
-  if (region != nullptr && isPoolInMultiuserMode(region)) {
+  if (region && isPoolInMultiuserMode(region)) {
     LOGWARN("Pool " + region->getAttributes().getPoolName() +
             " attached with region " + region->getFullPath() +
             " is in multiuser authentication mode. Operations may fail as "
@@ -607,15 +592,14 @@
 
   std::vector<std::shared_ptr<Region>> regions;
 
-  MapOfRegionGuard guard(m_regions->mutex());
+  auto&& lock = m_regions.make_lock();
 
-  if (m_regions->current_size() != 0) {
-    regions.reserve(static_cast<int32_t>(m_regions->current_size()));
+  if (!m_regions.empty()) {
+    regions.reserve(m_regions.size());
 
-    for (MapOfRegionWithLock::iterator q = m_regions->begin();
-         q != m_regions->end(); ++q) {
-      if (!(*q).int_id_->isDestroyed()) {
-        regions.push_back((*q).int_id_);
+    for (const auto& kv : m_regions) {
+      if (!kv.second->isDestroyed()) {
+        regions.push_back(kv.second);
       }
     }
   }
@@ -634,7 +618,7 @@
 }
 
 EvictionController* CacheImpl::getEvictionController() {
-  return m_evictionControllerPtr;
+  return m_evictionController.get();
 }
 
 void CacheImpl::readyForEvents() {
@@ -706,9 +690,10 @@
   const auto firstPool =
       std::static_pointer_cast<ThinClientPoolDM>(pools.begin()->second);
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(firstPool->m_endpointsLock);
+  auto& mutex = firstPool->m_endpointsLock;
+  std::lock_guard<decltype(mutex)> guard(mutex);
   for (const auto& itr : firstPool->m_endpoints) {
-    const auto& ep = itr.int_id_;
+    auto ep = itr.second;
     if (ep->name().find(fullName) != std::string::npos) {
       return ep->getServerQueueStatusTEST();
     }
@@ -722,12 +707,12 @@
     return;
   }
 
-  MapOfRegionGuard guard(m_regions->mutex());
+  auto&& lock = m_regions.make_lock();
 
-  for (const auto& q : *m_regions) {
-    if (!q.int_id_->isDestroyed()) {
+  for (const auto& kv : m_regions) {
+    if (!kv.second->isDestroyed()) {
       if (const auto tcrHARegion =
-              std::dynamic_pointer_cast<ThinClientHARegion>(q.int_id_)) {
+              std::dynamic_pointer_cast<ThinClientHARegion>(kv.second)) {
         auto regionMsg = new TcrMessageClientMarker(
             new DataOutput(createDataOutput()), true);
         tcrHARegion->receiveNotification(regionMsg);
@@ -801,7 +786,8 @@
   return m_serializationRegistry;
 }
 
-ThreadPool* CacheImpl::getThreadPool() { return m_threadPool; }
+ThreadPool& CacheImpl::getThreadPool() { return m_threadPool; }
+
 std::shared_ptr<CacheTransactionManager>
 CacheImpl::getCacheTransactionManager() {
   this->throwIfClosed();
@@ -888,6 +874,11 @@
 }
 
 void CacheImpl::setCache(Cache* cache) { m_cache = cache; }
+
+void CacheImpl::setClientCrashTEST() {
+  m_tcrConnectionManager->setClientCrashTEST();
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/CacheImpl.hpp b/cppcache/src/CacheImpl.hpp
index f0f6908..3ab93ad 100644
--- a/cppcache/src/CacheImpl.hpp
+++ b/cppcache/src/CacheImpl.hpp
@@ -22,11 +22,9 @@
 
 #include <atomic>
 #include <memory>
+#include <mutex>
 
-#include <ace/ACE.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
+#include <ace/RW_Thread_Mutex.h>
 
 #include <geode/Cache.hpp>
 #include <geode/CacheAttributes.hpp>
@@ -37,15 +35,13 @@
 #include "AdminRegion.hpp"
 #include "CachePerfStats.hpp"
 #include "ClientProxyMembershipIDFactory.hpp"
-#include "Condition.hpp"
 #include "DistributedSystem.hpp"
-#include "EvictionController.hpp"
-#include "MapWithLock.hpp"
 #include "MemberListForVersionStamp.hpp"
 #include "NonCopyable.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "RemoteQueryService.hpp"
-#include "TcrConnectionManager.hpp"
+#include "ThreadPool.hpp"
+#include "util/synchronized_map.hpp"
 
 #define DEFAULT_LRU_MAXIMUM_ENTRIES 100000
 /** @todo period '.' consistency */
@@ -67,6 +63,8 @@
 class RegionAttributes;
 class SerializationRegistry;
 class ThreadPool;
+class EvictionController;
+class TcrConnectionManager;
 
 /**
  * @class Cache Cache.hpp
@@ -97,7 +95,7 @@
   // drop
   void netDown();
   void revive();
-  void setClientCrashTEST() { m_tcrConnectionManager->setClientCrashTEST(); }
+  void setClientCrashTEST();
 
   // For PrSingleHop C++unit testing.
   void setNetworkHopFlag(bool networkhopflag) {
@@ -239,7 +237,7 @@
     return *m_tcrConnectionManager;
   }
 
-  int removeRegion(const char* name);
+  void removeRegion(const std::string& name);
 
   std::shared_ptr<QueryService> getQueryService(bool noInit = false);
 
@@ -311,7 +309,7 @@
     return m_distributedSystem.getSystemProperties();
   }
 
-  ThreadPool* getThreadPool();
+  ThreadPool& getThreadPool();
 
   inline const std::shared_ptr<AuthInitialize>& getAuthInitialize() {
     return m_authInitialize;
@@ -366,15 +364,15 @@
   void validateRegionAttributes(const std::string& name,
                                 const RegionAttributes attrs) const;
 
-  inline void getSubRegions(MapOfRegionWithLock& srm) {
-    MapOfRegionGuard guard(m_regions->mutex());
-    if (m_regions->current_size() == 0) return;
-    for (MapOfRegionWithLock::iterator p = m_regions->begin();
-         p != m_regions->end(); ++p) {
-      srm.bind((*p).ext_id_, (*p).int_id_);
-    }
+  inline void getSubRegions(
+      std::unordered_map<std::string, std::shared_ptr<Region>>& srm) {
+    auto&& lock = m_regions.make_lock<std::lock_guard>();
+    if (m_regions.empty()) return;
+    srm.insert(m_regions.begin(), m_regions.end());
   }
 
+  std::shared_ptr<Region> findRegion(const std::string& name);
+
   void setCache(Cache* cache);
 
   bool m_closed;
@@ -382,25 +380,25 @@
 
   DistributedSystem m_distributedSystem;
   ClientProxyMembershipIDFactory m_clientProxyMembershipIDFactory;
-  MapOfRegionWithLock* m_regions;
+  synchronized_map<std::unordered_map<std::string, std::shared_ptr<Region>>,
+                   std::recursive_mutex>
+      m_regions;
   Cache* m_cache;
-  ACE_Recursive_Thread_Mutex m_mutex;
-  Condition m_cond;
   std::shared_ptr<CacheAttributes> m_attributes;
-  EvictionController* m_evictionControllerPtr;
+  std::unique_ptr<EvictionController> m_evictionController;
   TcrConnectionManager* m_tcrConnectionManager;
   std::shared_ptr<RemoteQueryService> m_remoteQueryServicePtr;
   ACE_RW_Thread_Mutex m_destroyCacheMutex;
   volatile bool m_destroyPending;
   volatile bool m_initDone;
-  ACE_Thread_Mutex m_initDoneLock;
+  std::mutex m_initDoneLock;
   std::shared_ptr<AdminRegion> m_adminRegion;
   std::shared_ptr<CacheTransactionManager> m_cacheTXManager;
 
   MemberListForVersionStamp& m_memberListForVersionStamp;
   std::shared_ptr<SerializationRegistry> m_serializationRegistry;
   std::shared_ptr<PdxTypeRegistry> m_pdxTypeRegistry;
-  ThreadPool* m_threadPool;
+  ThreadPool m_threadPool;
   const std::shared_ptr<AuthInitialize> m_authInitialize;
   std::unique_ptr<TypeRegistry> m_typeRegistry;
 
diff --git a/cppcache/src/CacheTransactionManagerImpl.cpp b/cppcache/src/CacheTransactionManagerImpl.cpp
index 27a5e96..8462736 100644
--- a/cppcache/src/CacheTransactionManagerImpl.cpp
+++ b/cppcache/src/CacheTransactionManagerImpl.cpp
@@ -36,17 +36,17 @@
 namespace client {
 
 CacheTransactionManagerImpl::CacheTransactionManagerImpl(CacheImpl* cache)
-    : m_cache(cache), m_txCond(m_suspendedTxLock) {}
+    : m_cache(cache) {}
 
 CacheTransactionManagerImpl::~CacheTransactionManagerImpl() {}
 
 void CacheTransactionManagerImpl::begin() {
-  if (TSSTXStateWrapper::s_geodeTSSTXState->getTXState() != nullptr) {
+  if (TSSTXStateWrapper::get().getTXState() != nullptr) {
     GfErrTypeThrowException("Transaction already in progress",
                             GF_CACHE_ILLEGAL_STATE_EXCEPTION);
   }
   auto txState = new TXState(m_cache);
-  TSSTXStateWrapper::s_geodeTSSTXState->setTXState(txState);
+  TSSTXStateWrapper::get().setTXState(txState);
   addTx(txState->getTransactionId().getId());
 }
 
@@ -111,140 +111,6 @@
   auto commit = std::dynamic_pointer_cast<TXCommitMessage>(reply.getValue());
   txCleaner.clean();
   commit->apply(m_cache->getCache());
-
-  /*
-          if(m_writer != nullptr)
-          {
-                  try
-                  {
-                          std::shared_ptr<TransactionEvent> event(new
-     TransactionEvent(txState->getTransactionId(),
-     std::shared_ptr<Cache>(m_cache), commit->getEvents(m_cache)));
-                          m_writer->beforeCommit(event);
-                  } catch(const TransactionWriterException& ex)
-                  {
-                          noteCommitFailure(txState, commit);
-                          GfErrTypeThrowException(ex.what(),
-     GF_COMMIT_CONFLICT_EXCEPTION);
-                  }
-                  catch (const Exception& ex)
-                  {
-                          noteCommitFailure(txState, commit);
-                          LOGERROR("Unexpected exception during writer callback
-     %s", ex.what());
-                          throw ex;
-                  }
-                  catch (...)
-                  {
-                          noteCommitFailure(txState, commit);
-                          LOGERROR("Unexpected exception during writer
-     callback");
-                          throw;
-                  }
-          }
-  */
-
-  /*try
-  {
-          TcrMessage requestCommitBefore(TcrMessage::TX_SYNCHRONIZATION,
-BEFORE_COMMIT, txState->getTransactionId()->getId(), STATUS_COMMITTED);
-          TcrMessage replyCommitBefore;
-          err = tcr_dm->sendSyncRequest(requestCommitBefore, replyCommitBefore);
-          if(err != GF_NOERR)
-          {
-                  GfErrTypeThrowException("Error while committing", err);
-          } else {
-                  switch (replyCommitBefore.getMessageType()) {
-                  case TcrMessage::REPLY: {
-                          break;
-                  }
-                  case TcrMessage::EXCEPTION: {
-                          const char* exceptionMsg =
-replyCommitBefore.getException();
-                                                        err =
-ThinClientRegion::handleServerException("CacheTransactionManager::commit",
-                                                            exceptionMsg);
-                                                        GfErrTypeThrowException("Commit
-Failed", err);
-                          break;
-                  }
-                  case TcrMessage::REQUEST_DATA_ERROR: {
-                          GfErrTypeThrowException("Commit Failed",
-GF_COMMIT_CONFLICT_EXCEPTION);
-                          break;
-                  }
-                  default: {
-                          LOGERROR("Unknown message type in commit reply %d",
-reply.getMessageType());
-                                                  GfErrTypeThrowException("Commit
-Failed", GF_MSG);
-                          break;
-                  }
-                  }
-          }
-  }
-  catch (const Exception& ex)
-  {
-//		noteCommitFailure(txState, commit);
-          LOGERROR("Unexpected exception during commit %s", ex.what());
-          throw ex;
-  }
-  catch (...)
-  {
-//		noteCommitFailure(txState, commit);
-          LOGERROR("Unexpected exception during writer callback");
-          throw;
-  }
-
-  try{
-          TcrMessage requestCommitAfter(TcrMessage::TX_SYNCHRONIZATION,
-AFTER_COMMIT, txState->getTransactionId()->getId(), STATUS_COMMITTED);
-          TcrMessage replyCommitAfter;
-          txCleaner.clean();
-          commit->apply(m_cache);
-          err = tcr_dm->sendSyncRequest(requestCommitAfter, replyCommitAfter);
-
-          if(err != GF_NOERR)
-          {
-                  GfErrTypeThrowException("Error while committing", err);
-          } else {
-                  switch (replyCommitAfter.getMessageType()) {
-                  case TcrMessage::RESPONSE: {
-                          //commit = replyCommitAfter.getValue();
-                          break;
-                  }
-                  case TcrMessage::EXCEPTION: {
-                          const char* exceptionMsg =
-replyCommitAfter.getException();
-                                                                                        err = ThinClientRegion::handleServerException("CacheTransactionManager::commit",
-                                                                                            exceptionMsg);
-                                                                                        GfErrTypeThrowException("Commit Failed", err);
-                          break;
-                  }
-                  case TcrMessage::REQUEST_DATA_ERROR: {
-                          GfErrTypeThrowException("Commit Failed",
-GF_COMMIT_CONFLICT_EXCEPTION);
-                          break;
-                  }
-                  default: {
-                          GfErrTypeThrowException("Commit Failed", GF_MSG);
-                          break;
-                  }
-                  }
-          }
-  }
-  catch (const Exception& ex)
-  {
-//		noteCommitFailure(txState, commit);
-          throw ex;
-  }
-  catch (...)
-  {
-//		noteCommitFailure(txState, commit);
-          throw;
-  }*/
-
-  //	noteCommitSuccess(txState, commit);
 }
 
 void CacheTransactionManagerImpl::rollback() {
@@ -309,10 +175,9 @@
 }
 
 ThinClientPoolDM* CacheTransactionManagerImpl::getDM() {
-  TcrConnection* conn =
-      (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
+  auto conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
   if (conn != nullptr) {
-    ThinClientPoolDM* dm = conn->getEndpointObject()->getPoolHADM();
+    auto dm = conn->getEndpointObject()->getPoolHADM();
     if (dm != nullptr) {
       return dm;
     }
@@ -323,15 +188,14 @@
 Cache* CacheTransactionManagerImpl::getCache() { return m_cache->getCache(); }
 TransactionId& CacheTransactionManagerImpl::suspend() {
   // get the current state of the thread
-  TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  auto txState = TSSTXStateWrapper::get().getTXState();
   if (txState == nullptr) {
     LOGFINE("Transaction not in progress. Returning nullptr transaction Id.");
     throw TransactionException("Transaction not in progress.");
   }
 
   // get the current connection that this transaction is using
-  TcrConnection* conn =
-      (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
+  auto conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
   if (conn == nullptr) {
     LOGFINE(
         "Thread local connection is null. Returning nullptr transaction Id.");
@@ -366,7 +230,7 @@
   addSuspendedTx(txState->getTransactionId().getId(), txState);
 
   // set the current transaction state as null
-  TSSTXStateWrapper::s_geodeTSSTXState->setTXState(nullptr);
+  TSSTXStateWrapper::get().setTXState(nullptr);
 
   // return the transaction ID
   return static_cast<TransactionId&>(txState->getTransactionId());
@@ -374,7 +238,7 @@
 
 void CacheTransactionManagerImpl::resume(TransactionId& transactionId) {
   // get the current state of the thread
-  if (TSSTXStateWrapper::s_geodeTSSTXState->getTXState() != nullptr) {
+  if (TSSTXStateWrapper::get().getTXState() != nullptr) {
     GfErrTypeThrowException("A transaction is already in progress",
                             GF_CACHE_ILLEGAL_STATE_EXCEPTION);
   }
@@ -400,7 +264,7 @@
 bool CacheTransactionManagerImpl::tryResume(TransactionId& transactionId,
                                             bool cancelExpiryTask) {
   // get the current state of the thread
-  if (TSSTXStateWrapper::s_geodeTSSTXState->getTXState() != nullptr) {
+  if (TSSTXStateWrapper::get().getTXState() != nullptr) {
     LOGFINE("A transaction is already in progress. Cannot resume transaction.");
     return false;
   }
@@ -417,7 +281,7 @@
 bool CacheTransactionManagerImpl::tryResume(
     TransactionId& transactionId, std::chrono::milliseconds waitTime) {
   // get the current state of the thread
-  if (TSSTXStateWrapper::s_geodeTSSTXState->getTXState() != nullptr) {
+  if (TSSTXStateWrapper::get().getTXState() != nullptr) {
     LOGFINE("A transaction is already in progress. Cannot resume transaction.");
     return false;
   }
@@ -452,7 +316,7 @@
   }
 
   // set the current state as the state of the suspended transaction
-  TSSTXStateWrapper::s_geodeTSSTXState->setTXState(txState);
+  TSSTXStateWrapper::get().setTXState(txState);
 
   LOGFINE("Get connection for transaction id %d",
           txState->getTransactionId().getId());
@@ -462,7 +326,7 @@
   if (conn == nullptr || error != GF_NOERR) {
     // throw an exception and set the current state as nullptr because
     // the transaction cannot be resumed
-    TSSTXStateWrapper::s_geodeTSSTXState->setTXState(nullptr);
+    TSSTXStateWrapper::get().setTXState(nullptr);
     GfErrTypeThrowException(
         "Could not get a connection for the transaction id.",
         GF_CACHE_ILLEGAL_STATE_EXCEPTION);
@@ -478,83 +342,65 @@
 }
 
 bool CacheTransactionManagerImpl::exists() {
-  return TSSTXStateWrapper::s_geodeTSSTXState->getTXState() != nullptr;
+  return TSSTXStateWrapper::get().getTXState() != nullptr;
 }
 
 void CacheTransactionManagerImpl::addTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_txLock);
+  std::unique_lock<decltype(m_txLock)> _guard(m_txLock);
   m_TXs.push_back(txId);
 }
 
-bool CacheTransactionManagerImpl::removeTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_txLock);
-
-  for (std::vector<int32_t>::iterator iter = m_TXs.begin(); iter != m_TXs.end();
-       ++iter) {
-    if (*iter == txId) {
-      m_TXs.erase(iter);
-      return true;
-    }
-  }
-  return false;
+void CacheTransactionManagerImpl::removeTx(int32_t txId) {
+  std::unique_lock<decltype(m_txLock)> _guard(m_txLock);
+  m_TXs.erase(std::remove(m_TXs.begin(), m_TXs.end(), txId), m_TXs.end());
 }
 bool CacheTransactionManagerImpl::findTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_txLock);
-
-  for (std::vector<int32_t>::iterator iter = m_TXs.begin(); iter != m_TXs.end();
-       ++iter) {
-    if (*iter == txId) return true;
-  }
-  return false;
+  std::unique_lock<decltype(m_txLock)> _guard(m_txLock);
+  return std::find(m_TXs.begin(), m_TXs.end(), txId) != m_TXs.end();
 }
 
 void CacheTransactionManagerImpl::addSuspendedTx(int32_t txId,
                                                  TXState* txState) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_suspendedTxLock);
+  std::unique_lock<decltype(m_suspendedTxLock)> _guard(m_suspendedTxLock);
   m_suspendedTXs[txId] = txState;
-  // signal if some thread is waiting for this transaction to suspend
-  m_txCond.broadcast();
+  m_txCond.notify_all();
 }
 
 TXState* CacheTransactionManagerImpl::getSuspendedTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_suspendedTxLock);
-  std::map<int32_t, TXState*>::iterator it = m_suspendedTXs.find(txId);
+  std::unique_lock<decltype(m_suspendedTxLock)> _guard(m_suspendedTxLock);
+  auto&& it = m_suspendedTXs.find(txId);
   if (it == m_suspendedTXs.end()) return nullptr;
-  TXState* rettxState = (*it).second;
+  auto rettxState = (*it).second;
   return rettxState;
 }
 
 TXState* CacheTransactionManagerImpl::removeSuspendedTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_suspendedTxLock);
-  std::map<int32_t, TXState*>::iterator it = m_suspendedTXs.find(txId);
+  std::unique_lock<decltype(m_suspendedTxLock)> _guard(m_suspendedTxLock);
+  auto&& it = m_suspendedTXs.find(txId);
   if (it == m_suspendedTXs.end()) return nullptr;
-  TXState* rettxState = (*it).second;
+  auto rettxState = (*it).second;
   m_suspendedTXs.erase(it);
   return rettxState;
 }
+
 TXState* CacheTransactionManagerImpl::removeSuspendedTx(
     int32_t txId, std::chrono::milliseconds waitTime) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_suspendedTxLock);
-  TXState* txState = nullptr;
-  ACE_Time_Value currTime(ACE_OS::gettimeofday());
-  ACE_Time_Value stopAt(currTime);
-  stopAt += waitTime;
+  std::unique_lock<decltype(m_suspendedTxLock)> _guard(m_suspendedTxLock);
 
-  do {
-    txState = removeSuspendedTx(txId);
-    if (txState == nullptr) {
-      LOGFINE("Wait for the connection to get suspended, Tid: %d", txId);
-      m_txCond.wait(&stopAt);
-    }
+  auto txState = removeSuspendedTx(txId);
+  if (txState == nullptr) {
+    LOGFINE("Wait for the connection to get suspended, Tid: %d", txId);
+    m_txCond.wait_for(_guard, waitTime, [this, txId, &txState] {
+      return nullptr != (txState = removeSuspendedTx(txId));
+    });
+  }
 
-  } while (txState == nullptr && findTx(txId) &&
-           (currTime = ACE_OS::gettimeofday()) < stopAt);
   return txState;
 }
 
 bool CacheTransactionManagerImpl::isSuspendedTx(int32_t txId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_suspendedTxLock);
-  std::map<int32_t, TXState*>::iterator it = m_suspendedTXs.find(txId);
+  std::unique_lock<decltype(m_suspendedTxLock)> _guard(m_suspendedTxLock);
+  auto&& it = m_suspendedTXs.find(txId);
   if (it == m_suspendedTXs.end()) {
     return false;
   } else {
@@ -563,114 +409,10 @@
 }
 
 TransactionId& CacheTransactionManagerImpl::getTransactionId() {
-  TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  auto txState = TSSTXStateWrapper::get().getTXState();
   return txState->getTransactionId();
 }
-/*
-void CacheTransactionManagerImpl::setWriter(std::shared_ptr<TransactionWriter>
-writer)
-{
-        m_writer = writer;
-}
- std::shared_ptr<TransactionWriter> CacheTransactionManagerImpl::getWriter()
-{
-        return m_writer;
-}
 
-
-void
-CacheTransactionManagerImpl::addListener(std::shared_ptr<TransactionListener>
-aListener)
-{
-        if(aListener == nullptr)
-        {
-                GfErrTypeThrowException("Trying to add null listener.",
-GF_CACHE_ILLEGAL_ARGUMENT_EXCEPTION);
-        }
-        if(!m_listeners.contains(aListener))
-        {
-                m_listeners.insert(aListener);
-        }
-}
-
-void
-CacheTransactionManagerImpl::removeListener(std::shared_ptr<TransactionListener>
-aListener)
-{
-        if(aListener == nullptr)
-        {
-                GfErrTypeThrowException("Trying to remove null listener.",
-GF_CACHE_ILLEGAL_ARGUMENT_EXCEPTION);
-        }
-        if(m_listeners.erase(aListener))
-        {
-                aListener->close();
-        }
-}
-
-void CacheTransactionManagerImpl::noteCommitFailure(TXState* txState, const
-std::shared_ptr<TXCommitMessage>& commitMessage)
-{
-        VectorOfEntryEvent events;
-        if(commitMessage!= nullptr)
-        {
-                events = commitMessage->getEvents(m_cache);
-        }
-        std::shared_ptr<TransactionEvent> event(new
-TransactionEvent(txState->getTransactionId(), std::shared_ptr<Cache>(m_cache),
-events));
-
-        for(HashSetOfSharedBase::Iterator iter = m_listeners.begin();
-m_listeners.end() != iter; iter++)
-        {
-               auto listener =
-std::static_pointer_cast<TransactionListener>(*iter);
-                listener->afterFailedCommit(event);
-        }
-}
-
-void CacheTransactionManagerImpl::noteCommitSuccess(TXState* txState, const
-std::shared_ptr<TXCommitMessage>& commitMessage)
-{
-        VectorOfEntryEvent events;
-                if(commitMessage!= nullptr)
-                {
-                        events = commitMessage->getEvents(m_cache);
-                }
-                std::shared_ptr<TransactionEvent> event(new
-TransactionEvent(txState->getTransactionId(), std::shared_ptr<Cache>(m_cache),
-events));
-
-        for(HashSetOfSharedBase::Iterator iter = m_listeners.begin();
-m_listeners.end() != iter; iter++)
-        {
-               auto listener =
-std::static_pointer_cast<std::shared_ptr<TransactionListener>>(*iter);
-                listener->afterCommit(event);
-        }
-}
-
-void CacheTransactionManagerImpl::noteRollbackSuccess(TXState* txState, const
-std::shared_ptr<TXCommitMessage>& commitMessage)
-{
-        VectorOfEntryEvent events;
-        if(commitMessage!= nullptr)
-        {
-                events = commitMessage->getEvents(m_cache);
-        }
-        std::shared_ptr<TransactionEvent> event(new
-TransactionEvent(txState->getTransactionId(), std::shared_ptr<Cache>(m_cache),
-events));
-
-        for(HashSetOfSharedBase::Iterator iter = m_listeners.begin();
-m_listeners.end() != iter; iter++)
-        {
-               auto listener =
-std::static_pointer_cast<TransactionListener>(*iter);
-                listener->afterRollback(event);
-        }
-}
-*/
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/CacheTransactionManagerImpl.hpp b/cppcache/src/CacheTransactionManagerImpl.hpp
index 24f1569..e82edd1 100644
--- a/cppcache/src/CacheTransactionManagerImpl.hpp
+++ b/cppcache/src/CacheTransactionManagerImpl.hpp
@@ -20,6 +20,9 @@
 #ifndef GEODE_CACHETRANSACTIONMANAGERIMPL_H_
 #define GEODE_CACHETRANSACTIONMANAGERIMPL_H_
 
+#include <condition_variable>
+#include <mutex>
+
 #include <geode/CacheTransactionManager.hpp>
 
 #include "SuspendedTxExpiryHandler.hpp"
@@ -69,14 +72,14 @@
   TXState* removeSuspendedTx(int32_t txId, std::chrono::milliseconds waitTime);
   bool isSuspendedTx(int32_t txId);
   void addTx(int32_t txId);
-  bool removeTx(int32_t txId);
+  void removeTx(int32_t txId);
   bool findTx(int32_t txId);
 
   std::map<int32_t, TXState*> m_suspendedTXs;
-  ACE_Recursive_Thread_Mutex m_suspendedTxLock;
+  std::recursive_mutex m_suspendedTxLock;
   std::vector<int32_t> m_TXs;
-  ACE_Recursive_Thread_Mutex m_txLock;
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_txCond;
+  std::recursive_mutex m_txLock;
+  std::condition_variable_any m_txCond;
 
   friend class TXCleaner;
 };
diff --git a/cppcache/src/CacheXmlParser.cpp b/cppcache/src/CacheXmlParser.cpp
index 81d10b2..1494b53 100644
--- a/cppcache/src/CacheXmlParser.cpp
+++ b/cppcache/src/CacheXmlParser.cpp
@@ -26,6 +26,7 @@
 #include "AutoDelete.hpp"
 #include "CacheImpl.hpp"
 #include "CacheRegionHelper.hpp"
+#include "util/string.hpp"
 
 #if defined(_WIN32)
 #include <windows.h>
@@ -347,11 +348,7 @@
 void CacheXmlParser::handleParserErrors(int res) {
   if (res != 0)  // xml file is not well-formed
   {
-    char buf[256];
-    ACE_OS::snprintf(buf, 256, "Error code returned by xml parser is : %d ",
-                     res);
-    Log::error(buf);
-
+    Log::error("Error code returned by xml parser is : " + std::to_string(res));
     throw CacheXmlException("Xml file is not well formed. Error _stack: \n" +
                             std::string(this->m_parserMessage));
   }
@@ -633,13 +630,14 @@
 
 void CacheXmlParser::setPoolInfo(PoolFactory* factory, const char* name,
                                  const char* value) {
+  using apache::geode::client::equal_ignore_case;
   using apache::geode::internal::chrono::duration::from_string;
 
   if (strcmp(name, FREE_CONNECTION_TIMEOUT) == 0) {
     factory->setFreeConnectionTimeout(
         from_string<std::chrono::milliseconds>(std::string(value)));
   } else if (strcmp(name, MULTIUSER_SECURE_MODE) == 0) {
-    if (ACE_OS::strcasecmp(value, "true") == 0) {
+    if (equal_ignore_case(value, "true")) {
       factory->setMultiuserAuthentication(true);
     } else {
       factory->setMultiuserAuthentication(false);
@@ -676,7 +674,7 @@
     factory->setSubscriptionAckInterval(
         from_string<std::chrono::milliseconds>(std::string(value)));
   } else if (strcmp(name, SUBSCRIPTION_ENABLED) == 0) {
-    if (ACE_OS::strcasecmp(value, "true") == 0) {
+    if (equal_ignore_case(value, "true")) {
       factory->setSubscriptionEnabled(true);
     } else {
       factory->setSubscriptionEnabled(false);
@@ -687,13 +685,13 @@
   } else if (strcmp(name, SUBSCRIPTION_REDUNDANCY) == 0) {
     factory->setSubscriptionRedundancy(atoi(value));
   } else if (strcmp(name, THREAD_LOCAL_CONNECTIONS) == 0) {
-    if (ACE_OS::strcasecmp(value, "true") == 0) {
+    if (equal_ignore_case(value, "true")) {
       factory->setThreadLocalConnections(true);
     } else {
       factory->setThreadLocalConnections(false);
     }
   } else if (strcmp(name, PR_SINGLE_HOP_ENABLED) == 0) {
-    if (ACE_OS::strcasecmp(value, "true") == 0) {
+    if (equal_ignore_case(value, "true")) {
       factory->setPRSingleHopEnabled(true);
     } else {
       factory->setPRSingleHopEnabled(false);
diff --git a/cppcache/src/CacheableDate.cpp b/cppcache/src/CacheableDate.cpp
index cd0d481..0105b04 100644
--- a/cppcache/src/CacheableDate.cpp
+++ b/cppcache/src/CacheableDate.cpp
@@ -19,8 +19,6 @@
 #include <ctime>
 #include <cwchar>
 
-#include <ace/OS.h>
-
 #include <geode/CacheableDate.hpp>
 #include <geode/DataInput.hpp>
 #include <geode/DataOutput.hpp>
@@ -28,6 +26,7 @@
 #include <geode/internal/CacheableKeys.hpp>
 
 #include "config.h"
+#include "util/chrono/time_point.hpp"
 
 namespace apache {
 namespace geode {
@@ -81,14 +80,7 @@
 }
 
 std::string CacheableDate::toString() const {
-  char buffer[25];
-  struct tm date = {};
-  time_t sec = m_timevalue / 1000;
-  ACE_OS::localtime_r(&sec, &date);
-  ACE_OS::snprintf(buffer, 24, "%d/%d/%d %d:%d:%d", date.tm_mon + 1,
-                   date.tm_mday, date.tm_year + 1900, date.tm_hour, date.tm_min,
-                   date.tm_sec);
-  return std::string(buffer);
+  return apache::geode::util::chrono::to_string(static_cast<time_t>(*this));
 }
 
 }  // namespace client
diff --git a/cppcache/src/CacheableFileName.cpp b/cppcache/src/CacheableFileName.cpp
index 12afd25..bd1cf99 100644
--- a/cppcache/src/CacheableFileName.cpp
+++ b/cppcache/src/CacheableFileName.cpp
@@ -14,8 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <ace/ACE.h>
-#include <ace/OS.h>
 
 #include <geode/CacheableFileName.hpp>
 #include <geode/DataInput.hpp>
diff --git a/cppcache/src/CacheableString.cpp b/cppcache/src/CacheableString.cpp
index 6c6d54b..466566e 100644
--- a/cppcache/src/CacheableString.cpp
+++ b/cppcache/src/CacheableString.cpp
@@ -20,9 +20,6 @@
 #include <cwchar>
 #include <locale>
 
-#include <ace/ACE.h>
-#include <ace/OS.h>
-
 #include <geode/CacheableString.hpp>
 #include <geode/DataInput.hpp>
 #include <geode/DataOutput.hpp>
diff --git a/cppcache/src/ClientConnectionRequest.cpp b/cppcache/src/ClientConnectionRequest.cpp
index 8b9dd78..6c4c0be 100644
--- a/cppcache/src/ClientConnectionRequest.cpp
+++ b/cppcache/src/ClientConnectionRequest.cpp
@@ -29,8 +29,8 @@
   writeSetOfServerLocation(output);
 }
 
-DSFid ClientConnectionRequest::getDSFID() const {
-  return DSFid::ClientConnectionRequest;
+internal::DSFid ClientConnectionRequest::getDSFID() const {
+  return internal::DSFid::ClientConnectionRequest;
 }
 
 void ClientConnectionRequest::writeSetOfServerLocation(
diff --git a/cppcache/src/ClientConnectionRequest.hpp b/cppcache/src/ClientConnectionRequest.hpp
index 4327e1a..f1bf1f2 100644
--- a/cppcache/src/ClientConnectionRequest.hpp
+++ b/cppcache/src/ClientConnectionRequest.hpp
@@ -23,9 +23,10 @@
 #include <set>
 #include <string>
 
+#include <geode/internal/DataSerializableFixedId.hpp>
+
 #include "ServerLocation.hpp"
 #include "ServerLocationRequest.hpp"
-#include "TcrEndpoint.hpp"
 
 namespace apache {
 namespace geode {
@@ -40,7 +41,7 @@
         m_servergroup(servergroup),
         m_excludeServergroup_serverLocation(excludeServergroup) {}
   void toData(DataOutput& output) const override;
-  DSFid getDSFID() const override;
+  internal::DSFid getDSFID() const override;
   std::string getServerGroup() const { return m_servergroup; }
   const std::set<ServerLocation>& getExcludedServerGroup() const {
     return m_excludeServergroup_serverLocation;
diff --git a/cppcache/src/ClientHealthStats.cpp b/cppcache/src/ClientHealthStats.cpp
index 11b9262..e2c026c 100644
--- a/cppcache/src/ClientHealthStats.cpp
+++ b/cppcache/src/ClientHealthStats.cpp
@@ -56,7 +56,7 @@
       m_numThread(0),
       m_processCpuTime(0),
       m_cpus(0) {
-  m_updateTime = CacheableDate::create(ACE_OS::time(nullptr));
+  m_updateTime = CacheableDate::create();
 }
 
 ClientHealthStats::ClientHealthStats(int gets, int puts, int misses,
@@ -69,7 +69,7 @@
       m_numThread(numThreads),
       m_processCpuTime(cpuTime),
       m_cpus(cpus) {
-  m_updateTime = CacheableDate::create(ACE_OS::time(nullptr));
+  m_updateTime = CacheableDate::create();
 }
 
 }  // namespace client
diff --git a/cppcache/src/ClientMetadata.cpp b/cppcache/src/ClientMetadata.cpp
index 2050fc3..2754190 100644
--- a/cppcache/src/ClientMetadata.cpp
+++ b/cppcache/src/ClientMetadata.cpp
@@ -14,13 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "ClientMetadata.hpp"
 
 #include <climits>
 #include <cstdlib>
 
-#include <ace/OS.h>
-
 #include "ThinClientPoolDM.hpp"
 #include "Utils.hpp"
 
@@ -291,17 +290,6 @@
   }
 }
 
-void ClientMetadata::removeBucketServerLocation(BucketServerLocation) {}
-
-void ClientMetadata::populateDummyServers(int bucketId,
-                                          BucketServerLocationsType locations) {
-  // WriteGuard guard( m_readWriteLock );
-
-  checkBucketId(bucketId);
-
-  m_bucketServerLocationsList[bucketId] = locations;
-}
-
 int ClientMetadata::assignFixedBucketId(
     const char* partitionName, std::shared_ptr<CacheableKey> resolvekey) {
   LOGDEBUG(
diff --git a/cppcache/src/ClientMetadata.hpp b/cppcache/src/ClientMetadata.hpp
index 5523827..24a9a7c 100644
--- a/cppcache/src/ClientMetadata.hpp
+++ b/cppcache/src/ClientMetadata.hpp
@@ -23,9 +23,6 @@
 #include <map>
 #include <vector>
 
-#include <ace/ACE.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/PartitionResolver.hpp>
 
 #include "BucketServerLocation.hpp"
@@ -61,7 +58,6 @@
   int m_totalNumBuckets;
   // std::shared_ptr<PartitionResolver> m_partitionResolver;
   std::string m_colocatedWith;
-  // ACE_RW_Thread_Mutex m_readWriteLock;
   ThinClientPoolDM* m_tcrdm;
   FixedMapType m_fpaMap;
   inline void checkBucketId(size_t bucketId) {
@@ -88,11 +84,9 @@
   // ServerLocation getPrimaryServerLocation(int bucketId);
   void updateBucketServerLocations(
       int bucketId, BucketServerLocationsType bucketServerLocations);
-  void removeBucketServerLocation(BucketServerLocation serverLocation);
   int getTotalNumBuckets();
   // std::shared_ptr<PartitionResolver> getPartitionResolver();
   const std::string& getColocatedWith();
-  void populateDummyServers(int bucketId, BucketServerLocationsType serverlist);
   int assignFixedBucketId(const char* partitionName,
                           std::shared_ptr<CacheableKey> resolvekey);
   std::shared_ptr<CacheableHashSet>& getFixedPartitionNames() {
diff --git a/cppcache/src/ClientMetadataService.cpp b/cppcache/src/ClientMetadataService.cpp
index d5f1c9f..d6f975c 100644
--- a/cppcache/src/ClientMetadataService.cpp
+++ b/cppcache/src/ClientMetadataService.cpp
@@ -19,94 +19,77 @@
 
 #include <climits>
 #include <cstdlib>
-#include <iterator>
-#include <unordered_set>
+
+#include <boost/thread/lock_types.hpp>
 
 #include <geode/FixedPartitionResolver.hpp>
 
+#include "ClientMetadata.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientPoolDM.hpp"
+#include "util/queue.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
+const BucketStatus::clock::time_point BucketStatus::m_noTimeout{};
+
 const char* ClientMetadataService::NC_CMDSvcThread = "NC CMDSvcThread";
 
-ClientMetadataService::~ClientMetadataService() {
-  if (m_bucketWaitTimeout > std::chrono::milliseconds::zero()) {
-    try {
-      std::map<std::string, PRbuckets*>::iterator bi;
-      for (bi = m_bucketStatus.begin(); bi != m_bucketStatus.end(); ++bi) {
-        delete bi->second;
-      }
-
-    } catch (...) {
-      LOGINFO("Exception in ClientMetadataService destructor");
-    }
-  }
-}
-
-ClientMetadataService::ClientMetadataService(Pool* pool)
+ClientMetadataService::ClientMetadataService(ThinClientPoolDM* pool)
     : m_run(false),
       m_pool(pool),
-      m_regionQueue(false)
+      m_cache(m_pool->getConnectionManager().getCacheImpl()),
+      m_regionQueue(false),
+      m_bucketWaitTimeout(m_cache->getDistributedSystem()
+                              .getSystemProperties()
+                              .bucketWaitTimeout())
 
-{
-  auto tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-  auto cacheImpl = tcrdm->getConnectionManager().getCacheImpl();
-  m_bucketWaitTimeout = cacheImpl->getDistributedSystem()
-                            .getSystemProperties()
-                            .bucketWaitTimeout();
+{}
+
+void ClientMetadataService::start() {
+  m_run = true;
+  m_thread = std::thread(&ClientMetadataService::svc, this);
 }
 
-int ClientMetadataService::svc() {
+void ClientMetadataService::stop() {
+  m_run = false;
+  m_regionQueueCondition.notify_one();
+  m_thread.join();
+}
+
+void ClientMetadataService::svc() {
   DistributedSystemImpl::setThreadName(NC_CMDSvcThread);
+
   LOGINFO("ClientMetadataService started for pool " + m_pool->getName());
+
   while (m_run) {
-    m_regionQueueSema.acquire();
-    auto tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-    auto&& cache = tcrdm->getConnectionManager().getCacheImpl();
-    while (true) {
-      auto&& regionFullPath = m_regionQueue.get();
-
-      if (regionFullPath) {
-        while (true) {
-          if (m_regionQueue.size() > 0) {
-            auto&& nextRegionFullPath = m_regionQueue.get();
-            if (nextRegionFullPath != nullptr &&
-                nextRegionFullPath->c_str() != nullptr &&
-                regionFullPath->compare(nextRegionFullPath->c_str()) == 0) {
-            } else {
-              // different region; put it back
-              m_regionQueue.put(nextRegionFullPath);
-              break;
-            }
-          } else {
-            break;
-          }
-        }
-      }
-
-      if (!cache->isCacheDestroyPending() && regionFullPath) {
-        getClientPRMetadata(regionFullPath->c_str());
-      } else {
-        break;
-      }
+    std::unique_lock<std::mutex> lock(m_regionQueueMutex);
+    m_regionQueueCondition.wait(
+        lock, [this] { return !m_run || !m_regionQueue.empty(); });
+    if (!m_run) {
+      break;
     }
-    // while(m_regionQueueSema.tryacquire( ) != -1); // release all
+
+    auto regionFullPath = std::move(m_regionQueue.front());
+    m_regionQueue.pop_front();
+    queue::coalesce(m_regionQueue, regionFullPath);
+
+    if (!m_cache->isCacheDestroyPending()) {
+      lock.unlock();
+      getClientPRMetadata(regionFullPath.c_str());
+    } else {
+      break;
+    }
   }
+
   LOGINFO("ClientMetadataService stopped for pool " + m_pool->getName());
-  return 0;
 }
 
 void ClientMetadataService::getClientPRMetadata(const char* regionFullPath) {
   if (regionFullPath == nullptr) return;
-  ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-  if (tcrdm == nullptr) {
-    throw IllegalArgumentException(
-        "ClientMetaData: pool cast to ThinClientPoolDM failed");
-  }
   // That means metadata for the region not found, So only for the first time
   // for a particular region use GetClientPartitionAttributesOp
   // TcrMessage to fetch the metadata and put it into map for later use.send
@@ -115,8 +98,9 @@
   std::string path(regionFullPath);
   std::shared_ptr<ClientMetadata> cptr = nullptr;
   {
-    ReadGuard guard(m_regionMetadataLock);
-    RegionMetadataMapType::iterator itr = m_regionMetaDataMap.find(path);
+    boost::shared_lock<decltype(m_regionMetadataLock)> lock(
+        m_regionMetadataLock);
+    const auto& itr = m_regionMetaDataMap.find(path);
     if (itr != m_regionMetaDataMap.end()) {
       cptr = itr->second;
     }
@@ -125,22 +109,20 @@
 
   if (cptr == nullptr) {
     TcrMessageGetClientPartitionAttributes request(
-        new DataOutput(tcrdm->getConnectionManager()
-                           .getCacheImpl()
-                           ->getCache()
-                           ->createDataOutput()),
-        regionFullPath);
-    GfErrType err = tcrdm->sendSyncRequest(request, reply);
+        new DataOutput(m_cache->createDataOutput(m_pool)), regionFullPath);
+    GfErrType err = m_pool->sendSyncRequest(request, reply);
     if (err == GF_NOERR &&
         reply.getMessageType() ==
             TcrMessage::RESPONSE_CLIENT_PARTITION_ATTRIBUTES) {
       cptr = std::make_shared<ClientMetadata>(reply.getNumBuckets(),
-                                              reply.getColocatedWith(), tcrdm,
+                                              reply.getColocatedWith(), m_pool,
                                               reply.getFpaSet());
       if (m_bucketWaitTimeout > std::chrono::milliseconds::zero() &&
           reply.getNumBuckets() > 0) {
-        WriteGuard guard(m_PRbucketStatusLock);
-        m_bucketStatus[regionFullPath] = new PRbuckets(reply.getNumBuckets());
+        boost::unique_lock<decltype(m_PRbucketStatusLock)> lock(
+            m_PRbucketStatusLock);
+        m_bucketStatus[regionFullPath] =
+            std::unique_ptr<PRbuckets>(new PRbuckets(reply.getNumBuckets()));
       }
       LOGDEBUG("ClientMetadata buckets %d ", reply.getNumBuckets());
     }
@@ -157,7 +139,8 @@
     if (newCptr != nullptr) {
       cptr->setPreviousone(nullptr);
       newCptr->setPreviousone(cptr);
-      WriteGuard guard(m_regionMetadataLock);
+      boost::unique_lock<decltype(m_regionMetadataLock)> lock(
+          m_regionMetadataLock);
       m_regionMetaDataMap[path] = newCptr;
       LOGINFO("Updated client meta data");
     }
@@ -168,51 +151,43 @@
       cptr->setPreviousone(nullptr);
       newCptr->setPreviousone(cptr);
       // now we will get new instance so assign it again
-      WriteGuard guard(m_regionMetadataLock);
+      boost::unique_lock<decltype(m_regionMetadataLock)> lock(
+          m_regionMetadataLock);
       m_regionMetaDataMap[colocatedWith.c_str()] = newCptr;
       m_regionMetaDataMap[path] = newCptr;
       LOGINFO("Updated client meta data");
     }
   }
 }
+
 std::shared_ptr<ClientMetadata> ClientMetadataService::SendClientPRMetadata(
     const char* regionPath, std::shared_ptr<ClientMetadata> cptr) {
-  ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-  if (tcrdm == nullptr) {
-    throw IllegalArgumentException(
-        "ClientMetaData: pool cast to ThinClientPoolDM failed");
-  }
   TcrMessageGetClientPrMetadata request(
-      new DataOutput(
-          tcrdm->getConnectionManager().getCacheImpl()->createDataOutput()),
-      regionPath);
+      new DataOutput(m_cache->createDataOutput(m_pool)), regionPath);
   TcrMessageReply reply(true, nullptr);
   // send this message to server and get metadata from server.
   LOGFINE("Now sending GET_CLIENT_PR_METADATA for getting from server: %s",
           regionPath);
   std::shared_ptr<Region> region = nullptr;
-  GfErrType err = tcrdm->sendSyncRequest(request, reply);
+  GfErrType err = m_pool->sendSyncRequest(request, reply);
   if (err == GF_NOERR &&
       reply.getMessageType() == TcrMessage::RESPONSE_CLIENT_PR_METADATA) {
-    region =
-        tcrdm->getConnectionManager().getCacheImpl()->getRegion(regionPath);
+    region = m_cache->getRegion(regionPath);
     if (region != nullptr) {
-      LocalRegion* lregion = dynamic_cast<LocalRegion*>(region.get());
-      lregion->getRegionStats()->incMetaDataRefreshCount();
+      if (auto lregion = std::dynamic_pointer_cast<LocalRegion>(region)) {
+        lregion->getRegionStats()->incMetaDataRefreshCount();
+      }
     }
-    std::vector<BucketServerLocationsType>* metadata = reply.getMetadata();
+    auto metadata = reply.getMetadata();
     if (metadata == nullptr) return nullptr;
     if (metadata->empty()) {
       delete metadata;
       return nullptr;
     }
     auto newCptr = std::make_shared<ClientMetadata>(*cptr);
-    for (std::vector<BucketServerLocationsType>::iterator iter =
-             metadata->begin();
-         iter != metadata->end(); ++iter) {
-      if (!(*iter).empty()) {
-        newCptr->updateBucketServerLocations((*iter).at(0)->getBucketId(),
-                                             (*iter));
+    for (const auto& v : *metadata) {
+      if (!v.empty()) {
+        newCptr->updateBucketServerLocations(v.at(0)->getBucketId(), v);
       }
     }
     delete metadata;
@@ -227,9 +202,9 @@
     const std::shared_ptr<Cacheable>& value,
     const std::shared_ptr<Serializable>& aCallbackArgument, bool isPrimary,
     std::shared_ptr<BucketServerLocation>& serverLocation, int8_t& version) {
-  // ACE_Guard< ACE_Recursive_Thread_Mutex > guard( m_regionMetadataLock );
   if (region != nullptr) {
-    ReadGuard guard(m_regionMetadataLock);
+    boost::shared_lock<decltype(m_regionMetadataLock)> lock(
+        m_regionMetadataLock);
     LOGDEBUG(
         "ClientMetadataService::getBucketServerLocation m_regionMetaDataMap "
         "size is %d",
@@ -276,35 +251,28 @@
 
 std::shared_ptr<ClientMetadata> ClientMetadataService::getClientMetadata(
     const std::string& regionFullPath) {
-  ReadGuard guard(m_regionMetadataLock);
-  RegionMetadataMapType::iterator regionMetadataIter =
-      m_regionMetaDataMap.find(regionFullPath);
-  if (regionMetadataIter != m_regionMetaDataMap.end()) {
-    return (*regionMetadataIter).second;
+  boost::shared_lock<decltype(m_regionMetadataLock)> lock(m_regionMetadataLock);
+
+  const auto& entry = m_regionMetaDataMap.find(regionFullPath);
+  if (entry == m_regionMetaDataMap.end()) {
+    return nullptr;
   }
-  return nullptr;
+
+  return entry->second;
 }
 
-void ClientMetadataService::populateDummyServers(
-    const char* regionName, std::shared_ptr<ClientMetadata> cptr) {
-  WriteGuard guard(m_regionMetadataLock);
-  m_regionMetaDataMap[regionName] = cptr;
+std::shared_ptr<ClientMetadata> ClientMetadataService::getClientMetadata(
+    const std::shared_ptr<Region>& region) {
+  return getClientMetadata(region->getFullPath());
 }
 
 void ClientMetadataService::enqueueForMetadataRefresh(
     const std::string& regionFullPath, int8_t serverGroupFlag) {
-  ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-  if (tcrdm == nullptr) {
-    throw IllegalArgumentException(
-        "ClientMetaData: pool cast to ThinClientPoolDM failed");
-  }
+  auto region = m_cache->getRegion(regionFullPath);
 
-  auto cache = tcrdm->getConnectionManager().getCacheImpl();
-  auto region = cache->getRegion(regionFullPath);
-
-  std::string serverGroup = tcrdm->getServerGroup();
+  std::string serverGroup = m_pool->getServerGroup();
   if (serverGroup.length() != 0) {
-    cache->setServerGroupFlag(serverGroupFlag);
+    m_cache->setServerGroupFlag(serverGroupFlag);
     if (serverGroupFlag == 2) {
       LOGFINER(
           "Network hop but, from within same server-group, so no metadata "
@@ -314,7 +282,7 @@
   }
 
   if (region != nullptr) {
-    ThinClientRegion* tcrRegion = dynamic_cast<ThinClientRegion*>(region.get());
+    auto tcrRegion = dynamic_cast<ThinClientRegion*>(region.get());
     {
       TryWriteGuard guardRegionMetaDataRefresh(
           tcrRegion->getMataDataMutex(), tcrRegion->getMetaDataRefreshed());
@@ -322,26 +290,16 @@
         return;
       }
       LOGFINE("Network hop so fetching single hop metadata from the server");
-      cache->setNetworkHopFlag(true);
+      m_cache->setNetworkHopFlag(true);
       tcrRegion->setMetaDataRefreshed(true);
-      auto tempRegionPath = std::make_shared<std::string>(regionFullPath);
-      m_regionQueue.put(tempRegionPath);
-      m_regionQueueSema.release();
+      {
+        std::lock_guard<decltype(m_regionQueueMutex)> lock(m_regionQueueMutex);
+        m_regionQueue.push_back(regionFullPath);
+      }
+      m_regionQueueCondition.notify_one();
     }
   }
 }
-std::shared_ptr<ClientMetadata> ClientMetadataService::getClientMetadata(
-    const std::shared_ptr<Region>& region) {
-  ReadGuard guard(m_regionMetadataLock);
-
-  const auto& entry = m_regionMetaDataMap.find(region->getFullPath());
-
-  if (entry == m_regionMetaDataMap.end()) {
-    return nullptr;
-  }
-
-  return entry->second;
-}
 
 std::shared_ptr<ClientMetadataService::ServerToFilterMap>
 ClientMetadataService::getServerToFilterMap(
@@ -409,25 +367,25 @@
     keyList->push_back(key);
   }
 
-  if (keysWhichLeft.size() > 0 &&
-      serverToFilterMap->size() > 0) {  // add left keys in result
+  if (!keysWhichLeft.empty() && !serverToFilterMap->empty()) {
+    // add left keys in result
     auto keyLefts = keysWhichLeft.size();
     auto totalServers = serverToFilterMap->size();
     auto perServer = keyLefts / totalServers + 1;
 
     size_t keyIdx = 0;
     for (const auto& locationIter : *serverToFilterMap) {
-      const auto keys = locationIter.second;
+      const auto values = locationIter.second;
       for (size_t i = 0; i < perServer; i++) {
         if (keyIdx < keyLefts) {
-          keys->push_back(keysWhichLeft.at(keyIdx++));
+          values->push_back(keysWhichLeft.at(keyIdx++));
         } else {
           break;
         }
       }
       if (keyIdx >= keyLefts) break;  // done
     }
-  } else if (serverToFilterMap->size() == 0) {  // not be able to map any key
+  } else if (serverToFilterMap->empty()) {  // not be able to map any key
     return nullptr;  // it will force all keys to send to one server
   }
 
@@ -442,7 +400,7 @@
     std::shared_ptr<BucketServerLocation>& serverLocation, int8_t& version) {
   if (m_bucketWaitTimeout == std::chrono::milliseconds::zero()) return;
 
-  WriteGuard guard(m_PRbucketStatusLock);
+  boost::unique_lock<decltype(m_PRbucketStatusLock)> lock(m_PRbucketStatusLock);
 
   getBucketServerLocation(region, key, value, aCallbackArgument,
                           false /*look for secondary host*/, serverLocation,
@@ -454,8 +412,7 @@
              serverLocation->getPort());
     int32_t bId = serverLocation->getBucketId();
 
-    std::map<std::string, PRbuckets*>::iterator bs =
-        m_bucketStatus.find(region->getFullPath());
+    const auto& bs = m_bucketStatus.find(region->getFullPath());
 
     if (bs != m_bucketStatus.end()) {
       bs->second->setBucketTimeout(bId);
@@ -787,14 +744,12 @@
     std::shared_ptr<BucketServerLocation>& serverLocation, int8_t& version) {
   if (m_bucketWaitTimeout == std::chrono::milliseconds::zero()) return;
 
-  WriteGuard guard(m_PRbucketStatusLock);
-
-  std::map<std::string, PRbuckets*>::iterator bs =
-      m_bucketStatus.find(region->getFullPath());
+  boost::unique_lock<decltype(m_PRbucketStatusLock)> lock(m_PRbucketStatusLock);
 
   PRbuckets* prBuckets = nullptr;
+  const auto& bs = m_bucketStatus.find(region->getFullPath());
   if (bs != m_bucketStatus.end()) {
-    prBuckets = bs->second;
+    prBuckets = bs->second.get();
   }
 
   if (prBuckets == nullptr) return;
@@ -804,10 +759,10 @@
 
   std::shared_ptr<ClientMetadata> cptr = nullptr;
   {
-    ReadGuard guard(m_regionMetadataLock);
-    RegionMetadataMapType::iterator cptrIter =
-        m_regionMetaDataMap.find(region->getFullPath());
+    boost::shared_lock<decltype(m_regionMetadataLock)> lock(
+        m_regionMetadataLock);
 
+    const auto& cptrIter = m_regionMetaDataMap.find(region->getFullPath());
     if (cptrIter != m_regionMetaDataMap.end()) {
       cptr = cptrIter->second;
     }
@@ -819,9 +774,9 @@
 
   LOGFINE("Setting in markPrimaryBucketForTimeoutButLookSecondaryBucket");
 
-  int32_t totalBuckets = cptr->getTotalNumBuckets();
+  auto totalBuckets = cptr->getTotalNumBuckets();
 
-  for (int32_t i = 0; i < totalBuckets; i++) {
+  for (decltype(totalBuckets) i = 0; i < totalBuckets; i++) {
     int8_t version;
     std::shared_ptr<BucketServerLocation> bsl;
     cptr->getServerLocation(i, false, bsl, version);
@@ -839,15 +794,13 @@
                                                      int32_t bucketid) {
   if (m_bucketWaitTimeout == std::chrono::milliseconds::zero()) return false;
 
-  ReadGuard guard(m_PRbucketStatusLock);
+  boost::shared_lock<decltype(m_PRbucketStatusLock)> lock(m_PRbucketStatusLock);
 
   const auto& bs = m_bucketStatus.find(regionFullPath);
   if (bs != m_bucketStatus.end()) {
     bool m = bs->second->isBucketTimedOut(bucketid, m_bucketWaitTimeout);
     if (m) {
-      ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
-      CacheImpl* cache = tcrdm->getConnectionManager().getCacheImpl();
-      cache->incBlackListBucketTimeouts();
+      m_cache->incBlackListBucketTimeouts();
     }
     LOGFINE("isBucketMarkedForTimeout:: for bucket %d returning = %d", bucketid,
             m);
diff --git a/cppcache/src/ClientMetadataService.hpp b/cppcache/src/ClientMetadataService.hpp
index e6c91e9..5de4379 100644
--- a/cppcache/src/ClientMetadataService.hpp
+++ b/cppcache/src/ClientMetadataService.hpp
@@ -20,12 +20,17 @@
 #ifndef GEODE_CLIENTMETADATASERVICE_H_
 #define GEODE_CLIENTMETADATASERVICE_H_
 
+#include <atomic>
+#include <chrono>
+#include <condition_variable>
+#include <deque>
 #include <memory>
+#include <mutex>
 #include <string>
+#include <thread>
 #include <unordered_map>
 
-#include <ace/Semaphore.h>
-#include <ace/Task.h>
+#include <boost/thread/shared_mutex.hpp>
 
 #include <geode/CacheableKey.hpp>
 #include <geode/Region.hpp>
@@ -33,46 +38,45 @@
 #include <geode/internal/functional.hpp>
 
 #include "BucketServerLocation.hpp"
-#include "ClientMetadata.hpp"
-#include "DistributedSystemImpl.hpp"
 #include "NonCopyable.hpp"
-#include "Queue.hpp"
 #include "ServerLocation.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
-class ClienMetadata;
+class ClientMetadata;
+class ThinClientPoolDM;
 
 typedef std::map<std::string, std::shared_ptr<ClientMetadata>>
     RegionMetadataMapType;
 
 class BucketStatus {
  private:
-  ACE_Time_Value m_lastTimeout;
+  using clock = std::chrono::steady_clock;
+  const static clock::time_point m_noTimeout;
+  clock::time_point m_lastTimeout;
 
  public:
-  BucketStatus() : m_lastTimeout(ACE_Time_Value::zero) {}
+  BucketStatus() = default;
   bool isTimedoutAndReset(std::chrono::milliseconds millis) {
-    if (m_lastTimeout == ACE_Time_Value::zero) {
+    if (m_lastTimeout == m_noTimeout) {
       return false;
     } else {
-      ACE_Time_Value to(millis);
-      to += m_lastTimeout;
-      if (to > ACE_OS::gettimeofday()) {
+      auto timeout = m_lastTimeout + millis;
+      if (timeout > clock::now()) {
         return true;  // timeout as buckste not recovered yet
       } else {
         // reset to zero as we waited enough to recover bucket
-        m_lastTimeout = ACE_Time_Value::zero;
+        m_lastTimeout = m_noTimeout;
         return false;
       }
     }
   }
 
   void setTimeout() {
-    if (m_lastTimeout == ACE_Time_Value::zero) {
-      m_lastTimeout = ACE_OS::gettimeofday();  // set once only for timeout
+    if (m_lastTimeout == m_noTimeout) {
+      m_lastTimeout = clock::now();  // set once only for timeout
     }
   }
 };
@@ -94,25 +98,17 @@
   void setBucketTimeout(int32_t bucketId) { m_buckets[bucketId].setTimeout(); }
 };
 
-class ClientMetadataService : public ACE_Task_Base,
-                              private NonCopyable,
-                              private NonAssignable {
+class ClientMetadataService : private NonCopyable, private NonAssignable {
  public:
-  ~ClientMetadataService();
-  explicit ClientMetadataService(Pool* pool);
+  ClientMetadataService() = delete;
+  explicit ClientMetadataService(ThinClientPoolDM* pool);
+  inline ~ClientMetadataService() noexcept = default;
 
-  inline void start() {
-    m_run = true;
-    this->activate();
-  }
+  void start();
 
-  inline void stop() {
-    m_run = false;
-    m_regionQueueSema.release();
-    this->wait();
-  }
+  void stop();
 
-  int svc(void);
+  void svc(void);
 
   void getClientPRMetadata(const char* regionFullPath);
 
@@ -123,14 +119,9 @@
       const std::shared_ptr<Serializable>& aCallbackArgument, bool isPrimary,
       std::shared_ptr<BucketServerLocation>& serverLocation, int8_t& version);
 
-  void removeBucketServerLocation(BucketServerLocation serverLocation);
-
   std::shared_ptr<ClientMetadata> getClientMetadata(
       const std::string& regionFullPath);
 
-  void populateDummyServers(const char* regionName,
-                            std::shared_ptr<ClientMetadata> clientmetadata);
-
   void enqueueForMetadataRefresh(const std::string& regionFullPath,
                                  int8_t serverGroupFlag);
 
@@ -166,8 +157,6 @@
       dereference_hash<std::shared_ptr<BucketServerLocation>>,
       dereference_equal_to<std::shared_ptr<BucketServerLocation>>>
       ServerToBucketsMap;
-  // bool AreBucketSetsEqual(const BucketSet& currentBucketSet,
-  //                        const BucketSet& bucketSet);
 
   std::shared_ptr<BucketServerLocation> findNextServer(
       const ServerToBucketsMap& serverToBucketsMap,
@@ -202,13 +191,6 @@
       const BucketSet& buckets);
 
  private:
-  // const std::shared_ptr<PartitionResolver>& getResolver(const
-  // std::shared_ptr<Region>& region, const std::shared_ptr<CacheableKey>& key,
-  // const std::shared_ptr<Serializable>& aCallbackArgument);
-
-  // BucketServerLocation getServerLocation(std::shared_ptr<ClientMetadata>
-  // cptr, int bucketId, bool isPrimary);
-
   std::shared_ptr<ClientMetadata> SendClientPRMetadata(
       const char* regionPath, std::shared_ptr<ClientMetadata> cptr);
 
@@ -216,17 +198,17 @@
       const std::shared_ptr<Region>& region);
 
  private:
-  // ACE_Recursive_Thread_Mutex m_regionMetadataLock;
-  ACE_RW_Thread_Mutex m_regionMetadataLock;
-  ClientMetadataService();
-  ACE_Semaphore m_regionQueueSema;
+  std::thread m_thread;
+  boost::shared_mutex m_regionMetadataLock;
   RegionMetadataMapType m_regionMetaDataMap;
-  volatile bool m_run;
-  Pool* m_pool;
-  Queue<std::shared_ptr<std::string>> m_regionQueue;
-
-  ACE_RW_Thread_Mutex m_PRbucketStatusLock;
-  std::map<std::string, PRbuckets*> m_bucketStatus;
+  std::atomic<bool> m_run;
+  ThinClientPoolDM* m_pool;
+  CacheImpl* m_cache;
+  std::deque<std::string> m_regionQueue;
+  std::mutex m_regionQueueMutex;
+  std::condition_variable m_regionQueueCondition;
+  boost::shared_mutex m_PRbucketStatusLock;
+  std::map<std::string, std::unique_ptr<PRbuckets>> m_bucketStatus;
   std::chrono::milliseconds m_bucketWaitTimeout;
   static const char* NC_CMDSvcThread;
 };
diff --git a/cppcache/src/ClientProxyMembershipID.cpp b/cppcache/src/ClientProxyMembershipID.cpp
index 54adfa9..8a0ee62 100644
--- a/cppcache/src/ClientProxyMembershipID.cpp
+++ b/cppcache/src/ClientProxyMembershipID.cpp
@@ -22,7 +22,7 @@
 #include <memory>
 #include <string>
 
-#include <ace/OS.h>
+#include <boost/process/environment.hpp>
 
 #include <geode/CacheableBuiltins.hpp>
 
@@ -34,38 +34,19 @@
 #define DCPORT 12334
 #define VMKIND 13
 #define ROLEARRLENGTH 0
-static int synch_counter = 2;
+
 namespace apache {
 namespace geode {
 namespace client {
 
-namespace {
-static class RandomInitializer {
- public:
-  RandomInitializer() {
-    // using current time and
-    // processor time would be good enough for our purpose
-    auto seed = ACE_OS::getpid() + ACE_OS::gettimeofday().msec() + clock();
-    seed += ACE_OS::gettimeofday().usec();
-    // LOGINFO("PID %ld seed %ld ACE_OS::gettimeofday().usec() = %ld clock =
-    // %ld ACE_OS::gettimeofday().msec() = %ld", pid, seed ,
-    // ACE_OS::gettimeofday().usec() , clock(),
-    // ACE_OS::gettimeofday().msec());
-    ACE_OS::srand(seed);
-  }
-} oneTimeRandomInitializer;
-}  // namespace
+static int synch_counter = 2;
 
 const int ClientProxyMembershipID::VERSION_MASK = 0x8;
 const int8_t ClientProxyMembershipID::TOKEN_ORDINAL = -1;
 
 ClientProxyMembershipID::ClientProxyMembershipID()
     : m_hostPort(0),
-      m_hostAddr(nullptr)
-      /* adongre  - Coverity II
-       * CID 29278: Uninitialized scalar field (UNINIT_CTOR)
-       */
-      ,
+      m_hostAddr(nullptr),
       m_hostAddrLen(0),
       m_hostAddrLocalMem(false),
       m_vmViewId(0) {}
@@ -79,7 +60,7 @@
     uint32_t hostAddr, uint32_t hostPort, const char* durableClientId,
     const std::chrono::seconds durableClntTimeOut)
     : m_hostAddrAsUInt32(hostAddr) {
-  int32_t vmPID = ACE_OS::getpid();
+  auto vmPID = boost::this_process::get_id();
   initObjectVars(hostname, reinterpret_cast<uint8_t*>(&m_hostAddrAsUInt32), 4,
                  false, hostPort, durableClientId, durableClntTimeOut, DCPORT,
                  vmPID, VMKIND, 0, dsName.c_str(), randString.c_str(), 0);
@@ -90,7 +71,7 @@
 ClientProxyMembershipID::ClientProxyMembershipID(
     uint8_t* hostAddr, uint32_t hostAddrLen, uint32_t hostPort,
     const char* dsname, const char* uniqueTag, uint32_t vmViewId) {
-  int32_t vmPID = ACE_OS::getpid();
+  auto vmPID = boost::this_process::get_id();
   initObjectVars("localhost", hostAddr, hostAddrLen, false, hostPort, "",
                  std::chrono::seconds::zero(), DCPORT, vmPID, VMKIND, 0, dsname,
                  uniqueTag, vmViewId);
@@ -152,15 +133,11 @@
       reinterpret_cast<char*>(const_cast<uint8_t*>(m_memID.getBuffer(&len)));
   m_memIDStr.append(buf, len);
 
-  char PID[15] = {0};
-  char Synch_Counter[15] = {0};
-  ACE_OS::itoa(vPID, PID, 10);
-  ACE_OS::itoa(synch_counter, Synch_Counter, 10);
   clientID.append(hostname);
   clientID.append("(");
-  clientID.append(PID);
+  clientID.append(std::to_string(vPID));
   clientID.append(":loner):");
-  clientID.append(Synch_Counter);
+  clientID.append(std::to_string(synch_counter));
   clientID.append(":");
   clientID.append(getUniqueTag());
   clientID.append(":");
@@ -169,19 +146,11 @@
 
   // int offset = 0;
   for (uint32_t i = 0; i < getHostAddrLen(); i++) {
-    char hostInfo[16] = {0};
-    // offset += ACE_OS::snprintf(hostInfo + offset , 255 - offset, ":%x",
-    // m_hostAddr[i]);
-    ACE_OS::itoa(m_hostAddr[i], hostInfo, 16);
     m_hashKey.append(":");
-    m_hashKey.append(hostInfo);
+    m_hashKey.append(std::to_string(m_hostAddr[i]));
   }
   m_hashKey.append(":");
-  char hostInfoPort[16] = {0};
-  ACE_OS::itoa(getHostPort(), hostInfoPort, 10);
-  //  offset += ACE_OS::snprintf(hostInfo + offset, 255 - offset , ":%d",
-  //  getHostPort());
-  m_hashKey.append(hostInfoPort);
+  m_hashKey.append(std::to_string(getHostPort()));
   m_hashKey.append(":");
   m_hashKey.append(getDSName());
   m_hashKey.append(":");
@@ -189,11 +158,7 @@
     m_hashKey.append(getUniqueTag());
   } else {
     m_hashKey.append(":");
-    char viewid[16] = {0};
-    ACE_OS::itoa(m_vmViewId, viewid, 10);
-    // offset += ACE_OS::snprintf(hostInfo + offset , 255 - offset , ":%d",
-    // m_vmViewId);
-    m_hashKey.append(viewid);
+    m_hashKey.append(std::to_string(m_vmViewId));
   }
   LOGDEBUG("GethashKey %s client id: %s ", m_hashKey.c_str(), clientID.c_str());
 }
diff --git a/cppcache/src/ClientProxyMembershipID.hpp b/cppcache/src/ClientProxyMembershipID.hpp
index 55080c0..6d9a659 100644
--- a/cppcache/src/ClientProxyMembershipID.hpp
+++ b/cppcache/src/ClientProxyMembershipID.hpp
@@ -22,8 +22,6 @@
 
 #include <string>
 
-#include <ace/OS.h>
-
 #include <geode/DataOutput.hpp>
 #include <geode/internal/functional.hpp>
 #include <geode/internal/geode_globals.hpp>
@@ -92,8 +90,8 @@
     char hostInfo[255] = {0};
     uint32_t offset = 0;
     for (uint32_t i = 0; i < getHostAddrLen(); i++) {
-      offset += ACE_OS::snprintf(hostInfo + offset, 255 - offset, ":%x",
-                                 m_hostAddr[i]);
+      offset +=
+          std::snprintf(hostInfo + offset, 255 - offset, ":%x", m_hostAddr[i]);
     }
     result +=
         internal::geode_hash<std::string>{}(std::string(hostInfo, offset));
diff --git a/cppcache/src/ClientProxyMembershipIDFactory.cpp b/cppcache/src/ClientProxyMembershipIDFactory.cpp
index e54a055..62e6b6e 100644
--- a/cppcache/src/ClientProxyMembershipIDFactory.cpp
+++ b/cppcache/src/ClientProxyMembershipIDFactory.cpp
@@ -21,6 +21,8 @@
 #include <iterator>
 #include <random>
 
+#include <boost/process/environment.hpp>
+
 #include "util/Log.hpp"
 
 namespace apache {
@@ -43,7 +45,7 @@
   std::generate_n(std::back_inserter(randString), 10,
                   [&]() { return alphabet[dist(rng)]; });
 
-  auto pid = ACE_OS::getpid();
+  auto pid = boost::this_process::get_id();
   randString.append(std::to_string(pid));
 
   LOGINFO("Using %s as random data for ClientProxyMembershipID",
diff --git a/cppcache/src/ClientReplacementRequest.cpp b/cppcache/src/ClientReplacementRequest.cpp
index 953cc50..64a565f 100644
--- a/cppcache/src/ClientReplacementRequest.cpp
+++ b/cppcache/src/ClientReplacementRequest.cpp
@@ -29,8 +29,8 @@
   this->m_serverLocation.toData(output);
 }
 
-DSFid ClientReplacementRequest::getDSFID() const {
-  return DSFid::ClientReplacementRequest;
+internal::DSFid ClientReplacementRequest::getDSFID() const {
+  return internal::DSFid::ClientReplacementRequest;
 }
 
 }  // namespace client
diff --git a/cppcache/src/ClientReplacementRequest.hpp b/cppcache/src/ClientReplacementRequest.hpp
index a873455..e712284 100644
--- a/cppcache/src/ClientReplacementRequest.hpp
+++ b/cppcache/src/ClientReplacementRequest.hpp
@@ -23,10 +23,11 @@
 #include <set>
 #include <string>
 
+#include <geode/internal/DataSerializableFixedId.hpp>
+
 #include "ClientConnectionRequest.hpp"
 #include "ServerLocation.hpp"
 #include "ServerLocationRequest.hpp"
-#include "TcrEndpoint.hpp"
 
 namespace apache {
 namespace geode {
@@ -43,7 +44,7 @@
   ~ClientReplacementRequest() override = default;
 
   void toData(DataOutput& output) const override;
-  DSFid getDSFID() const override;
+  internal::DSFid getDSFID() const override;
 
  private:
   const ServerLocation m_serverLocation;
diff --git a/cppcache/src/Condition.cpp b/cppcache/src/Condition.cpp
deleted file mode 100644
index 21e148f..0000000
--- a/cppcache/src/Condition.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "Condition.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-
-/**
- * Create a Condition protected by the mutex provided.
- */
-Condition::Condition(ACE_Recursive_Thread_Mutex& mutex)
-    : m_cond(mutex), m_signaled(false) {}
-
-bool Condition::waitUntil(ACE_Time_Value* absoluteStopTime) {
-  ACE_OS::last_error(0);
-
-  ACE_Time_Value stopAt = *absoluteStopTime;
-  while ((!m_signaled) && (m_cond.wait(&stopAt) != 0) &&
-         (ACE_OS::last_error() != ETIME)) {
-    ACE_OS::last_error(0);
-    stopAt = *absoluteStopTime;
-    ACE_Time_Value now = ACE_OS::gettimeofday();
-    if (now >= stopAt) {
-      break;
-    }
-  }
-  bool result = m_signaled;
-  m_signaled = false;
-  return result;
-}
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
diff --git a/cppcache/src/Condition.hpp b/cppcache/src/Condition.hpp
deleted file mode 100644
index e345212..0000000
--- a/cppcache/src/Condition.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-#pragma once
-
-#ifndef GEODE_CONDITION_H_
-#define GEODE_CONDITION_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/OS_NS_sys_time.h>
-
-#include <geode/internal/geode_globals.hpp>
-
-namespace apache {
-namespace geode {
-namespace client {
-
-/**
- * Condition wrapper when you want an absolute signal or timeout condition.
- */
-class APACHE_GEODE_EXPORT Condition {
- private:
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_cond;
-  bool m_signaled;
-
- public:
-  /**
-   * Create a Condition protected by the mutex provided.
-   */
-  explicit Condition(ACE_Recursive_Thread_Mutex& mutex);
-
-  ~Condition() {}
-
-  /**
-   * Release the given mutex, and wait for condition to be signaled, then
-   * re-acquire the mutex.
-   * Returns true only if the condition is signaled.
-   * Returns false only if the time is passed.
-   */
-  bool waitUntil(ACE_Time_Value* absoluteStopTime);
-  /** Convenience to derive absolute time.
-   */
-  inline bool waitFor(uint32_t seconds) {
-    ACE_Time_Value stopAt = ACE_OS::gettimeofday();
-    stopAt += seconds;
-    return waitUntil(&stopAt);
-  }
-
-  /**
-   * The mutex for this condition should be locked/held by the thread calling
-   * this signal method.
-   */
-  inline void signal() {
-    m_signaled = true;
-    m_cond.signal();
-  }
-
-  inline ACE_Recursive_Thread_Mutex& mutex() { return m_cond.mutex(); }
-
-  /** Must be called with the mutex held. */
-  inline void reset() { m_signaled = false; }
-};
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_CONDITION_H_
diff --git a/cppcache/src/CppCacheLibrary.cpp b/cppcache/src/CppCacheLibrary.cpp
index e3765a6..ada5d08 100644
--- a/cppcache/src/CppCacheLibrary.cpp
+++ b/cppcache/src/CppCacheLibrary.cpp
@@ -22,7 +22,6 @@
 #include <ace/ACE.h>
 #include <ace/Init_ACE.h>
 #include <ace/Log_Msg.h>
-#include <ace/OS.h>
 #include <ace/Singleton.h>
 
 #include <geode/CacheFactory.hpp>
diff --git a/cppcache/src/CqAttributesImpl.cpp b/cppcache/src/CqAttributesImpl.cpp
index 6e1f35e..ae64452 100644
--- a/cppcache/src/CqAttributesImpl.cpp
+++ b/cppcache/src/CqAttributesImpl.cpp
@@ -26,7 +26,7 @@
 namespace client {
 
 CqAttributes::listener_container_type CqAttributesImpl::getCqListeners() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   return m_cqListeners;
 }
 
@@ -34,7 +34,7 @@
   if (cql == nullptr) {
     throw IllegalArgumentException("addCqListener parameter was null");
   }
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   m_cqListeners.push_back(cql);
 }
 
@@ -53,7 +53,7 @@
 
   decltype(m_cqListeners) oldListeners(m_cqListeners);
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
     m_cqListeners = addedListeners;
   }
   if (!oldListeners.empty()) {
@@ -75,7 +75,7 @@
   if (cql == nullptr) {
     throw IllegalArgumentException("removeCqListener parameter was null");
   }
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   if (!m_cqListeners.empty()) {
     m_cqListeners.erase(
         std::remove_if(
diff --git a/cppcache/src/CqAttributesImpl.hpp b/cppcache/src/CqAttributesImpl.hpp
index 2bd3e0c..26e80f9 100644
--- a/cppcache/src/CqAttributesImpl.hpp
+++ b/cppcache/src/CqAttributesImpl.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_CQATTRIBUTESIMPL_H_
-#define GEODE_CQATTRIBUTESIMPL_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,19 +15,16 @@
  * limitations under the License.
  */
 
-#include <ace/ACE.h>
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
+#pragma once
+
+#ifndef GEODE_CQATTRIBUTESIMPL_H_
+#define GEODE_CQATTRIBUTESIMPL_H_
+
+#include <mutex>
 
 #include <geode/CqAttributes.hpp>
 #include <geode/CqAttributesMutator.hpp>
 
-/**
- * @file
- */
-
 namespace apache {
 namespace geode {
 namespace client {
@@ -70,8 +62,9 @@
  private:
   listener_container_type m_cqListeners;
   bool m_dataPolicyHasBeenSet;
-  ACE_Recursive_Thread_Mutex m_mutex;
+  std::recursive_mutex m_mutex;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/CqEventImpl.cpp b/cppcache/src/CqEventImpl.cpp
index 222a19c..ada5619 100644
--- a/cppcache/src/CqEventImpl.cpp
+++ b/cppcache/src/CqEventImpl.cpp
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "CqEventImpl.hpp"
 
 #include <geode/CacheableString.hpp>
 
+#include "TcrConnectionManager.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientCacheDistributionManager.hpp"
 #include "ThinClientPoolHADM.hpp"
@@ -92,7 +94,7 @@
 
 std::string CqEventImpl::toString() {
   char buffer[1024];
-  ACE_OS::snprintf(
+  std::snprintf(
       buffer, 1024,
       "CqEvent CqName=%s; base operation=%d; cq operation= %d;key=%s;value=%s",
       m_cQuery->getName().c_str(), static_cast<int>(m_baseOp),
diff --git a/cppcache/src/CqQueryImpl.cpp b/cppcache/src/CqQueryImpl.cpp
index d7e2bb5..a7eadf8 100644
--- a/cppcache/src/CqQueryImpl.cpp
+++ b/cppcache/src/CqQueryImpl.cpp
@@ -21,9 +21,9 @@
 #include <geode/CqAttributesMutator.hpp>
 #include <geode/ExceptionTypes.hpp>
 
-#include "ReadWriteLock.hpp"
 #include "ResultSetImpl.hpp"
 #include "StructSetImpl.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientRegion.hpp"
 #include "UserAttributes.hpp"
 #include "util/Log.hpp"
@@ -248,7 +248,7 @@
 }
 
 GfErrType CqQueryImpl::execute(TcrEndpoint* endpoint) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   if (m_cqState != CqState::RUNNING) {
     return GF_NOERR;
   }
@@ -282,23 +282,13 @@
       reply.getMessageType() == TcrMessage::CQ_EXCEPTION_TYPE) {
     err = ThinClientRegion::handleServerException("CqQuery::execute(endpoint)",
                                                   reply.getException());
-    /*
-    if (err == GF_CACHESERVER_EXCEPTION) {
-      throw CqQueryException("CqQuery::execute(endpoint): exception at the
-    server side: ",
-              reply.getException());
-    }
-    else {
-      GfErrTypeToException("CqQuery::execute(endpoint)", err);
-    }
-    */
   }
 
   return err;
 }
 
 void CqQueryImpl::executeAfterFailover() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   if (m_cqState != CqState::RUNNING) {
     return;
   }
@@ -311,10 +301,10 @@
     gua.setAuthenticatedView(m_authenticatedView);
   }
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardRedundancy(
-      *(m_tccdm->getRedundancyLock()));
+  auto& redundancyMutex = m_tccdm->getRedundancyLock();
+  std::lock_guard<decltype(redundancyMutex)> guardRedundancy(redundancyMutex);
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   if (m_cqState == CqState::RUNNING) {
     throw IllegalStateException("CqQuery::execute: cq is already running");
   }
@@ -355,7 +345,7 @@
       GfErrTypeToException("CqQuery::executeCq", err);
     }
   }
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   m_cqState = CqState::RUNNING;
   updateStats();
   return true;
@@ -371,10 +361,10 @@
     gua.setAuthenticatedView(m_authenticatedView);
   }
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardRedundancy(
-      *(m_tccdm->getRedundancyLock()));
+  std::lock_guard<decltype(m_tccdm->getRedundancyLock())> guardRedundancy(
+      m_tccdm->getRedundancyLock());
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   if (m_cqState == CqState::RUNNING) {
     throw IllegalStateException(
         "CqQuery::executeWithInitialResults: cq is already running");
@@ -519,7 +509,7 @@
   if (isClosed()) {
     throw CqClosedException(("CQ is closed, CqName : " + m_cqName).c_str());
   }
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   m_cqState = state;
 }
 
@@ -566,7 +556,7 @@
  * @return true if running, false otherwise
  */
 bool CqQueryImpl::isRunning() const {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   return m_cqState == CqState::RUNNING;
 }
 
@@ -575,7 +565,7 @@
  * @return true if stopped, false otherwise
  */
 bool CqQueryImpl::isStopped() const {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   return m_cqState == CqState::STOPPED ||
          (m_authenticatedView && m_authenticatedView->isClosed());
 }
@@ -585,7 +575,7 @@
  * @return true if closed, false otherwise
  */
 bool CqQueryImpl::isClosed() const {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+  std::lock_guard<decltype(m_mutex)> _guard(m_mutex);
   return m_cqState == CqState::CLOSED ||
          (m_authenticatedView && m_authenticatedView->isClosed());
 }
diff --git a/cppcache/src/CqQueryImpl.hpp b/cppcache/src/CqQueryImpl.hpp
index d4d27da..3c1b246 100644
--- a/cppcache/src/CqQueryImpl.hpp
+++ b/cppcache/src/CqQueryImpl.hpp
@@ -20,14 +20,9 @@
 #ifndef GEODE_CQQUERYIMPL_H_
 #define GEODE_CQQUERYIMPL_H_
 
+#include <mutex>
 #include <string>
 
-#include <ace/ACE.h>
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
-
 #include <geode/AuthenticatedView.hpp>
 #include <geode/CqAttributes.hpp>
 #include <geode/CqOperation.hpp>
@@ -39,7 +34,6 @@
 
 #include "CqQueryVsdStats.hpp"
 #include "CqService.hpp"
-#include "MapWithLock.hpp"
 
 /**
  * @file
@@ -271,7 +265,7 @@
 
  private:
   void updateStats();
-  mutable ACE_Recursive_Thread_Mutex m_mutex;
+  mutable std::recursive_mutex m_mutex;
   void sendStopOrClose(TcrMessage::MsgType requestType);
   ThinClientBaseDM* m_tccdm;
   AuthenticatedView* m_authenticatedView;
diff --git a/cppcache/src/CqService.cpp b/cppcache/src/CqService.cpp
index 51ec757..e872554 100644
--- a/cppcache/src/CqService.cpp
+++ b/cppcache/src/CqService.cpp
@@ -28,6 +28,7 @@
 #include "CqQueryImpl.hpp"
 #include "DistributedSystem.hpp"
 #include "ReadWriteLock.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "util/exception.hpp"
 
@@ -41,14 +42,10 @@
       m_statisticsFactory(statisticsFactory),
       m_notificationSema(1),
       m_stats(std::make_shared<CqServiceVsdStats>(m_statisticsFactory)) {
-  m_cqQueryMap = new MapOfCqQueryWithLock();
   m_running = true;
   LOGDEBUG("CqService Started");
 }
-CqService::~CqService() {
-  if (m_cqQueryMap != nullptr) delete m_cqQueryMap;
-  LOGDEBUG("CqService Destroyed");
-}
+CqService::~CqService() noexcept { LOGDEBUG("CqService Destroyed"); }
 
 void CqService::updateStats() {
   auto stats = std::dynamic_pointer_cast<CqServiceVsdStats>(m_stats);
@@ -56,14 +53,14 @@
   stats->setNumCqsActive(0);
   stats->setNumCqsStopped(0);
 
-  MapOfRegionGuard guard(m_cqQueryMap->mutex());
+  auto&& lock = m_cqQueryMap.make_lock();
 
-  stats->setNumCqsOnClient(static_cast<uint32_t>(m_cqQueryMap->current_size()));
+  stats->setNumCqsOnClient(static_cast<uint32_t>(m_cqQueryMap.size()));
 
-  if (m_cqQueryMap->current_size() == 0) return;
+  if (m_cqQueryMap.empty()) return;
 
-  for (auto q = m_cqQueryMap->begin(); q != m_cqQueryMap->end(); ++q) {
-    auto cquery = ((*q).int_id_);
+  for (const auto& kv : m_cqQueryMap) {
+    auto& cquery = kv.second;
     switch (cquery->getState()) {
       case CqState::RUNNING:
         stats->incNumCqsActive();
@@ -129,8 +126,7 @@
 
   std::shared_ptr<UserAttributes> ua = nullptr;
   if (m_tccdm != nullptr && m_tccdm->isMultiUserMode()) {
-    ua =
-        TSSUserAttributesWrapper::s_geodeTSSUserAttributes->getUserAttributes();
+    ua = UserAttributes::threadLocalUserAttributes;
   }
 
   auto cQuery = std::make_shared<CqQueryImpl>(
@@ -144,15 +140,9 @@
  * Adds the given CQ and cqQuery object into the CQ map.
  */
 void CqService::addCq(const std::string& cqName, std::shared_ptr<CqQuery>& cq) {
-  try {
-    MapOfRegionGuard guard(m_cqQueryMap->mutex());
-    std::shared_ptr<CqQuery> tmp;
-    if (0 == m_cqQueryMap->find(cqName, tmp)) {
-      throw CqExistsException("CQ with given name already exists. ");
-    }
-    m_cqQueryMap->bind(cqName, cq);
-  } catch (Exception& e) {
-    throw e;
+  auto result = m_cqQueryMap.emplace(cqName, cq);
+  if (!result.second) {
+    throw CqExistsException("CQ with given name already exists. ");
   }
 }
 
@@ -160,12 +150,7 @@
  * Removes given CQ from the cqMap..
  */
 void CqService::removeCq(const std::string& cqName) {
-  try {
-    MapOfRegionGuard guard(m_cqQueryMap->mutex());
-    m_cqQueryMap->unbind(cqName);
-  } catch (Exception& e) {
-    throw e;
-  }
+  m_cqQueryMap.erase(cqName);
 }
 
 /**
@@ -173,12 +158,12 @@
  * @return the CqQuery or null if not found
  */
 std::shared_ptr<CqQuery> CqService::getCq(const std::string& cqName) {
-  MapOfRegionGuard guard(m_cqQueryMap->mutex());
-  std::shared_ptr<CqQuery> tmp;
-  if (0 != m_cqQueryMap->find(cqName, tmp)) {
+  auto&& lock = m_cqQueryMap.make_lock();
+  const auto& found = m_cqQueryMap.find(cqName);
+  if (found == m_cqQueryMap.end()) {
     LOGWARN("Failed to get the specified CQ: %s", cqName.c_str());
   } else {
-    return tmp;
+    return found->second;
   }
   return nullptr;
 }
@@ -188,12 +173,7 @@
  */
 void CqService::clearCqQueryMap() {
   Log::fine("Cleaning clearCqQueryMap.");
-  try {
-    MapOfRegionGuard guard(m_cqQueryMap->mutex());
-    m_cqQueryMap->unbind_all();
-  } catch (Exception& e) {
-    throw e;
-  }
+  m_cqQueryMap.clear();
 }
 
 /**
@@ -201,11 +181,12 @@
  */
 CqService::query_container_type CqService::getAllCqs() {
   CqService::query_container_type cqVec;
-  MapOfRegionGuard guard(m_cqQueryMap->mutex());
-  if (m_cqQueryMap->current_size() == 0) return cqVec;
-  cqVec.reserve(static_cast<int32_t>(m_cqQueryMap->current_size()));
-  for (auto& q : *m_cqQueryMap) {
-    cqVec.push_back(q.int_id_);
+  auto&& lock = m_cqQueryMap.make_lock();
+  if (!m_cqQueryMap.empty()) {
+    cqVec.reserve(m_cqQueryMap.size());
+    for (auto& kv : m_cqQueryMap) {
+      cqVec.push_back(kv.second);
+    }
   }
   return cqVec;
 }
@@ -214,9 +195,7 @@
  * Executes all the cqs on this client.
  */
 void CqService::executeAllClientCqs(bool afterFailover) {
-  // ACE_Guard< ACE_Recursive_Thread_Mutex > _guard( m_mutex );
   query_container_type cqVec = getAllCqs();
-  // MapOfRegionGuard guard( m_cqQueryMap->mutex() );
   executeCqs(cqVec, afterFailover);
 }
 
@@ -371,7 +350,7 @@
   Log::fine("closeAllCqs()");
   query_container_type cqVec = getAllCqs();
   Log::fine("closeAllCqs() 1");
-  MapOfRegionGuard guard(m_cqQueryMap->mutex());
+  auto&& lock = m_cqQueryMap.make_lock();
   Log::fine("closeAllCqs() 2");
   closeCqs(cqVec);
 }
@@ -396,16 +375,9 @@
  * @return true if exists else false.
  */
 bool CqService::isCqExists(const std::string& cqName) {
-  bool status = false;
-  try {
-    MapOfRegionGuard guard(m_cqQueryMap->mutex());
-    std::shared_ptr<CqQuery> tmp;
-    status = (0 == m_cqQueryMap->find(cqName, tmp));
-  } catch (Exception& ex) {
-    LOGFINE("Exception (%s) in isCQExists, ignored ",
-            ex.what());  // Ignore.
-  }
-  return status;
+  auto&& lock = m_cqQueryMap.make_lock();
+
+  return m_cqQueryMap.find(cqName) != m_cqQueryMap.end();
 }
 void CqService::receiveNotification(TcrMessage* msg) {
   invokeCqListeners(msg->getCqs(), msg->getMessageTypeForCq(), msg->getKey(),
diff --git a/cppcache/src/CqService.hpp b/cppcache/src/CqService.hpp
index d3b16db..5fed8de 100644
--- a/cppcache/src/CqService.hpp
+++ b/cppcache/src/CqService.hpp
@@ -21,15 +21,10 @@
 #define GEODE_CQSERVICE_H_
 
 #include <map>
+#include <mutex>
 #include <string>
 
-#include <ace/ACE.h>
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
 #include <ace/Semaphore.h>
-#include <ace/Task.h>
-#include <ace/Time_Value.h>
 
 #include <geode/CacheableKey.hpp>
 #include <geode/CqOperation.hpp>
@@ -38,27 +33,25 @@
 
 #include "CqServiceVsdStats.hpp"
 #include "DistributedSystem.hpp"
-#include "MapWithLock.hpp"
+#include "ErrType.hpp"
 #include "NonCopyable.hpp"
 #include "Queue.hpp"
 #include "TcrMessage.hpp"
-#include "ThinClientBaseDM.hpp"
-
-/**
- * @file
- */
+#include "util/synchronized_map.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
+class ThinClientBaseDM;
+class TcrEndpoint;
+
 /**
  * @class CqService CqService.hpp
  *
  * Implements the CqService functionality.
  *
  */
-
 class APACHE_GEODE_EXPORT CqService
     : private NonCopyable,
       private NonAssignable,
@@ -66,19 +59,16 @@
  private:
   ThinClientBaseDM* m_tccdm;
   statistics::StatisticsFactory* m_statisticsFactory;
-  ACE_Recursive_Thread_Mutex m_mutex;
-  std::string m_queryString;
   ACE_Semaphore m_notificationSema;
 
   bool m_running;
-  MapOfCqQueryWithLock* m_cqQueryMap;
+  synchronized_map<std::unordered_map<std::string, std::shared_ptr<CqQuery>>,
+                   std::recursive_mutex>
+      m_cqQueryMap;
 
   std::shared_ptr<CqServiceStatistics> m_stats;
 
-  inline bool noCq() const {
-    MapOfRegionGuard guard(m_cqQueryMap->mutex());
-    return (0 == m_cqQueryMap->current_size());
-  }
+  inline bool noCq() const { return m_cqQueryMap.empty(); }
 
  public:
   typedef std::vector<std::shared_ptr<CqQuery>> query_container_type;
@@ -88,10 +78,11 @@
    */
   CqService(ThinClientBaseDM* tccdm,
             statistics::StatisticsFactory* statisticsFactory);
+  ~CqService() noexcept;
+
   ThinClientBaseDM* getDM() { return m_tccdm; }
 
   void receiveNotification(TcrMessage* msg);
-  ~CqService();
 
   /**
    * Returns the state of the cqService.
diff --git a/cppcache/src/DataOutput.cpp b/cppcache/src/DataOutput.cpp
index b672842..29b5470 100644
--- a/cppcache/src/DataOutput.cpp
+++ b/cppcache/src/DataOutput.cpp
@@ -17,9 +17,6 @@
 
 #include <vector>
 
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/TSS_T.h>
-
 #include <geode/DataOutput.hpp>
 #include <geode/SystemProperties.hpp>
 
@@ -34,7 +31,7 @@
 namespace geode {
 namespace client {
 
-ACE_Recursive_Thread_Mutex g_bigBufferLock;
+std::recursive_mutex globalBigBufferMutex;
 size_t DataOutput::m_highWaterMark = 50 * 1024 * 1024;
 size_t DataOutput::m_lowWaterMark = 8192;
 
@@ -93,7 +90,7 @@
     m_buffers.push_back(desc);
   }
 
-  static ACE_TSS<TSSDataOutput> s_tssDataOutput;
+  static thread_local TSSDataOutput threadLocalBufferPool;
 };
 
 TSSDataOutput::TSSDataOutput() : m_buffers() {
@@ -109,7 +106,7 @@
   }
 }
 
-ACE_TSS<TSSDataOutput> TSSDataOutput::s_tssDataOutput;
+thread_local TSSDataOutput TSSDataOutput::threadLocalBufferPool;
 
 DataOutput::DataOutput(const CacheImpl* cache, Pool* pool)
     : m_size(0), m_haveBigBuffer(false), m_cache(cache), m_pool(pool) {
@@ -118,11 +115,11 @@
 }
 
 uint8_t* DataOutput::checkoutBuffer(size_t* size) {
-  return TSSDataOutput::s_tssDataOutput->getBuffer(size);
+  return TSSDataOutput::threadLocalBufferPool.getBuffer(size);
 }
 
 void DataOutput::checkinBuffer(uint8_t* buffer, size_t size) {
-  TSSDataOutput::s_tssDataOutput->poolBuffer(buffer, size);
+  TSSDataOutput::threadLocalBufferPool.poolBuffer(buffer, size);
 }
 
 void DataOutput::writeObjectInternal(const std::shared_ptr<Serializable>& ptr,
@@ -130,9 +127,9 @@
   getSerializationRegistry().serialize(ptr, *this, isDelta);
 }
 
-void DataOutput::acquireLock() { g_bigBufferLock.acquire(); }
+void DataOutput::acquireLock() { globalBigBufferMutex.lock(); }
 
-void DataOutput::releaseLock() { g_bigBufferLock.release(); }
+void DataOutput::releaseLock() { globalBigBufferMutex.unlock(); }
 
 const SerializationRegistry& DataOutput::getSerializationRegistry() const {
   return *m_cache->getSerializationRegistry();
diff --git a/cppcache/src/DiffieHellman.cpp b/cppcache/src/DiffieHellman.cpp
index d1790d5..fc0c81d 100644
--- a/cppcache/src/DiffieHellman.cpp
+++ b/cppcache/src/DiffieHellman.cpp
@@ -45,8 +45,8 @@
   void* func = m_dll.symbol(function_name);
   if (func == nullptr) {
     char msg[1000];
-    ACE_OS::snprintf(msg, 1000, "cannot find function %s in library %s",
-                     function_name, "cryptoImpl");
+    std::snprintf(msg, 1000, "cannot find function %s in library %s",
+                  function_name, "cryptoImpl");
     LOGERROR(msg);
     throw IllegalStateException(msg);
   }
@@ -64,7 +64,7 @@
 
   if (m_dll.open(libName, ACE_DEFAULT_SHLIB_MODE, 0) == -1) {
     char msg[1000];
-    ACE_OS::snprintf(msg, 1000, "cannot open library: %s", libName);
+    std::snprintf(msg, 1000, "cannot open library: %s", libName);
     LOGERROR(msg);
     throw FileNotFoundException(msg);
   }
@@ -102,13 +102,13 @@
 
   if (error == DH_ERR_UNSUPPORTED_ALGO) {  // Unsupported Algorithm
     char msg[64] = {'\0'};
-    ACE_OS::snprintf(msg, 64, "Algorithm %s is not supported.",
-                     dhAlgo->value().c_str());
+    std::snprintf(msg, 64, "Algorithm %s is not supported.",
+                  dhAlgo->value().c_str());
     throw IllegalArgumentException(msg);
   } else if (error == DH_ERR_ILLEGAL_KEYSIZE) {  // Illegal Key size
     char msg[64] = {'\0'};
-    ACE_OS::snprintf(msg, 64, "Illegal key size for algorithm %s.",
-                     dhAlgo->value().c_str());
+    std::snprintf(msg, 64, "Illegal key size for algorithm %s.",
+                  dhAlgo->value().c_str());
     throw IllegalArgumentException(msg);
   } else if (m_dhCtx == nullptr) {
     throw IllegalStateException(
diff --git a/cppcache/src/DiffieHellman.hpp b/cppcache/src/DiffieHellman.hpp
index 31d3238..234cac9 100644
--- a/cppcache/src/DiffieHellman.hpp
+++ b/cppcache/src/DiffieHellman.hpp
@@ -22,8 +22,6 @@
 #include <string>
 
 #include <ace/DLL.h>
-#include <ace/OS.h>
-#include <ace/Recursive_Thread_Mutex.h>
 
 #include <geode/CacheableBuiltins.hpp>
 #include <geode/Properties.hpp>
diff --git a/cppcache/src/DiskStoreId.cpp b/cppcache/src/DiskStoreId.cpp
index 3fa024b..802efae 100644
--- a/cppcache/src/DiskStoreId.cpp
+++ b/cppcache/src/DiskStoreId.cpp
@@ -17,32 +17,19 @@
 
 #include "DiskStoreId.hpp"
 
-#include <inttypes.h>
-
-#include <ace/OS.h>
-
 namespace apache {
 namespace geode {
 namespace client {
+
 std::string DiskStoreId::getHashKey() {
-  if (m_hashCode.size() == 0) {
-    char hashCode[128] = {0};
-    /* adongre  - Coverity II
-     * CID 29207: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
-    ACE_OS::snprintf(hashCode, 128, "%" PRIx64 "_%" PRIx64, m_mostSig,
-                     m_leastSig);
-    m_hashCode.append(hashCode);
+  if (m_hashCode.empty()) {
+    m_hashCode.append(std::to_string(m_mostSig))
+        .append("_")
+        .append(std::to_string(m_leastSig));
   }
   return m_hashCode;
 }
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/DistributedSystem.cpp b/cppcache/src/DistributedSystem.cpp
index c275d0f..41ae8fb 100644
--- a/cppcache/src/DistributedSystem.cpp
+++ b/cppcache/src/DistributedSystem.cpp
@@ -17,10 +17,6 @@
 
 #include "DistributedSystem.hpp"
 
-#include <ace/Guard_T.h>
-#include <ace/OS.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/CacheFactory.hpp>
 #include <geode/DataOutput.hpp>
 #include <geode/SystemProperties.hpp>
diff --git a/cppcache/src/DistributedSystemImpl.cpp b/cppcache/src/DistributedSystemImpl.cpp
index 9681882..a648232 100644
--- a/cppcache/src/DistributedSystemImpl.cpp
+++ b/cppcache/src/DistributedSystemImpl.cpp
@@ -17,16 +17,22 @@
 
 #include "DistributedSystemImpl.hpp"
 
+#if defined(HAVE_PTHREAD_H)
+#include <pthread.h>
+#elif defined(_WIN32)
+#include <windows.h>
+#endif
+
+#include <boost/filesystem.hpp>
+
 #include <geode/SystemProperties.hpp>
 
 #include "CacheImpl.hpp"
 #include "CacheRegionHelper.hpp"
 #include "CppCacheLibrary.hpp"
-#include "DiffieHellman.hpp"
 #include "PoolStatistics.hpp"
 #include "RegionStats.hpp"
 #include "config.h"
-#include "statistics/StatisticsManager.hpp"
 #include "util/Log.hpp"
 #include "version.h"
 
@@ -36,7 +42,7 @@
 
 volatile bool DistributedSystemImpl::m_isCliCallbackSet = false;
 std::map<int, CliCallbackMethod> DistributedSystemImpl::m_cliCallbackMap;
-ACE_Recursive_Thread_Mutex DistributedSystemImpl::m_cliCallbackLock;
+std::recursive_mutex DistributedSystemImpl::m_cliCallbackLock;
 
 DistributedSystemImpl::DistributedSystemImpl(
     std::string name, DistributedSystem* implementee,
@@ -81,20 +87,12 @@
   LOGCONFIG(
       "Running on: SystemName=%s Machine=%s Host=%s Release=%s Version=%s",
       u.sysname, u.machine, u.nodename, u.release, u.version);
-
-#ifdef _WIN32
-  const uint32_t pathMax = _MAX_PATH;
-#else
-  const uint32_t pathMax = PATH_MAX;
-#endif
-  ACE_TCHAR cwd[pathMax + 1];
-  (void)ACE_OS::getcwd(cwd, pathMax);
-  LOGCONFIG("Current directory: %s", cwd);
-  LOGCONFIG("Current value of PATH: %s", ACE_OS::getenv("PATH"));
+  LOGCONFIG("Current directory: %s",
+            boost::filesystem::current_path().string().c_str());
+  LOGCONFIG("Current value of PATH: %s", Utils::getEnv("PATH").c_str());
 #ifndef _WIN32
-  const char* ld_libpath = ACE_OS::getenv("LD_LIBRARY_PATH");
   LOGCONFIG("Current library path: %s",
-            ld_libpath == nullptr ? "nullptr" : ld_libpath);
+            Utils::getEnv("LD_LIBRARY_PATH").c_str());
 #endif
   // Log the Geode system properties
   m_sysProps->logSettings();
@@ -122,7 +120,8 @@
 const std::string& DistributedSystemImpl::getName() const { return m_name; }
 
 void DistributedSystemImpl::CallCliCallBack(Cache& cache) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> disconnectGuard(m_cliCallbackLock);
+  std::lock_guard<decltype(m_cliCallbackLock)> disconnectGuard(
+      m_cliCallbackLock);
   if (m_isCliCallbackSet == true) {
     for (const auto& iter : m_cliCallbackMap) {
       iter.second(cache);
@@ -132,13 +131,15 @@
 
 void DistributedSystemImpl::registerCliCallback(int appdomainId,
                                                 CliCallbackMethod clicallback) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> disconnectGuard(m_cliCallbackLock);
+  std::lock_guard<decltype(m_cliCallbackLock)> disconnectGuard(
+      m_cliCallbackLock);
   m_cliCallbackMap[appdomainId] = clicallback;
   m_isCliCallbackSet = true;
 }
 
 void DistributedSystemImpl::unregisterCliCallback(int appdomainId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> disconnectGuard(m_cliCallbackLock);
+  std::lock_guard<decltype(m_cliCallbackLock)> disconnectGuard(
+      m_cliCallbackLock);
   auto iter = m_cliCallbackMap.find(appdomainId);
   if (iter != m_cliCallbackMap.end()) {
     m_cliCallbackMap.erase(iter);
@@ -146,6 +147,43 @@
   }
 }
 
+void DistributedSystemImpl::setThreadName(const std::string& threadName) {
+  if (threadName.empty()) {
+    throw IllegalArgumentException("Thread name is empty.");
+  }
+
+#if defined(HAVE_pthread_setname_np)
+
+  pthread_setname_np(threadName.c_str());
+
+#elif defined(_WIN32)
+
+  const DWORD MS_VC_EXCEPTION = 0x406D1388;
+
+#pragma pack(push, 8)
+  typedef struct tagTHREADNAME_INFO {
+    DWORD dwType;      // Must be 0x1000.
+    LPCSTR szName;     // Pointer to name (in user addr space).
+    DWORD dwThreadID;  // Thread ID (-1=caller thread).
+    DWORD dwFlags;     // Reserved for future use, must be zero.
+  } THREADNAME_INFO;
+#pragma pack(pop)
+
+  THREADNAME_INFO info;
+  info.dwType = 0x1000;
+  info.szName = threadName.c_str();
+  info.dwThreadID = -1;
+  info.dwFlags = 0;
+
+  __try {
+    RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR),
+                   (ULONG_PTR*)&info);
+  } __except (EXCEPTION_EXECUTE_HANDLER) {
+  }
+
+#endif
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/DistributedSystemImpl.hpp b/cppcache/src/DistributedSystemImpl.hpp
index e469627..ff3e2cc 100644
--- a/cppcache/src/DistributedSystemImpl.hpp
+++ b/cppcache/src/DistributedSystemImpl.hpp
@@ -20,56 +20,35 @@
 #ifndef GEODE_DISTRIBUTEDSYSTEMIMPL_H_
 #define GEODE_DISTRIBUTEDSYSTEMIMPL_H_
 
-/**
- * @file
- */
-
 #include <map>
 #include <memory>
+#include <mutex>
 #include <string>
 
-#include <ace/Guard_T.h>
-#include <ace/OS.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/internal/geode_globals.hpp>
 
 #include "DiffieHellman.hpp"
 #include "DistributedSystem.hpp"
 #include "statistics/StatisticsManager.hpp"
 
-#ifdef __linux
-#include <sys/prctl.h>
-#endif
-
 namespace apache {
 namespace geode {
 namespace client {
+
 class SystemProperties;
 
+class DistributedSystemImpl;
+
+using CliCallbackMethod = std::function<void(Cache&)>;
+
 /**
  * @class DistributedSystemImpl DistributedSystemImpl.hpp
  * A "connection" to a Geode distributed system.
  * The connection will be through a (host, port) pair.
  */
-
-class DistributedSystemImpl;
-
-using CliCallbackMethod = std::function<void(Cache&)>;
-
 class APACHE_GEODE_EXPORT DistributedSystemImpl {
-  /**
-   * @brief public methods
-   */
  public:
-  static void setThreadName(const std::string& threadName) {
-    if (threadName.empty()) {
-      throw IllegalArgumentException("Thread name is empty.");
-    }
-#ifdef __linux
-    prctl(PR_SET_NAME, threadName.c_str(), 0, 0, 0);
-#endif
-  }
+  static void setThreadName(const std::string& threadName);
 
   /**
    * @brief destructor
@@ -107,12 +86,13 @@
   static void CallCliCallBack(Cache& cache);
 
  private:
-  static ACE_Recursive_Thread_Mutex m_cliCallbackLock;
+  static std::recursive_mutex m_cliCallbackLock;
   static volatile bool m_isCliCallbackSet;
   static std::map<int, CliCallbackMethod> m_cliCallbackMap;
   std::unique_ptr<SystemProperties> m_sysProps;
   bool m_connected;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/EntryExpiryHandler.cpp b/cppcache/src/EntryExpiryHandler.cpp
index 253b954..cc02155 100644
--- a/cppcache/src/EntryExpiryHandler.cpp
+++ b/cppcache/src/EntryExpiryHandler.cpp
@@ -17,15 +17,16 @@
 
 #include "EntryExpiryHandler.hpp"
 
+#include <ace/Reactor.h>
+#include <ace/Timer_Heap.h>
+#include <ace/Timer_Heap_T.h>
+#include <ace/Timer_Queue.h>
+#include <ace/Timer_Queue_Adapters.h>
+#include <ace/svc_export.h>
+
 #include "CacheImpl.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "RegionInternal.hpp"
-#include "ace/Reactor.h"
-#include "ace/Timer_Heap.h"
-#include "ace/Timer_Heap_T.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Timer_Queue_Adapters.h"
-#include "ace/svc_export.h"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/EventId.cpp b/cppcache/src/EventId.cpp
index 46b0a1e..a6db548 100644
--- a/cppcache/src/EventId.cpp
+++ b/cppcache/src/EventId.cpp
@@ -120,7 +120,7 @@
 
 EventId::EventId(char* memId, uint32_t memIdLen, int64_t thr, int64_t seq) {
   // TODO: statics being assigned; not thread-safe??
-  ACE_OS::memcpy(m_eidMem, memId, memIdLen);
+  std::memcpy(m_eidMem, memId, memIdLen);
   m_eidMemLen = memIdLen;
   m_eidThr = thr;
   m_eidSeq = seq;
diff --git a/cppcache/src/EventIdMap.cpp b/cppcache/src/EventIdMap.cpp
index 5b960c5..6fe069e 100644
--- a/cppcache/src/EventIdMap.cpp
+++ b/cppcache/src/EventIdMap.cpp
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "EventIdMap.hpp"
 
 namespace apache {
@@ -27,7 +28,8 @@
 }
 
 void EventIdMap::clear() {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
+
   m_map.clear();
 }
 
@@ -40,9 +42,9 @@
 
 bool EventIdMap::isDuplicate(std::shared_ptr<EventSource> key,
                              std::shared_ptr<EventSequence> value) {
-  GUARD_MAP;
-  const auto& entry = m_map.find(key);
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
+  const auto& entry = m_map.find(key);
   if (entry != m_map.end() && ((*value) <= (*(entry->second)))) {
     return true;
   }
@@ -51,12 +53,11 @@
 
 bool EventIdMap::put(std::shared_ptr<EventSource> key,
                      std::shared_ptr<EventSequence> value, bool onlynew) {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   value->touch(m_expiry);
 
   const auto& entry = m_map.find(key);
-
   if (entry != m_map.end()) {
     if (onlynew && ((*value) <= (*(entry->second)))) {
       return false;
@@ -71,10 +72,9 @@
 }
 
 bool EventIdMap::touch(std::shared_ptr<EventSource> key) {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   const auto& entry = m_map.find(key);
-
   if (entry != m_map.end()) {
     entry->second->touch(m_expiry);
     return true;
@@ -84,7 +84,7 @@
 }
 
 bool EventIdMap::remove(std::shared_ptr<EventSource> key) {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   const auto& entry = m_map.find(key);
 
@@ -98,7 +98,7 @@
 
 // side-effect: sets acked flags to true
 EventIdMapEntryList EventIdMap::getUnAcked() {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   EventIdMapEntryList entries;
 
@@ -115,7 +115,7 @@
 }
 
 uint32_t EventIdMap::clearAckedFlags(EventIdMapEntryList& entries) {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   uint32_t cleared = 0;
 
@@ -132,27 +132,24 @@
 }
 
 uint32_t EventIdMap::expire(bool onlyacked) {
-  GUARD_MAP;
+  std::lock_guard<decltype(m_lock)> guard(m_lock);
 
   uint32_t expired = 0;
 
   EventIdMapEntryList entries;
 
-  ACE_Time_Value current = ACE_OS::gettimeofday();
-
   for (const auto& entry : m_map) {
     if (onlyacked && !entry.second->getAcked()) {
       continue;
     }
 
-    if (entry.second->getDeadline() < current) {
+    if (entry.second->getDeadline() < EventSequence::clock::now()) {
       entries.push_back(std::make_pair(entry.first, entry.second));
     }
   }
 
-  for (EventIdMapEntryList::iterator expiry = entries.begin();
-       expiry != entries.end(); expiry++) {
-    m_map.erase((*expiry).first);
+  for (auto&& expiry : entries) {
+    m_map.erase(expiry.first);
     expired++;
   }
 
@@ -162,7 +159,7 @@
 void EventSequence::init() {
   m_seqNum = -1;
   m_acked = false;
-  m_deadline = ACE_OS::gettimeofday();
+  m_deadline = clock::now();
 }
 
 void EventSequence::clear() { init(); }
@@ -177,8 +174,7 @@
 EventSequence::~EventSequence() { clear(); }
 
 void EventSequence::touch(std::chrono::milliseconds ageSecs) {
-  m_deadline = ACE_OS::gettimeofday();
-  m_deadline += ageSecs;
+  m_deadline = clock::now() + ageSecs;
 }
 
 void EventSequence::touch(int64_t seqNum, std::chrono::milliseconds ageSecs) {
@@ -195,11 +191,9 @@
 
 void EventSequence::setAcked(bool acked) { m_acked = acked; }
 
-ACE_Time_Value EventSequence::getDeadline() { return m_deadline; }
+EventSequence::time_point EventSequence::getDeadline() { return m_deadline; }
 
-void EventSequence::setDeadline(ACE_Time_Value deadline) {
-  m_deadline = deadline;
-}
+void EventSequence::setDeadline(time_point deadline) { m_deadline = deadline; }
 
 bool EventSequence::operator<=(const EventSequence& rhs) const {
   return this->m_seqNum <= (&rhs)->m_seqNum;
diff --git a/cppcache/src/EventIdMap.hpp b/cppcache/src/EventIdMap.hpp
index 4b2805a..6ec3379 100644
--- a/cppcache/src/EventIdMap.hpp
+++ b/cppcache/src/EventIdMap.hpp
@@ -20,17 +20,14 @@
 #ifndef GEODE_EVENTIDMAP_H_
 #define GEODE_EVENTIDMAP_H_
 
+#include <chrono>
 #include <functional>
 #include <memory>
+#include <mutex>
 #include <unordered_map>
 #include <utility>
 #include <vector>
 
-#include <ace/ACE.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
-
 #include <geode/internal/functional.hpp>
 
 #include "EventId.hpp"
@@ -47,10 +44,6 @@
     EventIdMapEntry;
 typedef std::vector<EventIdMapEntry> EventIdMapEntryList;
 
-typedef ACE_Guard<ACE_Recursive_Thread_Mutex> MapGuard;
-
-#define GUARD_MAP MapGuard mapguard(m_lock)
-
 /** @class EventIdMap EventIdMap.hpp
  *
  * This is the class that encapsulates a HashMap and
@@ -67,7 +60,7 @@
 
   std::chrono::milliseconds m_expiry;
   map_type m_map;
-  ACE_Recursive_Thread_Mutex m_lock;
+  std::recursive_mutex m_lock;
 
   // hidden
   EventIdMap(const EventIdMap &);
@@ -135,9 +128,14 @@
  * a flag indicating whether or not it is ACKed
  */
 class APACHE_GEODE_EXPORT EventSequence {
+ public:
+  using clock = std::chrono::steady_clock;
+  using time_point = clock::time_point;
+
+ private:
   int64_t m_seqNum;
   bool m_acked;
-  ACE_Time_Value m_deadline;  // current time plus the expiration delay (age)
+  time_point m_deadline;  // current time plus the expiration delay (age)
 
   void init();
 
@@ -161,8 +159,8 @@
   bool getAcked();
   void setAcked(bool acked);
 
-  ACE_Time_Value getDeadline();
-  void setDeadline(ACE_Time_Value deadline);
+  time_point getDeadline();
+  void setDeadline(time_point deadline);
 
   bool operator<=(const EventSequence &rhs) const;
 };
diff --git a/cppcache/src/EventSource.cpp b/cppcache/src/EventSource.cpp
index d303416..7b9b5cc 100644
--- a/cppcache/src/EventSource.cpp
+++ b/cppcache/src/EventSource.cpp
@@ -14,6 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include <ace/ACE.h>
+
 #include "EventIdMap.hpp"
 
 namespace apache {
diff --git a/cppcache/src/EvictionController.cpp b/cppcache/src/EvictionController.cpp
index 52aac5c..10b4a1c 100644
--- a/cppcache/src/EvictionController.cpp
+++ b/cppcache/src/EvictionController.cpp
@@ -17,13 +17,16 @@
 
 #include "EvictionController.hpp"
 
-#include <string>
+#include <chrono>
+
+#include <boost/thread/lock_types.hpp>
 
 #include "CacheImpl.hpp"
 #include "CacheRegionHelper.hpp"
 #include "DistributedSystem.hpp"
 #include "ReadWriteLock.hpp"
 #include "RegionInternal.hpp"
+#include "util/Log.hpp"
 
 namespace apache {
 namespace geode {
@@ -36,45 +39,61 @@
       m_maxHeapSize(maxHeapSize * 1024 * 1024),
       m_heapSizeDelta(heapSizeDelta),
       m_cacheImpl(cache),
-      m_currentHeapSize(0) {
-  evictionThreadPtr = new EvictionThread(this);
+      m_currentHeapSize(0),
+      m_evictionThread(this) {
   LOGINFO("Maximum heap size for Heap LRU set to %ld bytes", m_maxHeapSize);
-  //  m_currentHeapSize =
-  //  DistributedSystem::getSystemProperties()->gfHighWaterMark(),
-  //  DistributedSystem::getSystemProperties()->gfMessageSize();
 }
 
-EvictionController::~EvictionController() {
-  _GEODE_SAFE_DELETE(evictionThreadPtr);
+void EvictionController::start() {
+  m_evictionThread.start();
+
+  m_run = true;
+  m_thread = std::thread(&EvictionController::svc, this);
+
+  LOGFINE("Eviction Controller started");
+}
+
+void EvictionController::stop() {
+  m_run = false;
+  m_queueCondition.notify_one();
+  m_thread.join();
+
+  m_evictionThread.stop();
+
+  m_regions.clear();
+  m_queue.clear();
+
+  LOGFINE("Eviction controller stopped");
+}
+
+void EvictionController::svc() {
+  DistributedSystemImpl::setThreadName(NC_EC_Thread);
+
+  int64_t pendingEvictions = 0;
+
+  while (m_run) {
+    std::unique_lock<std::mutex> lock(m_queueMutex);
+    m_queueCondition.wait(lock, [this] { return !m_run || !m_queue.empty(); });
+
+    while (!m_queue.empty()) {
+      auto readInfo = m_queue.front();
+      m_queue.pop_front();
+      if (0 != readInfo) {
+        processHeapInfo(readInfo, pendingEvictions);
+      }
+    }
+  }
 }
 
 void EvictionController::updateRegionHeapInfo(int64_t info) {
-  // LOGINFO("updateRegionHeapInfo is %d", info);
-  m_queue.put(info);
+  std::unique_lock<std::mutex> lock(m_queueMutex);
+  m_queue.push_back(info);
+  m_queueCondition.notify_one();
+
   // We could block here if we wanted to prevent any further memory use
   // until the evictions had been completed.
 }
 
-int EvictionController::svc() {
-  DistributedSystemImpl::setThreadName(NC_EC_Thread);
-  int64_t pendingEvictions = 0;
-  while (m_run) {
-    int64_t readInfo = 0;
-    readInfo = m_queue.get(1500);
-    if (readInfo == 0) continue;
-
-    processHeapInfo(readInfo, pendingEvictions);
-  }
-  int32_t size = m_queue.size();
-  for (int i = 0; i < size; i++) {
-    int64_t readInfo = 0;
-    readInfo = m_queue.get();
-    if (readInfo == 0) continue;
-    processHeapInfo(readInfo, pendingEvictions);
-  }
-  return 1;
-}
-
 void EvictionController::processHeapInfo(int64_t& readInfo,
                                          int64_t& pendingEvictions) {
   m_currentHeapSize += readInfo;
@@ -113,31 +132,29 @@
   }
 }
 
-void EvictionController::registerRegion(std::string& name) {
-  WriteGuard guard(m_regionLock);
+void EvictionController::registerRegion(const std::string& name) {
+  boost::unique_lock<decltype(m_regionLock)> lock(m_regionLock);
   m_regions.push_back(name);
-  LOGFINE("Registered region with Heap LRU eviction controller: name is %s",
-          name.c_str());
+  LOGFINE("Registered region with Heap LRU eviction controller: name is " +
+          name);
 }
 
-void EvictionController::deregisterRegion(std::string& name) {
+void EvictionController::deregisterRegion(const std::string& name) {
   // Iterate over regions vector and remove the one that we need to remove
-  WriteGuard guard(m_regionLock);
-  for (size_t i = 0; i < m_regions.size(); i++) {
-    std::string str = m_regions.at(i);
-    if (str == name) {
-      std::vector<std::string>::iterator iter = m_regions.begin();
-      m_regions.erase(iter + i);
-      LOGFINE(
-          "Deregistered region with Heap LRU eviction controller: name is %s",
-          name.c_str());
-      break;
-    }
+  boost::unique_lock<decltype(m_regionLock)> lock(m_regionLock);
+
+  const auto& removed =
+      std::remove_if(m_regions.begin(), m_regions.end(),
+                     [&](const std::string& region) { return region == name; });
+  if (removed != m_regions.cend()) {
+    LOGFINE("Deregistered region with Heap LRU eviction controller: name is " +
+            name);
   }
+  m_regions.erase(removed, m_regions.cend());
 }
 
 void EvictionController::orderEvictions(int32_t percentage) {
-  evictionThreadPtr->putEvictionInfo(percentage);
+  m_evictionThread.putEvictionInfo(percentage);
 }
 
 void EvictionController::evict(int32_t percentage) {
@@ -149,25 +166,23 @@
   // On the flip side, this requires a copy of the registered region list
   // every time eviction is ordered and that might not be cheap
   //@TODO: Discuss with team
-  VectorOfString regionTempVector;
+
+  decltype(m_regions) regionTempVector;
   {
-    ReadGuard guard(m_regionLock);
-    for (size_t i = 0; i < m_regions.size(); i++) {
-      regionTempVector.push_back(m_regions.at(i));
-    }
+    boost::shared_lock<decltype(m_regionLock)> lock(m_regionLock);
+    regionTempVector.reserve(m_regions.size());
+    regionTempVector.insert(regionTempVector.end(), m_regions.begin(),
+                            m_regions.end());
   }
 
-  for (size_t i = 0; i < regionTempVector.size(); i++) {
-    std::string region_name = regionTempVector.at(i);
-    auto region = m_cacheImpl->getRegion(region_name);
-    if (region != nullptr) {
-      RegionInternal* regionImpl = dynamic_cast<RegionInternal*>(region.get());
-      if (regionImpl != nullptr) {
-        regionImpl->evict(percentage);
-      }
+  for (const auto& regionName : regionTempVector) {
+    if (auto region = std::dynamic_pointer_cast<RegionInternal>(
+            m_cacheImpl->getRegion(regionName))) {
+      region->evict(percentage);
     }
   }
 }
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/EvictionController.hpp b/cppcache/src/EvictionController.hpp
index 6529d48..9e7ae72 100644
--- a/cppcache/src/EvictionController.hpp
+++ b/cppcache/src/EvictionController.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_EVICTIONCONTROLLER_H_
-#define GEODE_EVICTIONCONTROLLER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,21 +15,27 @@
  * limitations under the License.
  */
 
-#include <memory>
+#pragma once
+
+#ifndef GEODE_EVICTIONCONTROLLER_H_
+#define GEODE_EVICTIONCONTROLLER_H_
+
+#include <atomic>
+#include <condition_variable>
+#include <mutex>
 #include <string>
+#include <thread>
 #include <vector>
 
-#include <ace/ACE.h>
-#include <ace/OS.h>
-#include <ace/Singleton.h>
-#include <ace/Task.h>
-#include <ace/Thread_Mutex.h>
-
-#include <geode/DataOutput.hpp>
+#include <boost/thread/shared_mutex.hpp>
 
 #include "EvictionThread.hpp"
-#include "IntQueue.hpp"
-#include "util/Log.hpp"
+
+namespace apache {
+namespace geode {
+namespace client {
+
+class CacheImpl;
 
 /**
  * This class ensures that the cache consumes only as much memory as
@@ -61,46 +62,22 @@
  * When a region is destroyed, it deregisters itself with the EvictionController
  * Format of object that is put into the region map (int size, int numEntries)
  */
-namespace apache {
-namespace geode {
-namespace client {
-
-typedef IntQueue<int64_t> HeapSizeInfoQueue;
-typedef std::vector<std::string> VectorOfString;
-
-class EvictionController;
-class EvictionThread;
-class CacheImpl;
-
-class APACHE_GEODE_EXPORT EvictionController : public ACE_Task_Base {
+class EvictionController {
  public:
   EvictionController(size_t maxHeapSize, int32_t heapSizeDelta,
                      CacheImpl* cache);
 
-  ~EvictionController();
+  inline ~EvictionController() noexcept = default;
 
-  inline void start() {
-    m_run = true;
-    evictionThreadPtr->start();
-    this->activate();
-    LOGFINE("Eviction Controller started");
-  }
+  void start();
 
-  inline void stop() {
-    m_run = false;
-    evictionThreadPtr->stop();
-    this->wait();
-    m_regions.clear();
-    m_queue.clear();
+  void stop();
 
-    LOGFINE("Eviction controller stopped");
-  }
-
-  int svc(void);
+  void svc(void);
 
   void updateRegionHeapInfo(int64_t info);
-  void registerRegion(std::string& name);
-  void deregisterRegion(std::string& name);
+  void registerRegion(const std::string& name);
+  void deregisterRegion(const std::string& name);
   void evict(int32_t percentage);
 
  private:
@@ -108,17 +85,21 @@
   void processHeapInfo(int64_t& readInfo, int64_t& pendingEvictions);
 
  private:
-  bool m_run;
+  std::thread m_thread;
+  std::atomic<bool> m_run;
   int64_t m_maxHeapSize;
   int64_t m_heapSizeDelta;
   CacheImpl* m_cacheImpl;
   int64_t m_currentHeapSize;
-  HeapSizeInfoQueue m_queue;
-  VectorOfString m_regions;
-  mutable ACE_RW_Thread_Mutex m_regionLock;
-  EvictionThread* evictionThreadPtr;
+  std::deque<int64_t> m_queue;
+  std::mutex m_queueMutex;
+  std::condition_variable m_queueCondition;
+  std::vector<std::string> m_regions;
+  boost::shared_mutex m_regionLock;
+  EvictionThread m_evictionThread;
   static const char* NC_EC_Thread;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/EvictionThread.cpp b/cppcache/src/EvictionThread.cpp
index b658bf5..fcdc9e7 100644
--- a/cppcache/src/EvictionThread.cpp
+++ b/cppcache/src/EvictionThread.cpp
@@ -14,44 +14,63 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "EvictionThread.hpp"
 
+#include <chrono>
+
 #include "DistributedSystemImpl.hpp"
 #include "EvictionController.hpp"
+#include "util/Log.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
 const char* EvictionThread::NC_Evic_Thread = "NC Evic Thread";
+
 EvictionThread::EvictionThread(EvictionController* parent)
-    : m_pParent(parent),
-      /* adongre
-       * CID 28936: Uninitialized scalar field (UNINIT_CTOR)
-       */
-      m_run(false) {}
+    : m_run(false), m_pParent(parent) {}
 
-int EvictionThread::svc(void) {
+void EvictionThread::start() {
+  m_run = true;
+  m_thread = std::thread(&EvictionThread::svc, this);
+
+  LOGFINE("Eviction Thread started");
+}
+
+void EvictionThread::stop() {
+  m_run = false;
+  m_queueCondition.notify_one();
+  m_thread.join();
+
+  m_queue.clear();
+
+  LOGFINE("Eviction Thread stopped");
+}
+
+void EvictionThread::svc(void) {
   DistributedSystemImpl::setThreadName(NC_Evic_Thread);
+
   while (m_run) {
-    processEvictions();
-  }
-  int32_t size = m_queue.size();
-  for (int i = 0; i < size; i++) {
-    processEvictions();
-  }
-  return 1;
-}
+    std::unique_lock<std::mutex> lock(m_queueMutex);
+    m_queueCondition.wait(lock, [this] { return !m_run || !m_queue.empty(); });
 
-void EvictionThread::processEvictions() {
-  int32_t percentageToEvict = 0;
-  percentageToEvict = static_cast<int32_t>(m_queue.get(1500));
-  if (percentageToEvict != 0) {
-    m_pParent->evict(percentageToEvict);
+    while (!m_queue.empty()) {
+      auto percentageToEvict = m_queue.front();
+      m_queue.pop_front();
+      if (0 != percentageToEvict) {
+        m_pParent->evict(percentageToEvict);
+      }
+    }
   }
 }
 
-void EvictionThread::putEvictionInfo(int32_t info) { m_queue.put(info); }
+void EvictionThread::putEvictionInfo(int32_t info) {
+  std::unique_lock<std::mutex> lock(m_queueMutex);
+  m_queue.push_back(info);
+  m_queueCondition.notify_one();
+}
 
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/EvictionThread.hpp b/cppcache/src/EvictionThread.hpp
index e9fc248..5a13282 100644
--- a/cppcache/src/EvictionThread.hpp
+++ b/cppcache/src/EvictionThread.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_EVICTIONTHREAD_H_
-#define GEODE_EVICTIONTHREAD_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,53 +15,45 @@
  * limitations under the License.
  */
 
-#include <ace/ACE.h>
-#include <ace/OS.h>
-#include <ace/Singleton.h>
-#include <ace/Task.h>
-#include <ace/Thread_Mutex.h>
+#pragma once
 
-#include <geode/DataOutput.hpp>
+#ifndef GEODE_EVICTIONTHREAD_H_
+#define GEODE_EVICTIONTHREAD_H_
 
-#include "IntQueue.hpp"
-#include "util/Log.hpp"
-/**
- * This class does the actual evictions
- */
+#include <atomic>
+#include <condition_variable>
+#include <deque>
+#include <mutex>
+#include <thread>
+
 namespace apache {
 namespace geode {
 namespace client {
-class EvictionController;
-typedef IntQueue<int64_t> HeapSizeInfoQueue;
 
-class APACHE_GEODE_EXPORT EvictionThread : public ACE_Task_Base {
+class EvictionController;
+
+/**
+ * This class does the actual evictions
+ */
+class EvictionThread {
  public:
   explicit EvictionThread(EvictionController* parent);
-
-  inline void start() {
-    m_run = true;
-    this->activate();
-    LOGFINE("Eviction Thread started");
-  }
-
-  inline void stop() {
-    m_run = false;
-    this->wait();
-    m_queue.clear();
-    LOGFINE("Eviction Thread stopped");
-  }
-
-  int svc();
+  void start();
+  void stop();
+  void svc();
   void putEvictionInfo(int32_t info);
-  void processEvictions();
 
  private:
+  std::thread m_thread;
+  std::atomic<bool> m_run;
   EvictionController* m_pParent;
-  HeapSizeInfoQueue m_queue;
-  bool m_run;
+  std::deque<int32_t> m_queue;
+  std::mutex m_queueMutex;
+  std::condition_variable m_queueCondition;
 
   static const char* NC_Evic_Thread;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/Exception.cpp b/cppcache/src/Exception.cpp
index 132eb28..8f984de 100644
--- a/cppcache/src/Exception.cpp
+++ b/cppcache/src/Exception.cpp
@@ -17,8 +17,6 @@
 
 #include <cstdlib>
 
-#include <ace/OS.h>
-#include <ace/TSS_T.h>
 #include <boost/core/demangle.hpp>
 
 #include <geode/CacheableString.hpp>
@@ -55,30 +53,17 @@
 
 // class to store/clear last server exception in TSS area
 
-class TSSExceptionString {
- private:
-  std::string m_exMsg;
+thread_local std::string threadLocalExceptionMessage;
 
- public:
-  TSSExceptionString() : m_exMsg() {}
-  virtual ~TSSExceptionString() {}
-
-  inline std::string& str() { return m_exMsg; }
-
-  static ACE_TSS<TSSExceptionString> s_tssExceptionMsg;
-};
-
-ACE_TSS<TSSExceptionString> TSSExceptionString::s_tssExceptionMsg;
-
-void setTSSExceptionMessage(const char* exMsg) {
-  TSSExceptionString::s_tssExceptionMsg->str().clear();
+void setThreadLocalExceptionMessage(const char* exMsg) {
+  threadLocalExceptionMessage.clear();
   if (exMsg != nullptr) {
-    TSSExceptionString::s_tssExceptionMsg->str().append(exMsg);
+    threadLocalExceptionMessage.assign(exMsg);
   }
 }
 
-const char* getTSSExceptionMessage() {
-  return TSSExceptionString::s_tssExceptionMsg->str().c_str();
+const std::string& getThreadLocalExceptionMessage() {
+  return threadLocalExceptionMessage;
 }
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/ExceptionTypes.cpp b/cppcache/src/ExceptionTypes.cpp
index ea5af09..366d189 100644
--- a/cppcache/src/ExceptionTypes.cpp
+++ b/cppcache/src/ExceptionTypes.cpp
@@ -30,335 +30,328 @@
 namespace geode {
 namespace client {
 
-void setTSSExceptionMessage(const char* exMsg);
-const char* getTSSExceptionMessage();
+void setThreadLocalExceptionMessage(const char* exMsg);
+const std::string& getThreadLocalExceptionMessage();
 
 [[noreturn]] void GfErrTypeThrowException(const char* str, GfErrType err) {
   std::string func;
   std::string message;
-  const char* exMsg = getTSSExceptionMessage();
-  if (exMsg != nullptr && exMsg[0] == '\0') {
-    exMsg = nullptr;
-  } else {
+  const auto& exMsg = getThreadLocalExceptionMessage();
+  if (!exMsg.empty()) {
     func.append(str);
     func.append(": ");
-    str = func.c_str();
   }
   switch (err) {
     case GF_NOTCON: {
-      message.append(exMsg != nullptr ? exMsg : ": not connected to Geode");
+      message.append(!exMsg.empty() ? exMsg : ": not connected to Geode");
       NotConnectedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_MSG: {
-      message.append(exMsg != nullptr
+      message.append(!exMsg.empty()
                          ? exMsg
                          : ": message from server could not be handled");
 
       MessageException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHESERVER_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg
-                                      : ": exception happened at cache server");
+      message.append(!exMsg.empty() ? exMsg
+                                    : ": exception happened at cache server");
       CacheServerException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_NOTOWN: {
-      message.append(exMsg != nullptr ? exMsg : ": not own the lock");
+      message.append(!exMsg.empty() ? exMsg : ": not own the lock");
       NotOwnerException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_NOT_FOUND: {
-      message.append(exMsg != nullptr ? exMsg : ": region not found on server");
+      message.append(!exMsg.empty() ? exMsg : ": region not found on server");
       CacheServerException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_NOT_GLOBAL: {
-      message.append(exMsg != nullptr ? exMsg : ": region not global");
+      message.append(!exMsg.empty() ? exMsg : ": region not global");
       IllegalStateException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_ILLEGAL_ARGUMENT_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": illegal argument");
+      message.append(!exMsg.empty() ? exMsg : ": illegal argument");
       IllegalArgumentException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_ILLEGAL_STATE_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": illegal State");
+      message.append(!exMsg.empty() ? exMsg : ": illegal State");
       IllegalStateException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_WRITER_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg
-                                      : ": exception on server during write");
+      message.append(!exMsg.empty() ? exMsg
+                                    : ": exception on server during write");
       CacheWriterException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHEWRITER_ERROR: {
-      message.append(exMsg != nullptr ? exMsg : ": exception in CacheWriter");
+      message.append(!exMsg.empty() ? exMsg : ": exception in CacheWriter");
       CacheWriterException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_LOADER_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": exception in CacheLoader");
+      message.append(!exMsg.empty() ? exMsg : ": exception in CacheLoader");
       CacheLoaderException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_LISTENER_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": exception in CacheListener");
+      message.append(!exMsg.empty() ? exMsg : ": exception in CacheListener");
       CacheListenerException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_INVALID: {
-      message.append(exMsg != nullptr ? exMsg : ": region not valid");
+      message.append(!exMsg.empty() ? exMsg : ": region not valid");
       RegionDestroyedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_PROXY: {
-      message.append(exMsg != nullptr ? exMsg : ": error in Cache proxy");
+      message.append(!exMsg.empty() ? exMsg : ": error in Cache proxy");
       CacheProxyException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_IOERR: {
-      message.append(exMsg != nullptr ? exMsg
-                                      : ": Input/Output error in operation");
+      message.append(!exMsg.empty() ? exMsg
+                                    : ": Input/Output error in operation");
       GeodeIOException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_ENOENT: {
-      message.append(exMsg != nullptr ? exMsg : ": entity does not exist");
+      message.append(!exMsg.empty() ? exMsg : ": entity does not exist");
       NoSystemException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_KEYS_NOT_STRINGS: {
-      message.append(exMsg != nullptr
-                         ? exMsg
-                         : ": region entries do not support C access");
+      message.append(
+          !exMsg.empty() ? exMsg : ": region entries do not support C access");
       IllegalArgumentException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_ENTRY_NOT_BYTES: {
-      message.append(exMsg != nullptr
+      message.append(!exMsg.empty()
                          ? exMsg
                          : ": existing non-null values was not a byte array");
       IllegalArgumentException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_TIMEOUT_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": timed out");
+      message.append(!exMsg.empty() ? exMsg : ": timed out");
       TimeoutException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_TIMOUT: {
-      message.append(exMsg != nullptr ? exMsg : ": timed out");
+      message.append(!exMsg.empty() ? exMsg : ": timed out");
       TimeoutException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CLIENT_WAIT_TIMEOUT: {
-      message.append(exMsg != nullptr
+      message.append(!exMsg.empty()
                          ? exMsg
                          : ": timed out, possibly bucket is not available.");
       TimeoutException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_ENOMEM: {
-      message.append(exMsg != nullptr ? exMsg : ": Out of memory");
+      message.append(!exMsg.empty() ? exMsg : ": Out of memory");
       OutOfMemoryException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_ERANGE: {
-      message.append(exMsg != nullptr ? exMsg : ": Buffer Size Exceeded");
+      message.append(!exMsg.empty() ? exMsg : ": Buffer Size Exceeded");
       BufferSizeExceededException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_LEASE_EXPIRED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": lock Lease Expired On you");
+      message.append(!exMsg.empty() ? exMsg : ": lock Lease Expired On you");
       LeaseExpiredException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_EXISTS_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Named Region Exists");
+      message.append(!exMsg.empty() ? exMsg : ": Named Region Exists");
       RegionExistsException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_ENTRY_NOT_FOUND: {
-      message.append(exMsg != nullptr ? exMsg : ": Entry not found");
+      message.append(!exMsg.empty() ? exMsg : ": Entry not found");
       EntryNotFoundException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_ENTRY_EXISTS: {
-      message.append(exMsg != nullptr ? exMsg
-                                      : ": Entry already exists in the region");
+      message.append(!exMsg.empty() ? exMsg
+                                    : ": Entry already exists in the region");
       EntryExistsException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_ENTRY_DESTROYED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Entry has been destroyed");
+      message.append(!exMsg.empty() ? exMsg : ": Entry has been destroyed");
       EntryDestroyedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_REGION_DESTROYED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Named Region Destroyed");
+      message.append(!exMsg.empty() ? exMsg : ": Named Region Destroyed");
       RegionDestroyedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_CLOSED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Cache has been closed");
+      message.append(!exMsg.empty() ? exMsg : ": Cache has been closed");
       CacheClosedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_STATISTICS_DISABLED_EXCEPTION: {
-      message.append(exMsg != nullptr
+      message.append(!exMsg.empty()
                          ? exMsg
                          : ": Statistics have been disabled for the region");
       StatisticsDisabledException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_CONCURRENT_MODIFICATION_EXCEPTION: {
-      message.append(
-          exMsg != nullptr ? exMsg : ": Concurrent modification in the cache");
+      message.append(!exMsg.empty() ? exMsg
+                                    : ": Concurrent modification in the cache");
       ConcurrentModificationException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_NOT_AUTHORIZED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": unauthorized operation");
+      message.append(!exMsg.empty() ? exMsg : ": unauthorized operation");
       NotAuthorizedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_AUTHENTICATION_FAILED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": authentication failed");
+      message.append(!exMsg.empty() ? exMsg : ": authentication failed");
       AuthenticationFailedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_AUTHENTICATION_REQUIRED_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": no authentication provided");
+      message.append(!exMsg.empty() ? exMsg : ": no authentication provided");
       AuthenticationRequiredException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_DUPLICATE_DURABLE_CLIENT: {
-      message.append(exMsg != nullptr ? exMsg
-                                      : ": Duplicate Durable Client Id");
+      message.append(!exMsg.empty() ? exMsg : ": Duplicate Durable Client Id");
       DuplicateDurableClientException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_REMOTE_QUERY_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Query failed");
+      message.append(!exMsg.empty() ? exMsg : ": Query failed");
       QueryException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_CACHE_LOCATOR_EXCEPTION: {
       NoAvailableLocatorsException cause(
-          std::string(str) +
-          (exMsg != nullptr ? exMsg : ": No locators available"));
-      setTSSExceptionMessage(nullptr);
+          func + (!exMsg.empty() ? exMsg : ": No locators available"));
+      setThreadLocalExceptionMessage(nullptr);
       try {
         throw cause;
       } catch (...) {
         NotConnectedException ex(
-            std::string(str) +
-            (exMsg != nullptr ? exMsg : ": No locators available"));
+            func + (!exMsg.empty() ? exMsg : ": No locators available"));
         std::throw_with_nested(ex);
       }
     }
     case GF_ALL_CONNECTIONS_IN_USE_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": All connections are in use");
+      message.append(!exMsg.empty() ? exMsg : ": All connections are in use");
       AllConnectionsInUseException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_FUNCTION_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Function execution failed");
+      message.append(!exMsg.empty() ? exMsg : ": Function execution failed");
       FunctionExecutionException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_DISKFULL: {
-      message.append(exMsg != nullptr ? exMsg : ": Disk full");
+      message.append(!exMsg.empty() ? exMsg : ": Disk full");
       DiskFailureException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_ROLLBACK_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Transaction rolled back");
+      message.append(!exMsg.empty() ? exMsg : ": Transaction rolled back");
       RollbackException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_COMMIT_CONFLICT_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": Commit conflict exception");
+      message.append(!exMsg.empty() ? exMsg : ": Commit conflict exception");
       CommitConflictException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_TRANSACTION_DATA_REBALANCED_EXCEPTION: {
       message.append(
-          exMsg != nullptr ? exMsg : ": Transaction data rebalanced exception");
+          !exMsg.empty() ? exMsg : ": Transaction data rebalanced exception");
       TransactionDataRebalancedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_TRANSACTION_DATA_NODE_HAS_DEPARTED_EXCEPTION: {
-      message.append(exMsg != nullptr
+      message.append(!exMsg.empty()
                          ? exMsg
                          : ": Transaction data node has departed exception");
       TransactionDataNodeHasDepartedException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     case GF_PUTALL_PARTIAL_RESULT_EXCEPTION: {
-      message.append(exMsg != nullptr ? exMsg : ": PutAll Partial exception");
+      message.append(!exMsg.empty() ? exMsg : ": PutAll Partial exception");
       PutAllPartialResultException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
     default: {
-      char buf[64];
       LOGINFO("error code: %d", err);
-      if (exMsg == nullptr) {
-        ACE_OS::snprintf(buf, 64, "Unknown error code[0x%X]", err);
-        exMsg = buf;
+      std::string message = func;
+      if (exMsg.empty()) {
+        message.append("Unknown error code ").append(std::to_string(err));
+      } else {
+        message.append(exMsg);
       }
-      std::string message = std::string(str) + exMsg;
       UnknownException ex(message);
-      setTSSExceptionMessage(nullptr);
+      setThreadLocalExceptionMessage(nullptr);
       throw ex;
     }
   }
diff --git a/cppcache/src/ExecutionImpl.cpp b/cppcache/src/ExecutionImpl.cpp
index f8d73b8..bf5dc11 100644
--- a/cppcache/src/ExecutionImpl.cpp
+++ b/cppcache/src/ExecutionImpl.cpp
@@ -24,6 +24,7 @@
 #include <geode/internal/geode_globals.hpp>
 
 #include "NoResult.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "ThinClientRegion.hpp"
 #include "UserAttributes.hpp"
@@ -34,10 +35,9 @@
 namespace client {
 
 FunctionToFunctionAttributes ExecutionImpl::m_func_attrs;
-ACE_Recursive_Thread_Mutex ExecutionImpl::m_func_attrs_lock;
+std::recursive_mutex ExecutionImpl::m_func_attrs_lock;
 Execution ExecutionImpl::withFilter(
     std::shared_ptr<CacheableVector> routingObj) {
-  // ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_lock);
   if (routingObj == nullptr) {
     throw IllegalArgumentException("Execution::withFilter: filter is null");
   }
@@ -53,7 +53,6 @@
 }
 
 Execution ExecutionImpl::withArgs(std::shared_ptr<Cacheable> args) {
-  // ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_lock);
   if (args == nullptr) {
     throw IllegalArgumentException("Execution::withArgs: args is null");
   }
@@ -64,7 +63,6 @@
 }
 
 Execution ExecutionImpl::withCollector(std::shared_ptr<ResultCollector> rs) {
-  // ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_lock);
   if (rs == nullptr) {
     throw IllegalArgumentException(
         "Execution::withCollector: collector is null");
@@ -110,7 +108,7 @@
   auto&& attr = getFunctionAttributes(func);
   {
     if (attr == nullptr) {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_func_attrs_lock);
+      std::lock_guard<decltype(m_func_attrs_lock)> _guard(m_func_attrs_lock);
       GfErrType err = GF_NOERR;
       attr = getFunctionAttributes(func);
       if (attr == nullptr) {
@@ -134,9 +132,8 @@
   serverOptimizeForWrite = ((attr->at(2) == 1) ? true : false);
 
   LOGDEBUG(
-      "ExecutionImpl::execute got functionAttributes from srver for function = "
-      "%s serverHasResult = %d "
-      " serverIsHA = %d serverOptimizeForWrite = %d ",
+      "ExecutionImpl::execute got functionAttributes from server for function "
+      "= %s serverHasResult = %d serverIsHA = %d serverOptimizeForWrite = %d ",
       func.c_str(), serverHasResult, serverIsHA, serverOptimizeForWrite);
 
   if (serverHasResult == false) {
@@ -160,7 +157,7 @@
 
   LOGDEBUG("ExecutionImpl::execute: isHAHasResultOptimizeForWrite = %d",
            isHAHasResultOptimizeForWrite);
-  TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  TXState* txState = TSSTXStateWrapper::get().getTXState();
 
   if (txState != nullptr && m_allServer == true) {
     throw UnsupportedOperationException(
@@ -395,10 +392,15 @@
                                         reply.getException());
       break;
     }
+    case TcrMessage::REQUEST_DATA_ERROR: {
+      LOGERROR("Error message from server: " + reply.getValue()->toString());
+      throw FunctionExecutionException(reply.getValue()->toString());
+    }
     default: {
       LOGERROR("Unknown message type %d while getting function attributes.",
                reply.getMessageType());
       err = GF_MSG;
+      break;
     }
   }
   return err;
diff --git a/cppcache/src/ExecutionImpl.hpp b/cppcache/src/ExecutionImpl.hpp
index f763632..f7b89ac 100644
--- a/cppcache/src/ExecutionImpl.hpp
+++ b/cppcache/src/ExecutionImpl.hpp
@@ -21,9 +21,7 @@
 #define GEODE_EXECUTIONIMPL_H_
 
 #include <map>
-
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
+#include <mutex>
 
 #include <geode/AuthenticatedView.hpp>
 #include <geode/CacheableBuiltins.hpp>
@@ -102,7 +100,6 @@
         m_allServer(allServer),
         m_pool(pool),
         m_authenticatedView(authenticatedView) {}
-  // ACE_Recursive_Thread_Mutex m_lock;
   std::shared_ptr<CacheableVector> m_routingObj;
   std::shared_ptr<Cacheable> m_args;
   std::shared_ptr<ResultCollector> m_rc;
@@ -110,7 +107,7 @@
   bool m_allServer;
   std::shared_ptr<Pool> m_pool;
   AuthenticatedView* m_authenticatedView;
-  static ACE_Recursive_Thread_Mutex m_func_attrs_lock;
+  static std::recursive_mutex m_func_attrs_lock;
   static FunctionToFunctionAttributes m_func_attrs;
   //  std::vector<int8_t> m_attributes;
 
diff --git a/cppcache/src/ExpiryHandler_T.hpp b/cppcache/src/ExpiryHandler_T.hpp
index f83bafb..1157cf5 100644
--- a/cppcache/src/ExpiryHandler_T.hpp
+++ b/cppcache/src/ExpiryHandler_T.hpp
@@ -25,8 +25,9 @@
  *@version 1.0
  */
 
+#include <ace/Event_Handler.h>
+
 #include "StackTrace.hpp"
-#include "ace/Event_Handler.h"
 #include "util/Log.hpp"
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/ExpiryTaskManager.cpp b/cppcache/src/ExpiryTaskManager.cpp
index 1c741a4..f5348ac 100644
--- a/cppcache/src/ExpiryTaskManager.cpp
+++ b/cppcache/src/ExpiryTaskManager.cpp
@@ -51,31 +51,6 @@
   timer.release();
 }
 
-ExpiryTaskManager::id_type ExpiryTaskManager::scheduleExpiryTask(
-    ACE_Event_Handler* handler, uint32_t expTime, uint32_t interval,
-    bool cancelExistingTask) {
-  LOGFINER("ExpiryTaskManager: expTime %d, interval %d, cancelExistingTask %d",
-           expTime, interval, cancelExistingTask);
-  if (cancelExistingTask) {
-    m_reactor->cancel_timer(handler, 1);
-  }
-
-  ACE_Time_Value expTimeValue(expTime);
-  ACE_Time_Value intervalValue(interval);
-  return m_reactor->schedule_timer(handler, nullptr, expTimeValue,
-                                   intervalValue);
-}
-
-ExpiryTaskManager::id_type ExpiryTaskManager::scheduleExpiryTask(
-    ACE_Event_Handler* handler, ACE_Time_Value expTimeValue,
-    ACE_Time_Value intervalVal, bool cancelExistingTask) {
-  if (cancelExistingTask) {
-    m_reactor->cancel_timer(handler, 1);
-  }
-
-  return m_reactor->schedule_timer(handler, nullptr, expTimeValue, intervalVal);
-}
-
 int ExpiryTaskManager::resetTask(ExpiryTaskManager::id_type id, uint32_t sec) {
   ACE_Time_Value interval(sec);
   return m_reactor->reset_timer_interval(id, interval);
@@ -88,7 +63,11 @@
 int ExpiryTaskManager::svc() {
   DistributedSystemImpl::setThreadName(NC_ETM_Thread);
   LOGFINE("ExpiryTaskManager thread is running.");
-  m_reactorEventLoopRunning = true;
+  {
+    std::unique_lock<std::mutex> lock(m_mutex);
+    m_reactorEventLoopRunning = true;
+    m_condition.notify_all();
+  }
   m_reactor->owner(ACE_OS::thr_self());
   m_reactor->run_reactor_event_loop();
   LOGFINE("ExpiryTaskManager thread has stopped.");
@@ -96,21 +75,21 @@
 }
 
 void ExpiryTaskManager::stopExpiryTaskManager() {
+  std::unique_lock<std::mutex> lock(m_mutex);
+
   if (m_reactorEventLoopRunning) {
     m_reactor->end_reactor_event_loop();
     this->wait();
     GF_D_ASSERT(m_reactor->reactor_event_loop_done() > 0);
     m_reactorEventLoopRunning = false;
+    m_condition.notify_all();
   }
 }
 
 void ExpiryTaskManager::begin() {
   this->activate();
-  ACE_Time_Value t;
-  t.msec(50);
-  while (!m_reactorEventLoopRunning) {
-    ACE_OS::sleep(t);
-  }
+  std::unique_lock<std::mutex> lock(m_mutex);
+  m_condition.wait(lock, [this] { return m_reactorEventLoopRunning; });
 }
 
 ExpiryTaskManager::~ExpiryTaskManager() {
diff --git a/cppcache/src/ExpiryTaskManager.hpp b/cppcache/src/ExpiryTaskManager.hpp
index 8b8aa06..769ce82 100644
--- a/cppcache/src/ExpiryTaskManager.hpp
+++ b/cppcache/src/ExpiryTaskManager.hpp
@@ -21,6 +21,8 @@
 #define GEODE_EXPIRYTASKMANAGER_H_
 
 #include <chrono>
+#include <condition_variable>
+#include <mutex>
 #include <type_traits>
 
 #include <ace/Reactor.h>
@@ -33,16 +35,10 @@
 #include "ReadWriteLock.hpp"
 #include "util/Log.hpp"
 
-/**
- * @file ExpiryTaskManager.hpp
- */
-
 namespace apache {
 namespace geode {
 namespace client {
 
-using ::apache::geode::internal::chrono::duration::to_string;
-
 /**
  * @class ExpiryTaskManager ExpiryTaskManager.hpp
  *
@@ -228,28 +224,24 @@
    * Constructor
    */
   ExpiryTaskManager();
+
   /**
    * Destructor. Stops the reactors event loop if it is not running
    * and then exits.
    */
   ~ExpiryTaskManager();
+
   /**
    * For scheduling a task for expiration.
    */
-  ExpiryTaskManager::id_type scheduleExpiryTask(
-      ACE_Event_Handler* handler, uint32_t expTime, uint32_t interval = 0,
-      bool cancelExistingTask = false);
-
-  ExpiryTaskManager::id_type scheduleExpiryTask(
-      ACE_Event_Handler* handler, ACE_Time_Value expTimeValue,
-      ACE_Time_Value intervalVal, bool cancelExistingTask = false);
-
   template <class ExpRep, class ExpPeriod, class IntRep, class IntPeriod>
   ExpiryTaskManager::id_type scheduleExpiryTask(
       ACE_Event_Handler* handler,
       std::chrono::duration<ExpRep, ExpPeriod> expTime,
       std::chrono::duration<IntRep, IntPeriod> interval,
       bool cancelExistingTask = false) {
+    using ::apache::geode::internal::chrono::duration::to_string;
+
     LOGFINER(
         "ExpiryTaskManager: expTime %s, interval %s, cancelExistingTask %d",
         to_string(expTime).c_str(), to_string(interval).c_str(),
@@ -260,7 +252,7 @@
 
     ACE_Time_Value expTimeValue(expTime);
     ACE_Time_Value intervalValue(interval);
-    LOGFINER("Scheduled expiration ... in %d seconds.", expTime.count());
+    LOGFINER("Scheduled expiration ... in " + to_string(expTime));
     return m_reactor->schedule_timer(handler, nullptr, expTimeValue,
                                      intervalValue);
   }
@@ -286,12 +278,14 @@
    * id - the id assigned to the expiry task initially.
    */
   int cancelTask(id_type id);
+
   /**
    * A separate thread is started in which the reactor event loop
    * is kept running unless explicitly stopped or when this object
    * goes out of scope.
    */
   int svc();
+
   /**
    * For explicitly stopping the reactor's event loop.
    */
@@ -305,9 +299,10 @@
 
   bool m_reactorEventLoopRunning;  // flag to indicate if the reactor event
                                    // loop is running or not.
-  ACE_Recursive_Thread_Mutex m_taskLock;  // to synchronize scheduling
-                                          // of expiry tasks.
   static const char* NC_ETM_Thread;
+
+  std::mutex m_mutex;
+  std::condition_variable m_condition;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/IntQueue.hpp b/cppcache/src/IntQueue.hpp
deleted file mode 100644
index 4b518c9..0000000
--- a/cppcache/src/IntQueue.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-#pragma once
-
-#ifndef GEODE_INTQUEUE_H_
-#define GEODE_INTQUEUE_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <deque>
-
-#include <ace/ACE.h>
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
-
-namespace apache {
-namespace geode {
-namespace client {
-
-template <class T>
-
-class APACHE_GEODE_EXPORT IntQueue {
- public:
-  IntQueue() : m_cond(m_mutex) {}
-
-  ~IntQueue() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    while (m_queue.size() > 0) {
-      m_queue.pop_back();
-    }
-  }
-
-  /** wait usec time until notified */
-  T get(int64_t usec) {
-    ACE_Time_Value interval(usec / 1000000, usec % 1000000);
-    return getUntil(interval);
-  }
-
-  T get() {
-    T mp = 0;
-
-    getInternal(mp);
-    return mp;
-  }
-
-  void put(T mp) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-    m_queue.push_front(mp);
-    m_cond.signal();
-  }
-
-  uint32_t size() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-    return static_cast<uint32_t>(m_queue.size());
-  }
-
-  void clear() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-    m_queue.clear();
-    m_cond.signal();
-  }
-
-  bool empty() { return size() == 0; }
-
- private:
-  inline bool getInternal(T& val) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    if (m_queue.size() > 0) {
-      val = m_queue.back();
-      m_queue.pop_back();
-      return true;
-    }
-
-    return false;
-  }
-
-  T getUntil(const ACE_Time_Value& interval) {
-    T mp = 0;
-    bool found = getInternal(mp);
-
-    if (!found) {
-      ACE_Time_Value stopAt(ACE_OS::gettimeofday());
-      stopAt += interval;
-
-      while (!found && ACE_OS::gettimeofday() < stopAt) {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-        m_cond.wait(&stopAt);
-        if (m_queue.size() > 0) {
-          mp = m_queue.back();
-          m_queue.pop_back();
-          found = true;
-        }
-      }
-    }
-    return mp;
-  }
-
-  typedef std::deque<T> LocalQueue;
-  LocalQueue m_queue;
-  ACE_Recursive_Thread_Mutex m_mutex;
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_cond;
-};
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_INTQUEUE_H_
diff --git a/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp b/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
index dd71ccf..9f4acb4 100644
--- a/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
+++ b/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
@@ -24,6 +24,7 @@
 #include "CacheRegionHelper.hpp"
 #include "CacheTransactionManagerImpl.hpp"
 #include "TXCleaner.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "util/exception.hpp"
@@ -41,9 +42,7 @@
 
 void InternalCacheTransactionManager2PCImpl::prepare() {
   try {
-    auto& txStateWrapper = TSSTXStateWrapper::s_geodeTSSTXState;
-    auto txState = txStateWrapper->getTXState();
-
+    auto txState = TSSTXStateWrapper::get().getTXState();
     if (!txState) {
       GfErrTypeThrowException(
           "Transaction is null, cannot prepare of a null transaction",
@@ -118,7 +117,7 @@
 
 void InternalCacheTransactionManager2PCImpl::afterCompletion(int32_t status) {
   try {
-    auto txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    auto txState = TSSTXStateWrapper::get().getTXState();
 
     if (!txState) {
       GfErrTypeThrowException(
diff --git a/cppcache/src/LRUEntriesMap.cpp b/cppcache/src/LRUEntriesMap.cpp
index bd8f3de..394f5fe 100644
--- a/cppcache/src/LRUEntriesMap.cpp
+++ b/cppcache/src/LRUEntriesMap.cpp
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "LRUEntriesMap.hpp"
 
 #include <mutex>
 
 #include "CacheImpl.hpp"
+#include "EvictionController.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "LRUList.cpp"
 #include "MapSegment.hpp"
@@ -27,6 +29,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 /**
  * @brief LRUAction for testing map outside of a region....
  */
@@ -164,7 +167,6 @@
 
 GfErrType LRUEntriesMap::evictionHelper() {
   GfErrType err = GF_NOERR;
-  //  ACE_Guard< ACE_Recursive_Thread_Mutex > guard( m_mutex );
   std::shared_ptr<MapEntryImpl> lruEntryPtr;
   m_lruList.getLRUEntry(lruEntryPtr);
   if (lruEntryPtr == nullptr) {
@@ -218,7 +220,7 @@
   // later value
   // TODO: assess any other effects of this race
   if (CacheableToken::isOverflowed(oldValue)) {
-    ACE_Guard<MapSegment> _guard(*segmentRPtr);
+    std::lock_guard<MapSegment> _guard(*segmentRPtr);
     auto&& persistenceInfo = me->getLRUProperties().getPersistenceInfo();
     //  get the old value first which is required for heapLRU
     // calculation and for listeners; note even though there is a race
@@ -265,14 +267,14 @@
   {
     if (m_action != nullptr &&
         m_action->getType() == LRUAction::OVERFLOW_TO_DISK) {
-      segmentRPtr->acquire();
+      segmentRPtr->lock();
       segmentLocked = true;
     }
     std::shared_ptr<MapEntryImpl> mePtr;
     if ((err = segmentRPtr->put(key, newValue, me, oldValue, updateCount,
                                 destroyTracker, isUpdate, versionTag, delta)) !=
         GF_NOERR) {
-      if (segmentLocked == true) segmentRPtr->release();
+      if (segmentLocked == true) segmentRPtr->unlock();
       return err;
     }
 
@@ -292,7 +294,7 @@
     // unless very careful thought has gone into it.
     if (CacheableToken::isOverflowed(oldValue)) {
       if (!segmentLocked) {
-        segmentRPtr->release();
+        segmentRPtr->unlock();
         segmentLocked = true;
       }
       auto&& persistenceInfo = me->getLRUProperties().getPersistenceInfo();
@@ -360,7 +362,7 @@
   err = processLRU();
 
   if (segmentLocked) {
-    segmentRPtr->release();
+    segmentRPtr->unlock();
   }
   return err;
 }
@@ -378,14 +380,14 @@
   bool segmentLocked = false;
   if (m_action != nullptr &&
       m_action->getType() == LRUAction::OVERFLOW_TO_DISK) {
-    segmentRPtr->acquire();
+    segmentRPtr->lock();
     segmentLocked = true;
   }
   {
     returnPtr = nullptr;
     std::shared_ptr<MapEntryImpl> mePtr;
     if (false == segmentRPtr->getEntry(key, mePtr, returnPtr)) {
-      if (segmentLocked == true) segmentRPtr->release();
+      if (segmentLocked == true) segmentRPtr->unlock();
       return false;
     }
     // segmentRPtr->get(key, returnPtr, mePtr);
@@ -398,7 +400,7 @@
         tmpObj = m_pmPtr->read(key, persistenceInfo);
       } catch (Exception& ex) {
         LOGERROR("read on the persistence layer failed - %s", ex.what());
-        if (segmentLocked == true) segmentRPtr->release();
+        if (segmentLocked == true) segmentRPtr->unlock();
         return false;
       }
       m_region->getRegionStats()->incRetrieves();
@@ -435,13 +437,13 @@
       GfErrType IsProcessLru = processLRU();
       if ((IsProcessLru != GF_NOERR)) {
         if (segmentLocked) {
-          segmentRPtr->release();
+          segmentRPtr->unlock();
         }
         return false;
       }
     }
     if (segmentLocked) {
-      segmentRPtr->release();
+      segmentRPtr->unlock();
     }
     return true;
   }
@@ -467,7 +469,7 @@
         --m_validEntries;
       }
       if (CacheableToken::isOverflowed(result)) {
-        ACE_Guard<MapSegment> _guard(*segmentRPtr);
+        std::lock_guard<MapSegment> _guard(*segmentRPtr);
         auto&& persistenceInfo = lruProps.getPersistenceInfo();
         //  get the old value first which is required for heapLRU
         // calculation and for listeners; note even though there is a race
diff --git a/cppcache/src/LocalRegion.cpp b/cppcache/src/LocalRegion.cpp
index 8b37f64..f3b28dd 100644
--- a/cppcache/src/LocalRegion.cpp
+++ b/cppcache/src/LocalRegion.cpp
@@ -33,6 +33,7 @@
 #include "RegionGlobalLocks.hpp"
 #include "SerializableHelper.hpp"
 #include "TXState.hpp"
+#include "TcrConnectionManager.hpp"
 #include "Utils.hpp"
 #include "VersionTag.hpp"
 #include "util/Log.hpp"
@@ -195,6 +196,16 @@
     m_entries->reapTombstones(tombstoneKeys);
   }
 }
+
+std::shared_ptr<Region> LocalRegion::findSubRegion(const std::string& name) {
+  auto&& lock = m_subRegions.make_lock<std::lock_guard>();
+  const auto& find = m_subRegions.find(name);
+  if (find != m_subRegions.end()) {
+    return find->second;
+  }
+  return nullptr;
+}
+
 std::shared_ptr<Region> LocalRegion::getSubregion(const std::string& path) {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::getSubregion);
 
@@ -203,25 +214,28 @@
     LOGERROR("Get subregion path [" + path + "] is not valid.");
     throw IllegalArgumentException("Get subegion path is empty or a /");
   }
+
   auto fullname = path;
   if (fullname.substr(0, 1) == slash) {
     fullname = path.substr(1);
   }
+
   // find second separator
-  size_t idx = fullname.find('/');
+  auto idx = fullname.find('/');
   auto stepname = fullname.substr(0, idx);
 
-  std::shared_ptr<Region> region, rptr;
-  if (0 == m_subRegions.find(stepname, region)) {
+  auto region = findSubRegion(stepname);
+  if (region) {
     if (stepname == fullname) {
       // done...
-      rptr = region;
+      return region;
     } else {
       std::string remainder = fullname.substr(stepname.length() + 1);
-      rptr = region->getSubregion(remainder.c_str());
+      return region->getSubregion(remainder);
     }
   }
-  return rptr;
+
+  return nullptr;
 }
 
 std::shared_ptr<Region> LocalRegion::createSubregion(
@@ -235,9 +249,9 @@
     }
   }
 
-  MapOfRegionGuard guard1(m_subRegions.mutex());
+  auto&& lock = m_subRegions.make_lock();
   std::shared_ptr<Region> region_ptr;
-  if (0 == m_subRegions.find(subregionName, region_ptr)) {
+  if (m_subRegions.find(subregionName) != m_subRegions.end()) {
     throw RegionExistsException(
         "LocalRegion::createSubregion: named region exists in the region");
   }
@@ -265,7 +279,7 @@
   }
 
   rPtr->acquireReadLock();
-  m_subRegions.bind(rPtr->getName(), std::shared_ptr<Region>(rPtr));
+  m_subRegions.emplace(rPtr->getName(), rPtr);
 
   // schedule the sub region expiry if regionExpiry enabled.
   rPtr->setRegionExpiryTask();
@@ -276,7 +290,7 @@
 std::vector<std::shared_ptr<Region>> LocalRegion::subregions(
     const bool recursive) {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::subregions);
-  if (m_subRegions.current_size() == 0) {
+  if (m_subRegions.empty()) {
     return std::vector<std::shared_ptr<Region>>();
   }
 
@@ -789,16 +803,16 @@
 
 std::vector<std::shared_ptr<Region>> LocalRegion::subregions_internal(
     const bool recursive) {
-  MapOfRegionGuard guard(m_subRegions.mutex());
+  auto&& lock = m_subRegions.make_lock();
 
   std::vector<std::shared_ptr<Region>> regions;
-  regions.reserve(m_subRegions.current_size());
+  regions.reserve(m_subRegions.size());
 
-  for (const auto& entry : m_subRegions) {
-    const auto& subRegion = entry.int_id_;
+  for (const auto& kv : m_subRegions) {
+    const auto& subRegion = kv.second;
     regions.push_back(subRegion);
 
-    if (recursive == true) {
+    if (recursive) {
       if (auto localRegion =
               std::dynamic_pointer_cast<LocalRegion>(subRegion)) {
         auto subRegions = localRegion->subregions_internal(true);
@@ -1064,7 +1078,7 @@
   TXState* m_txState;
 
   inline explicit PutActions(LocalRegion& region) : m_region(region) {
-    m_txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    m_txState = TSSTXStateWrapper::get().getTXState();
   }
 
   inline static const char* name() { return "Region::put"; }
@@ -1151,7 +1165,7 @@
   TXState* m_txState;
 
   inline explicit CreateActions(LocalRegion& region) : m_region(region) {
-    m_txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    m_txState = TSSTXStateWrapper::get().getTXState();
   }
 
   inline static const char* name() { return "Region::create"; }
@@ -1214,7 +1228,7 @@
   TXState* m_txState;
 
   inline explicit DestroyActions(LocalRegion& region) : m_region(region) {
-    m_txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    m_txState = TSSTXStateWrapper::get().getTXState();
   }
 
   inline static const char* name() { return "Region::destroy"; }
@@ -1329,7 +1343,7 @@
 
   inline explicit RemoveActions(LocalRegion& region)
       : m_region(region), m_ServerResponse(GF_ENOENT) {
-    m_txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    m_txState = TSSTXStateWrapper::get().getTXState();
     allowNULLValue = false;
   }
 
@@ -1536,7 +1550,7 @@
   TXState* m_txState;
 
   inline explicit InvalidateActions(LocalRegion& region) : m_region(region) {
-    m_txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    m_txState = TSSTXStateWrapper::get().getTXState();
   }
 
   inline static const char* name() { return "Region::invalidate"; }
@@ -2246,6 +2260,23 @@
   return err;
 }
 
+GfErrType LocalRegion::invalidateRegionNoThrowOnSubRegions(
+    const std::shared_ptr<Serializable>& aCallbackArgument,
+    const CacheEventFlags eventFlags) {
+  auto&& lock = m_subRegions.make_lock();
+  for (const auto& kv : m_subRegions) {
+    if (auto subRegion = std::dynamic_pointer_cast<RegionInternal>(kv.second)) {
+      auto err =
+          subRegion->invalidateRegionNoThrow(aCallbackArgument, eventFlags);
+      if (err != GF_NOERR) {
+        return err;
+      }
+    }
+  }
+
+  return GF_NOERR;
+}
+
 GfErrType LocalRegion::invalidateRegionNoThrow(
     const std::shared_ptr<Serializable>& aCallbackArgument,
     const CacheEventFlags eventFlags) {
@@ -2254,9 +2285,9 @@
 
   if (m_regionAttributes.getCachingEnabled()) {
     std::vector<std::shared_ptr<CacheableKey>> v = keys_internal();
-    const auto size = v.size();
+    auto size = v.size();
     std::shared_ptr<MapEntryImpl> me;
-    for (size_t i = 0; i < size; i++) {
+    for (decltype(size) i = 0; i < size; i++) {
       {
         std::shared_ptr<Cacheable> oldValue;
         // invalidate all the entries with a nullptr versionTag
@@ -2278,20 +2309,11 @@
     if (err != GF_NOERR) return err;
   }
 
-  if (m_subRegions.current_size() > 0) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> subguard(m_subRegions.mutex());
-    for (MapOfRegionWithLock::iterator p = m_subRegions.begin();
-         p != m_subRegions.end(); ++p) {
-      RegionInternal* subRegion =
-          dynamic_cast<RegionInternal*>((*p).int_id_.get());
-      if (subRegion != nullptr) {
-        err = subRegion->invalidateRegionNoThrow(aCallbackArgument, eventFlags);
-        if (err != GF_NOERR) {
-          return err;
-        }
-      }
-    }
+  err = invalidateRegionNoThrowOnSubRegions(aCallbackArgument, eventFlags);
+  if (err != GF_NOERR) {
+    return err;
   }
+
   err = invokeCacheListenerForRegionEvent(aCallbackArgument, eventFlags,
                                           AFTER_REGION_INVALIDATE);
 
@@ -2357,15 +2379,14 @@
 
   LOGFINE("Region %s is being destroyed", m_fullPath.c_str());
   {
-    MapOfRegionGuard guard(m_subRegions.mutex());
-    for (MapOfRegionWithLock::iterator p = m_subRegions.begin();
-         p != m_subRegions.end(); ++p) {
+    auto&& lock = m_subRegions.make_lock();
+
+    for (const auto& kv : m_subRegions) {
       // TODO: remove unnecessary dynamic_cast by having m_subRegions hold
       // RegionInternal and invoke the destroy method in that
-      RegionInternal* subRegion =
-          dynamic_cast<RegionInternal*>((*p).int_id_.get());
-      if (subRegion != nullptr) {
-        //  for subregions never remove from parent since that will cause
+      if (auto subRegion =
+              std::dynamic_pointer_cast<RegionInternal>(kv.second)) {
+        // for subregions never remove from parent since that will cause
         // the region to be destroyed and SEGV; unbind_all takes care of that
         // Also don't send remote destroy message for sub-regions
         err = subRegion->destroyRegionNoThrow(
@@ -2378,7 +2399,7 @@
       }
     }
   }
-  m_subRegions.unbind_all();
+  m_subRegions.clear();
 
   //  for the expiry case try the local destroy first and remote
   // destroy only if local destroy succeeds
@@ -2505,20 +2526,17 @@
   m_entries->getEntries(me);
 
   if (recursive == true) {
-    MapOfRegionGuard guard(m_subRegions.mutex());
-    for (MapOfRegionWithLock::iterator p = m_subRegions.begin();
-         p != m_subRegions.end(); ++p) {
-      dynamic_cast<LocalRegion*>((*p).int_id_.get())
-          ->entries_internal(me, true);
+    auto&& lock = m_subRegions.make_lock();
+    for (const auto& kv : m_subRegions) {
+      if (auto subRegion = std::dynamic_pointer_cast<LocalRegion>(kv.second)) {
+        subRegion->entries_internal(me, true);
+      }
     }
   }
 }
 
-int LocalRegion::removeRegion(const std::string& name) {
-  if (m_subRegions.current_size() == 0) {
-    return 0;
-  }
-  return m_subRegions.unbind(name);
+void LocalRegion::removeRegion(const std::string& name) {
+  m_subRegions.erase(name);
 }
 
 bool LocalRegion::invokeCacheWriterForEntryEvent(
diff --git a/cppcache/src/LocalRegion.hpp b/cppcache/src/LocalRegion.hpp
index c98fbc4..698f544 100644
--- a/cppcache/src/LocalRegion.hpp
+++ b/cppcache/src/LocalRegion.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_LOCALREGION_H_
-#define GEODE_LOCALREGION_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,16 +15,15 @@
  * limitations under the License.
  */
 
-/**
- * @file
- */
+#pragma once
+
+#ifndef GEODE_LOCALREGION_H_
+#define GEODE_LOCALREGION_H_
 
 #include <string>
 #include <unordered_map>
 
-#include <ace/ACE.h>
-#include <ace/Hash_Map_Manager_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
+#include <ace/RW_Thread_Mutex.h>
 
 #include <geode/AttributesMutator.hpp>
 #include <geode/Cache.hpp>
@@ -51,12 +45,12 @@
 #include "EntriesMapFactory.hpp"
 #include "EventType.hpp"
 #include "ExpMapEntry.hpp"
-#include "MapWithLock.hpp"
 #include "RegionInternal.hpp"
 #include "RegionStats.hpp"
 #include "SerializationRegistry.hpp"
 #include "TSSTXStateWrapper.hpp"
 #include "TombstoneList.hpp"
+#include "util/synchronized_map.hpp"
 
 namespace apache {
 namespace geode {
@@ -472,9 +466,7 @@
 
   void setPool(const std::shared_ptr<Pool>& p) { m_attachedPool = p; }
 
-  TXState* getTXState() const {
-    return TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
-  }
+  TXState* getTXState() const { return TSSTXStateWrapper::get().getTXState(); }
 
   std::shared_ptr<Cacheable> handleReplay(
       GfErrType& err, std::shared_ptr<Cacheable> value) const;
@@ -510,7 +502,9 @@
   /* protected attributes */
   std::string m_name;
   std::shared_ptr<Region> m_parentRegion;
-  MapOfRegionWithLock m_subRegions;
+  synchronized_map<std::unordered_map<std::string, std::shared_ptr<Region>>,
+                   std::recursive_mutex>
+      m_subRegions;
   std::string m_fullPath;
   volatile bool m_destroyPending;
   std::shared_ptr<CacheListener> m_listener;
@@ -529,7 +523,7 @@
   mutable ACE_RW_Thread_Mutex m_rwLock;
   std::vector<std::shared_ptr<CacheableKey>> keys_internal();
   bool containsKey_internal(const std::shared_ptr<CacheableKey>& keyPtr) const;
-  int removeRegion(const std::string& name);
+  void removeRegion(const std::string& name);
 
   bool invokeCacheWriterForEntryEvent(
       const std::shared_ptr<CacheableKey>& key,
@@ -577,6 +571,12 @@
       std::shared_ptr<EventId> eventId, std::shared_ptr<Cacheable>& fullObject,
       std::shared_ptr<VersionTag>& versionTag);
 
+ private:
+  std::shared_ptr<Region> findSubRegion(const std::string& name);
+  GfErrType invalidateRegionNoThrowOnSubRegions(
+      const std::shared_ptr<Serializable>& aCallbackArgument,
+      const CacheEventFlags eventFlags);
+
   // these classes encapsulate actions specific to update operations
   // used by the template <code>updateNoThrow</code> class
   friend class PutActions;
@@ -586,6 +586,7 @@
   friend class RemoveActions;
   friend class InvalidateActions;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/Log.cpp b/cppcache/src/Log.cpp
index d56b886..93a2ffb 100644
--- a/cppcache/src/Log.cpp
+++ b/cppcache/src/Log.cpp
@@ -17,9 +17,12 @@
 
 #include "util/Log.hpp"
 
+#include <algorithm>
 #include <cctype>
 #include <chrono>
 #include <cinttypes>
+#include <ctime>
+#include <mutex>
 #include <string>
 #include <thread>
 #include <utility>
@@ -28,14 +31,13 @@
 #include <ace/ACE.h>
 #include <ace/Dirent.h>
 #include <ace/Dirent_Selector.h>
-#include <ace/Guard_T.h>
 #include <ace/OS.h>
 #include <ace/OS_NS_Thread.h>
 #include <ace/OS_NS_sys_stat.h>
 #include <ace/OS_NS_sys_time.h>
 #include <ace/OS_NS_time.h>
 #include <ace/OS_NS_unistd.h>
-#include <ace/Thread_Mutex.h>
+#include <boost/process/environment.hpp>
 
 #include <geode/ExceptionTypes.hpp>
 #include <geode/internal/geode_globals.hpp>
@@ -44,6 +46,7 @@
 #include "../internal/hacks/AceThreadId.h"
 #include "Assert.hpp"
 #include "geodeBanner.hpp"
+#include "util/chrono/time_point.hpp"
 
 #if defined(_WIN32)
 #include <io.h>
@@ -79,7 +82,7 @@
 
 char g_logFileNameBuffer[2048] = {0};
 
-ACE_Thread_Mutex* g_logMutex = new ACE_Thread_Mutex("Log::logMutex");
+std::mutex g_logMutex;
 
 int g_rollIndex = 0;
 size_t g_spaceUsed = 0;
@@ -141,7 +144,7 @@
     return 1;
   }
 
-  int diff = ACE_OS::strcmp((*d1)->d_name, (*d2)->d_name);
+  int diff = std::strcmp((*d1)->d_name, (*d2)->d_name);
   if (diff < 0) {
     return -1;
   } else if (diff > 0) {
@@ -166,7 +169,6 @@
 using apache::geode::log::globals::g_isLogFileOpened;
 using apache::geode::log::globals::g_log;
 using apache::geode::log::globals::g_logFile;
-using apache::geode::log::globals::g_logFileNameBuffer;
 using apache::geode::log::globals::g_logFileWithExt;
 using apache::geode::log::globals::g_logMutex;
 using apache::geode::log::globals::g_pid;
@@ -176,23 +178,6 @@
 
 /*****************************************************************************/
 
-const char* Log::logFileName() {
-  ACE_Guard<ACE_Thread_Mutex> guard(*g_logMutex);
-
-  if (!g_logFile) {
-    g_logFileNameBuffer[0] = '\0';
-  } else {
-    if (g_logFile->size() >= sizeof g_logFileNameBuffer) {
-      throw IllegalStateException(
-          ("Log file name is too long: " + *g_logFile).c_str());
-    }
-    ACE_OS::strncpy(g_logFileNameBuffer, g_logFile->c_str(),
-                    sizeof(g_logFileNameBuffer));
-  }
-
-  return g_logFileNameBuffer;
-}
-
 void Log::init(LogLevel level, const char* logFileName, int32_t logFileLimit,
                int64_t logDiskSpaceLimit) {
   if (g_log != nullptr) {
@@ -201,7 +186,6 @@
         "Call Log::close() before calling Log::init again.");
   }
   s_logLevel = level;
-  if (g_logMutex == nullptr) g_logMutex = new ACE_Thread_Mutex("Log::logMutex");
 
   if (logDiskSpaceLimit <
       0 /*|| logDiskSpaceLimit > GEODE_MAX_LOG_DISK_LIMIT*/) {
@@ -212,14 +196,10 @@
     logFileLimit = GEODE_MAX_LOG_FILE_LIMIT;
   }
 
-  ACE_Guard<ACE_Thread_Mutex> guard(*g_logMutex);
+  std::lock_guard<decltype(g_logMutex)> guard(g_logMutex);
 
   if (logFileName && logFileName[0]) {
     std::string filename = logFileName;
-    if (filename.size() >= sizeof g_logFileNameBuffer) {
-      throw IllegalStateException(
-          ("Log file name is too long: " + filename).c_str());
-    }
     if (g_logFile) {
       *g_logFile = filename;
     } else {
@@ -228,17 +208,7 @@
 
 #ifdef _WIN32
     // replace all '\' with '/' to make everything easier..
-    size_t length = g_logFile->length() + 1;
-    char* slashtmp = new char[length];
-    ACE_OS::strncpy(slashtmp, g_logFile->c_str(), length);
-    for (size_t i = 0; i < g_logFile->length(); i++) {
-      if (slashtmp[i] == '/') {
-        slashtmp[i] = '\\';
-      }
-    }
-    *g_logFile = slashtmp;
-    delete[] slashtmp;
-    slashtmp = nullptr;
+    std::replace(g_logFile->begin(), g_logFile->end(), '\\', '/');
 #endif
 
     // Appending a ".log" at the end if it does not exist or file has some other
@@ -295,7 +265,7 @@
           if (fileHyphenPos != std::string::npos) {
             std::string buff =
                 tempname.substr(fileHyphenPos + 1, tempname.length());
-            g_rollIndex = ACE_OS::atoi(buff.c_str()) + 1;
+            g_rollIndex = std::stoi(buff) + 1;
           }
         }  // if loop
       }    // for loop
@@ -304,17 +274,6 @@
 
     FILE* existingFile = fopen(g_logFileWithExt->c_str(), "r");
     if (existingFile != nullptr && logFileLimit > 0) {
-      /* adongre
-       * Coverity - II
-       * CID 29205: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-       * "sprintf" can cause a
-       * buffer overflow when done incorrectly. Because sprintf() assumes an
-       * arbitrarily long string,
-       * callers must be careful not to overflow the actual space of the
-       * destination.
-       * Use snprintf() instead, or correct precision specifiers.
-       * Fix : using ACE_OS::snprintf
-       */
       char rollFile[1024] = {0};
       std::string logsdirname;
       std::string logsbasename;
@@ -341,18 +300,18 @@
         fnameBeforeExt = logsbasename.substr(0, posOfExt);
         extName = logsbasename.substr(posOfExt + 1, baselen);
       }
-      ACE_OS::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
-                       ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
-                       g_rollIndex++, extName.c_str());
+      std::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
+                    ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
+                    g_rollIndex++, extName.c_str());
       bool rollFileNameGot = false;
       while (!rollFileNameGot) {
         FILE* checkFile = fopen(rollFile, "r");
         if (checkFile != nullptr) {
           fclose(checkFile);
           checkFile = nullptr;
-          ACE_OS::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
-                           ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
-                           g_rollIndex++, extName.c_str());
+          std::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
+                        ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
+                        g_rollIndex++, extName.c_str());
         } else {
           rollFileNameGot = true;
         }
@@ -393,7 +352,7 @@
 }
 
 void Log::close() {
-  ACE_Guard<ACE_Thread_Mutex> guard(*g_logMutex);
+  std::lock_guard<decltype(g_logMutex)> guard(g_logMutex);
 
   std::string oldfile;
 
@@ -510,8 +469,8 @@
 
     default: {
       char buf[64] = {0};
-      ACE_OS::snprintf(buf, 64, "Unexpected log level: %d",
-                       static_cast<int>(level));
+      std::snprintf(buf, 64, "Unexpected log level: %d",
+                    static_cast<int>(level));
       throw IllegalArgumentException(buf);
     }
   }
@@ -553,22 +512,24 @@
 
 char* Log::formatLogLine(char* buf, LogLevel level) {
   if (g_pid == 0) {
-    g_pid = ACE_OS::getpid();
+    g_pid = boost::this_process::get_id();
     ACE_OS::uname(&g_uname);
   }
   const size_t MINBUFSIZE = 128;
-  ACE_Time_Value clock = ACE_OS::gettimeofday();
-  time_t secs = clock.sec();
-  struct tm* tm_val = ACE_OS::localtime(&secs);
-  char* pbuf = buf;
-  pbuf += ACE_OS::snprintf(pbuf, 15, "[%s ", Log::levelToChars(level));
-  pbuf += ACE_OS::strftime(pbuf, MINBUFSIZE, "%Y/%m/%d %H:%M:%S", tm_val);
-  pbuf += ACE_OS::snprintf(pbuf, 15, ".%06" PRId64 " ",
-                           static_cast<int64_t>(clock.usec()));
-  pbuf += ACE_OS::strftime(pbuf, MINBUFSIZE, "%Z ", tm_val);
+  auto now = std::chrono::system_clock::now();
+  auto secs = std::chrono::system_clock::to_time_t(now);
+  auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(
+      now - std::chrono::system_clock::from_time_t(secs));
+  auto tm_val = apache::geode::util::chrono::localtime(secs);
+  auto pbuf = buf;
+  pbuf += std::snprintf(pbuf, 15, "[%s ", Log::levelToChars(level));
+  pbuf += std::strftime(pbuf, MINBUFSIZE, "%Y/%m/%d %H:%M:%S", &tm_val);
+  pbuf += std::snprintf(pbuf, 15, ".%06" PRId64 " ",
+                        static_cast<int64_t>(microseconds.count()));
+  pbuf += std::strftime(pbuf, MINBUFSIZE, "%Z ", &tm_val);
 
-  ACE_OS::snprintf(pbuf, 300, "%s:%d %" PRIu64 "] ", g_uname.nodename, g_pid,
-                   hacks::aceThreadId(ACE_OS::thr_self()));
+  std::snprintf(pbuf, 300, "%s:%d %" PRIu64 "] ", g_uname.nodename, g_pid,
+                hacks::aceThreadId(ACE_OS::thr_self()));
 
   return buf;
 }
@@ -579,7 +540,7 @@
 
 // int g_count = 0;
 void Log::put(LogLevel level, const char* msg) {
-  ACE_Guard<ACE_Thread_Mutex> guard(*g_logMutex);
+  std::lock_guard<decltype(g_logMutex)> guard(g_logMutex);
 
   g_fileInfo fileInfo;
 
@@ -608,8 +569,7 @@
     }
 
     formatLogLine(buf, level);
-    size_t numChars =
-        static_cast<int>(ACE_OS::strlen(buf) + ACE_OS::strlen(msg));
+    size_t numChars = static_cast<int>(std::strlen(buf) + std::strlen(msg));
     g_bytesWritten +=
         numChars + 2;  // bcoz we have to count trailing new line (\n)
 
@@ -640,17 +600,17 @@
         fnameBeforeExt = logsbasename.substr(0, posOfExt);
         extName = logsbasename.substr(posOfExt + 1, baselen);
       }
-      ACE_OS::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
-                       ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
-                       g_rollIndex++, extName.c_str());
+      std::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
+                    ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
+                    g_rollIndex++, extName.c_str());
       bool rollFileNameGot = false;
       while (!rollFileNameGot) {
         FILE* fp1 = fopen(rollFile, "r");
         if (fp1 != nullptr) {
           fclose(fp1);
-          ACE_OS::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
-                           ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
-                           g_rollIndex++, extName.c_str());
+          std::snprintf(rollFile, 1024, "%s%c%s-%d.%s", logsdirname.c_str(),
+                        ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(),
+                        g_rollIndex++, extName.c_str());
         } else {
           rollFileNameGot = true;
         }
@@ -679,8 +639,8 @@
       int status = sds.open(dirname.c_str(), selector, comparator);
       if (status != -1) {
         for (int index = 1; index < sds.length(); ++index) {
-          ACE_OS::snprintf(fullpath, 512, "%s%c%s", dirname.c_str(),
-                           ACE_DIRECTORY_SEPARATOR_CHAR, sds[index]->d_name);
+          std::snprintf(fullpath, 512, "%s%c%s", dirname.c_str(),
+                        ACE_DIRECTORY_SEPARATOR_CHAR, sds[index]->d_name);
           ACE_OS::stat(fullpath, &statBuf);
           g_fileInfoPair = std::make_pair(fullpath, statBuf.st_size);
           fileInfo.push_back(g_fileInfoPair);
@@ -697,8 +657,8 @@
           g_spaceUsed -= fileSize;
         } else {
           char printmsg[256];
-          ACE_OS::snprintf(printmsg, 256, "%s\t%s\n", "Could not delete",
-                           fileInfo[fileIndex].first.c_str());
+          std::snprintf(printmsg, 256, "%s\t%s\n", "Could not delete",
+                        fileInfo[fileIndex].first.c_str());
           int numChars =
               fprintf(g_log, "%s%s\n", formatLogLine(buf, level), printmsg);
           g_bytesWritten +=
@@ -745,7 +705,7 @@
     fn = fn.substr(fn.size() - MAX_NAME_LENGTH, MAX_NAME_LENGTH);
   }
   char buf[MAX_NAME_LENGTH + 512] = {0};
-  ACE_OS::snprintf(buf, 1536, "{{{===>>> Entering function %s", fn.c_str());
+  std::snprintf(buf, 1536, "{{{===>>> Entering function %s", fn.c_str());
   put(level, buf);
 }
 
@@ -756,7 +716,7 @@
     fn = fn.substr(fn.size() - MAX_NAME_LENGTH, MAX_NAME_LENGTH);
   }
   char buf[MAX_NAME_LENGTH + 512] = {0};
-  ACE_OS::snprintf(buf, 1536, "<<<===}}} Exiting function %s", fn.c_str());
+  std::snprintf(buf, 1536, "<<<===}}} Exiting function %s", fn.c_str());
   put(level, buf);
 }
 
diff --git a/cppcache/src/MapSegment.cpp b/cppcache/src/MapSegment.cpp
index fda7371..37d3a7b 100644
--- a/cppcache/src/MapSegment.cpp
+++ b/cppcache/src/MapSegment.cpp
@@ -17,9 +17,7 @@
 
 #include "MapSegment.hpp"
 
-#include <mutex>
-
-#include <ace/OS.h>
+#include <chrono>
 
 #include "MapEntry.hpp"
 #include "RegionInternal.hpp"
@@ -29,7 +27,6 @@
 #include "TombstoneExpiryHandler.hpp"
 #include "TrackedMapEntry.hpp"
 #include "Utils.hpp"
-#include "ace/Time_Value.h"
 #include "util/concurrent/spinlock_mutex.hpp"
 
 namespace apache {
@@ -50,7 +47,7 @@
   uint32_t mapSize = TableOfPrimes::nextLargerPrime(size, m_primeIndex);
   LOGFINER("Initializing MapSegment with size %d (given size %d).", mapSize,
            size);
-  m_map->open(mapSize);
+  m_map->reserve(mapSize);
   m_entryFactory = entryFactory;
   m_region = region;
   m_tombstoneList =
@@ -60,16 +57,16 @@
   m_concurrencyChecksEnabled = concurrencyChecksEnabled;
 }
 
-void MapSegment::close() { m_map->close(); }
+void MapSegment::close() {}
 
 void MapSegment::clear() {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  m_map->unbind_all();
+  m_map->clear();
 }
 
-int MapSegment::acquire() { return m_segmentMutex.acquire(); }
+void MapSegment::lock() { m_segmentMutex.lock(); }
 
-int MapSegment::release() { return m_segmentMutex.release(); }
+void MapSegment::unlock() { m_segmentMutex.unlock(); }
 
 GfErrType MapSegment::create(const std::shared_ptr<CacheableKey>& key,
                              const std::shared_ptr<Cacheable>& newValue,
@@ -83,17 +80,19 @@
   {
     std::lock_guard<spinlock_mutex> lk(m_spinlock);
     // if size is greater than 75 percent of prime, rehash
-    uint32_t mapSize = TableOfPrimes::getPrime(m_primeIndex);
-    if (((m_map->current_size() * 75) / 100) > mapSize) {
+    auto mapSize = TableOfPrimes::getPrime(m_primeIndex);
+    if (((m_map->size() * 75) / 100) > mapSize) {
       rehash();
     }
-    std::shared_ptr<MapEntry> entry;
-    if ((m_map->find(key, entry)) == -1) {
+
+    const auto& find = m_map->find(key);
+    if (find == m_map->end()) {
       if ((err = putNoEntry(key, newValue, me, updateCount, destroyTracker,
                             versionTag)) != GF_NOERR) {
         return err;
       }
     } else {
+      auto& entry = find->second;
       auto entryImpl = entry->getImplPtr();
       entryImpl->getValueI(oldValue);
       if (oldValue == nullptr || CacheableToken::isTombstone(oldValue)) {
@@ -152,11 +151,12 @@
     std::lock_guard<spinlock_mutex> lk(m_spinlock);
     // if size is greater than 75 percent of prime, rehash
     uint32_t mapSize = TableOfPrimes::getPrime(m_primeIndex);
-    if (((m_map->current_size() * 75) / 100) > mapSize) {
+    if (((m_map->size() * 75) / 100) > mapSize) {
       rehash();
     }
-    std::shared_ptr<MapEntry> entry;
-    if ((m_map->find(key, entry)) == -1) {
+
+    const auto& find = m_map->find(key);
+    if (find == m_map->end()) {
       if (delta != nullptr) {
         return GF_INVALID_DELTA;  // You can not apply delta when there is no
       }
@@ -165,6 +165,7 @@
       err = putNoEntry(key, newValue, me, updateCount, destroyTracker,
                        versionTag);
     } else {
+      auto& entry = find->second;
       auto entryImpl = entry->getImplPtr();
       std::shared_ptr<Cacheable> meOldValue;
       entryImpl->getValueI(meOldValue);
@@ -215,8 +216,10 @@
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
   isTokenAdded = false;
   GfErrType err = GF_NOERR;
-  std::shared_ptr<MapEntry> entry;
-  if ((m_map->find(key, entry)) != -1) {
+
+  const auto& find = m_map->find(key);
+  if (find != m_map->end()) {
+    auto entry = find->second;
     VersionStamp versionStamp;
     if (m_concurrencyChecksEnabled) {
       versionStamp = entry->getVersionStamp();
@@ -261,10 +264,11 @@
     bool& isEntryFound, ExpiryTaskManager::id_type expiryTaskID,
     TombstoneExpiryHandler* handler, bool& expTaskSet) {
   GfErrType err = GF_NOERR;
-  std::shared_ptr<MapEntry> entry;
   VersionStamp versionStamp;
   // If entry found, else return no entry
-  if ((m_map->find(key, entry)) != -1) {
+  const auto& find = m_map->find(key);
+  if (find != m_map->end()) {
+    auto entry = find->second;
     isEntryFound = true;
     // If the version tag is null, use the version tag of
     // the existing entry
@@ -349,8 +353,7 @@
   }
 
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  std::shared_ptr<Cacheable> value;
-  if ((m_map->unbind(key, entry)) == -1) {
+  if (m_map->erase(key) == 0) {
     // didn't unbind, probably no entry...
     oldValue = nullptr;
     volatile int destroyTrackers = *m_numDestroyTrackers;
@@ -375,9 +378,8 @@
 
 bool MapSegment::unguardedRemoveActualEntry(
     const std::shared_ptr<CacheableKey>& key, bool cancelTask) {
-  std::shared_ptr<MapEntry> entry;
   m_tombstoneList->eraseEntryFromTombstoneList(key, cancelTask);
-  if (m_map->unbind(key, entry) == -1) {
+  if (m_map->erase(key) == 0) {
     return false;
   }
   return true;
@@ -389,7 +391,7 @@
   std::shared_ptr<MapEntry> entry;
   taskid = m_tombstoneList->eraseEntryFromTombstoneListWithoutCancelTask(
       key, handler);
-  if (m_map->unbind(key, entry) == -1) {
+  if (m_map->erase(key) == 0) {
     return false;
   }
   return true;
@@ -407,12 +409,14 @@
                           std::shared_ptr<MapEntryImpl>& result,
                           std::shared_ptr<Cacheable>& value) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  std::shared_ptr<MapEntry> entry;
-  if ((m_map->find(key, entry)) == -1) {
+
+  const auto& find = m_map->find(key);
+  if (find == m_map->end()) {
     result = nullptr;
     value = nullptr;
     return false;
   }
+  auto entry = find->second;
 
   // If the value is a tombstone return not found
   auto mePtr = entry->getImplPtr();
@@ -431,10 +435,13 @@
  */
 bool MapSegment::containsKey(const std::shared_ptr<CacheableKey>& key) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  std::shared_ptr<MapEntry> mePtr;
-  if ((m_map->find(key, mePtr)) == -1) {
+
+  const auto& find = m_map->find(key);
+  if (find == m_map->end()) {
     return false;
   }
+  auto mePtr = find->second;
+
   // If the value is a tombstone return not found
   std::shared_ptr<Cacheable> value;
   auto mePtr1 = mePtr->getImplPtr();
@@ -449,12 +456,12 @@
  */
 void MapSegment::getKeys(std::vector<std::shared_ptr<CacheableKey>>& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  for (CacheableKeyHashMap::iterator iter = m_map->begin();
-       iter != m_map->end(); iter++) {
+
+  for (const auto& kv : *m_map) {
     std::shared_ptr<Cacheable> valuePtr;
-    (*iter).int_id_->getImplPtr()->getValueI(valuePtr);
+    kv.second->getImplPtr()->getValueI(valuePtr);
     if (!CacheableToken::isTombstone(valuePtr)) {
-      result.push_back((*iter).ext_id_);
+      result.push_back(kv.first);
     }
   }
 }
@@ -464,13 +471,13 @@
  */
 void MapSegment::getEntries(std::vector<std::shared_ptr<RegionEntry>>& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  for (CacheableKeyHashMap::iterator iter = m_map->begin();
-       iter != m_map->end(); iter++) {
+
+  for (const auto& kv : *m_map) {
     std::shared_ptr<CacheableKey> keyPtr;
     std::shared_ptr<Cacheable> valuePtr;
-    auto me = ((*iter).int_id_)->getImplPtr();
+    auto me = kv.second->getImplPtr();
     me->getValueI(valuePtr);
-    if (valuePtr != nullptr && !CacheableToken::isTombstone(valuePtr)) {
+    if (valuePtr && !CacheableToken::isTombstone(valuePtr)) {
       if (CacheableToken::isInvalid(valuePtr)) {
         valuePtr = nullptr;
       }
@@ -486,17 +493,17 @@
  */
 void MapSegment::getValues(std::vector<std::shared_ptr<Cacheable>>& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  for (auto&& it : *m_map) {
-    auto&& entry = it.int_id_;
+  for (const auto& kv : *m_map) {
+    auto& entry = kv.second;
     std::shared_ptr<Cacheable> value;
     entry->getValue(value);
-    auto&& entryImpl = entry->getImplPtr();
+    auto entryImpl = entry->getImplPtr();
 
     if (value && !CacheableToken::isInvalid(value) &&
         !CacheableToken::isDestroyed(value) &&
         !CacheableToken::isTombstone(value)) {
       if (CacheableToken::isOverflowed(value)) {  // get Value from disc.
-        auto&& key = it.ext_id_;
+        auto& key = kv.first;
         value = getFromDisc(key, entryImpl);
         entryImpl->setValueI(value);
       }
@@ -516,8 +523,8 @@
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
   std::shared_ptr<MapEntry> entry;
   std::shared_ptr<MapEntry> newEntry;
-  int status;
-  if ((status = m_map->find(key, entry)) == -1) {
+  const auto& find = m_map->find(key);
+  if (find == m_map->end()) {
     oldValue = nullptr;
     if (addIfAbsent) {
       std::shared_ptr<MapEntryImpl> entryImpl;
@@ -531,6 +538,7 @@
       return -1;
     }
   } else {
+    entry = find->second;
     entry->getValue(oldValue);
     if (failIfPresent) {
       // return -1 without adding an entry; the callee should check on
@@ -545,11 +553,11 @@
   } else {
     updateCount = entry->addTracker(newEntry);
   }
-  if (newEntry != nullptr) {
-    if (status == -1) {
-      m_map->bind(key, newEntry);
+  if (newEntry) {
+    if (find == m_map->end()) {
+      m_map->emplace(key, newEntry);
     } else {
-      m_map->rebind(key, newEntry);
+      find->second = newEntry;
     }
   }
   return updateCount;
@@ -562,8 +570,10 @@
     const std::shared_ptr<CacheableKey>& key) {
   if (m_concurrencyChecksEnabled) return;
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
-  std::shared_ptr<MapEntry> entry;
-  if ((m_map->find(key, entry)) != -1) {
+
+  const auto& find = m_map->find(key);
+  if (find != m_map->end()) {
+    auto& entry = find->second;
     auto impl = entry->getImplPtr();
     removeTrackerForEntry(key, entry, impl);
   }
@@ -576,16 +586,16 @@
     MapOfUpdateCounters& updateCounterMap) {
   if (m_concurrencyChecksEnabled) return;
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
+
   std::shared_ptr<MapEntry> newEntry;
   std::shared_ptr<CacheableKey> key;
-  for (CacheableKeyHashMap::iterator iter = m_map->begin();
-       iter != m_map->end(); ++iter) {
-    (*iter).int_id_->getKey(key);
-    int updateCount = (*iter).int_id_->addTracker(newEntry);
+  for (auto& kv : *m_map) {
+    kv.second->getKey(key);
+    int updateCount = kv.second->addTracker(newEntry);
     if (newEntry != nullptr) {
-      m_map->rebind(key, newEntry);
+      kv.second = newEntry;
     }
-    updateCounterMap.insert(std::make_pair(key, updateCount));
+    updateCounterMap.emplace(key, updateCount);
   }
 }
 
@@ -602,25 +612,11 @@
  * @brief replace the existing hash map with one that is wider
  *   to reduce collision chains.
  */
-void MapSegment::rehash() {  // Only called from put, segment must already be
-                             // locked...
-
-  uint32_t newMapSize = TableOfPrimes::getPrime(++m_primeIndex);
+void MapSegment::rehash() {
+  // Only called from put, segment must already be locked...
+  auto newMapSize = TableOfPrimes::getPrime(++m_primeIndex);
   LOGFINER("Rehashing MapSegment to size %d.", newMapSize);
-  auto* newMap = new CacheableKeyHashMap();
-  newMap->open(newMapSize);
-
-  // copy all entries into newMap..
-  for (CacheableKeyHashMap::iterator iter = m_map->begin();
-       iter != m_map->end(); ++iter) {
-    newMap->bind((*iter).ext_id_, (*iter).int_id_);
-  }
-
-  // plug newMap into real member.
-  CacheableKeyHashMap* oldMap = m_map;
-  m_map = newMap;
-  // clean up the old map.
-  delete oldMap;
+  m_map->reserve(newMapSize);
   m_rehashCount++;
 }
 std::shared_ptr<Cacheable> MapSegment::getFromDisc(
@@ -652,41 +648,46 @@
       if (oldValue == nullptr || CacheableToken::isDestroyed(oldValue) ||
           CacheableToken::isInvalid(oldValue) ||
           CacheableToken::isTombstone(oldValue)) {
-        if (m_poolDM) m_poolDM->updateNotificationStats(false, 0);
+        if (m_poolDM) {
+          m_poolDM->updateNotificationStats(false, std::chrono::nanoseconds(0));
+        }
         return GF_INVALID_DELTA;
       } else if (CacheableToken::isOverflowed(
                      oldValue)) {  // get Value from disc.
         oldValue = getFromDisc(key, entryImpl);
         if (oldValue == nullptr) {
-          if (m_poolDM) m_poolDM->updateNotificationStats(false, 0);
+          if (m_poolDM) {
+            m_poolDM->updateNotificationStats(false,
+                                              std::chrono::nanoseconds(0));
+          }
           return GF_INVALID_DELTA;
         }
       }
 
+      using clock = std::chrono::steady_clock;
+
       auto valueWithDelta = std::dynamic_pointer_cast<Delta>(oldValue);
       auto& newValue1 = const_cast<std::shared_ptr<Cacheable>&>(newValue);
       try {
         if (m_region->getAttributes().getCloningEnabled()) {
           auto tempVal = valueWithDelta->clone();
-          ACE_Time_Value currTimeBefore = ACE_OS::gettimeofday();
+          auto currTimeBefore = clock::now();
           tempVal->fromDelta(*delta);
 
           if (m_poolDM) {
-            m_poolDM->updateNotificationStats(
-                true,
-                ((ACE_OS::gettimeofday() - currTimeBefore).msec()) * 1000000);
+            m_poolDM->updateNotificationStats(true,
+                                              clock::now() - currTimeBefore);
           }
           newValue1 = std::dynamic_pointer_cast<Serializable>(tempVal);
           entryImpl->setValueI(newValue1);
         } else {
-          ACE_Time_Value currTimeBefore = ACE_OS::gettimeofday();
+          auto currTimeBefore = clock::now();
           valueWithDelta->fromDelta(*delta);
           newValue1 = std::dynamic_pointer_cast<Serializable>(valueWithDelta);
 
           if (m_poolDM) {
-            m_poolDM->updateNotificationStats(
-                true,
-                ((ACE_OS::gettimeofday() - currTimeBefore).msec()) * 1000000);
+            m_poolDM->updateNotificationStats(true,
+                                              clock::now() - currTimeBefore);
           }
           entryImpl->setValueI(
               std::dynamic_pointer_cast<Serializable>(valueWithDelta));
@@ -729,12 +730,13 @@
                                   std::shared_ptr<MapEntryImpl>& me,
                                   bool& result) {
   std::shared_ptr<Cacheable> value;
-  std::shared_ptr<MapEntry> entry;
   std::shared_ptr<MapEntryImpl> mePtr;
-  if (m_map->find(key, entry) == -1) {
+  const auto& find = m_map->find(key);
+  if (find == m_map->end()) {
     result = false;
     return GF_NOERR;
   }
+  auto& entry = find->second;
   mePtr = entry->getImplPtr();
 
   if (!mePtr) {
@@ -751,8 +753,9 @@
   if (CacheableToken::isTombstone(value)) {
     if (m_tombstoneList->exists(key)) {
       std::shared_ptr<MapEntry> entry;
-      if (m_map->find(key, entry) != -1) {
-        auto mePtr = entry->getImplPtr();
+      const auto find = m_map->find(key);
+      if (find != m_map->end()) {
+        auto mePtr = find->second->getImplPtr();
         me = mePtr;
       }
       result = true;
diff --git a/cppcache/src/MapSegment.hpp b/cppcache/src/MapSegment.hpp
index 6b5dc36..3e00989 100644
--- a/cppcache/src/MapSegment.hpp
+++ b/cppcache/src/MapSegment.hpp
@@ -21,17 +21,10 @@
 #define GEODE_MAPSEGMENT_H_
 
 #include <memory>
+#include <mutex>
 #include <unordered_map>
 #include <vector>
 
-#include <ace/Functor_T.h>
-#include <ace/Hash_Map_Manager.h>
-#include <ace/Null_Mutex.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Thread_Mutex.h>
-#include <ace/Versioned_Namespace.h>
-#include <ace/config-lite.h>
-
 #include <geode/CacheableKey.hpp>
 #include <geode/Delta.hpp>
 #include <geode/RegionEntry.hpp>
@@ -43,42 +36,18 @@
 #include "TombstoneList.hpp"
 #include "util/concurrent/spinlock_mutex.hpp"
 
-namespace ACE_VERSIONED_NAMESPACE_NAME {
-
-template <>
-class ACE_Hash<std::shared_ptr<apache::geode::client::CacheableKey>> {
- public:
-  u_long operator()(
-      const std::shared_ptr<apache::geode::client::CacheableKey>& key) {
-    return key->hashcode();
-  }
-};
-
-template <>
-class ACE_Equal_To<std::shared_ptr<apache::geode::client::CacheableKey>> {
- public:
-  bool operator()(
-      const std::shared_ptr<apache::geode::client::CacheableKey>& key1,
-      const std::shared_ptr<apache::geode::client::CacheableKey>& key2) {
-    return key1->operator==(*key2);
-  }
-};
-
-// NOLINTNEXTLINE(google-readability-namespace-comments)
-}  // namespace ACE_VERSIONED_NAMESPACE_NAME
-
 namespace apache {
 namespace geode {
 namespace client {
 
 class RegionInternal;
-typedef ::ACE_Hash_Map_Manager_Ex<
-    std::shared_ptr<CacheableKey>, std::shared_ptr<MapEntry>,
-    ::ACE_Hash<std::shared_ptr<CacheableKey>>,
-    ::ACE_Equal_To<std::shared_ptr<CacheableKey>>, ::ACE_Null_Mutex>
+typedef std::unordered_map<std::shared_ptr<CacheableKey>,
+                           std::shared_ptr<MapEntry>,
+                           dereference_hash<std::shared_ptr<CacheableKey>>,
+                           dereference_equal_to<std::shared_ptr<CacheableKey>>>
     CacheableKeyHashMap;
 
-/** @brief type wrapper around the ACE map implementation. */
+/** @brief type wrapper around the std::unordered_map implementation. */
 class APACHE_GEODE_EXPORT MapSegment {
  private:
   // contain
@@ -92,7 +61,7 @@
   // index of the current prime in the primes table
   uint32_t m_primeIndex;
   spinlock_mutex m_spinlock;
-  ACE_Recursive_Thread_Mutex m_segmentMutex;
+  std::recursive_mutex m_segmentMutex;
 
   bool m_concurrencyChecksEnabled;
   // number of operations that are tracking destroys
@@ -116,7 +85,7 @@
     std::shared_ptr<MapEntry> newEntry;
     entry->incrementUpdateCount(newEntry);
     if (newEntry != nullptr) {
-      m_map->rebind(key, newEntry);
+      m_map->emplace(key, newEntry);
       entry = newEntry;
       return true;
     }
@@ -140,13 +109,13 @@
       entryImpl->getValueI(value);
       if (value == nullptr) {
         // get rid of an entry marked as destroyed
-        m_map->unbind(key);
+        m_map->erase(key);
         return;
       }
     }
     if (trackerPair.first) {
       entry = entryImpl ? entryImpl : entry->getImplPtr();
-      m_map->rebind(key, entry);
+      (*m_map)[key] = entry;
     }
   }
 
@@ -179,7 +148,7 @@
         newEntry->getVersionStamp().setVersions(*versionStamp);
       }
     }
-    m_map->bind(key, newEntry);
+    m_map->emplace(key, newEntry);
     return GF_NOERR;
   }
 
@@ -217,10 +186,9 @@
 
   ~MapSegment();
 
-  // methods to acquire/release MapSegment mutex (not SpinLock)
-  // that allow using MapSegment with ACE_Guard
-  int acquire();
-  int release();
+  // methods for BasicLockable
+  void lock();
+  void unlock();
 
   /**
    * @brief initialize underlying map structures. Not called by constructor.
diff --git a/cppcache/src/MapWithLock.hpp b/cppcache/src/MapWithLock.hpp
index 2494032..58fab50 100644
--- a/cppcache/src/MapWithLock.hpp
+++ b/cppcache/src/MapWithLock.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_MAPWITHLOCK_H_
-#define GEODE_MAPWITHLOCK_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,13 +15,12 @@
  * limitations under the License.
  */
 
-#include <string>
-#include <unordered_map>
+#pragma once
 
-#include <ace/Hash_Map_Manager.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Versioned_Namespace.h>
-#include <ace/config-lite.h>
+#ifndef GEODE_MAPWITHLOCK_H_
+#define GEODE_MAPWITHLOCK_H_
+
+#include <unordered_map>
 
 #include <geode/CacheableKey.hpp>
 #include <geode/internal/geode_globals.hpp>
@@ -39,23 +33,6 @@
                            CacheableKey::hash, CacheableKey::equal_to>
     MapOfUpdateCounters;
 
-class Region;
-/** Map type used to hold root regions in the Cache, and subRegions. */
-typedef ACE_Hash_Map_Manager_Ex<
-    std::string, std::shared_ptr<Region>, ACE_Hash<std::string>,
-    ACE_Equal_To<std::string>, ACE_Recursive_Thread_Mutex>
-    MapOfRegionWithLock;
-
-class CqQuery;
-typedef ACE_Hash_Map_Manager_Ex<
-    std::string, std::shared_ptr<CqQuery>, ACE_Hash<std::string>,
-    ACE_Equal_To<std::string>, ACE_Recursive_Thread_Mutex>
-    MapOfCqQueryWithLock;
-
-/** Guard type for locking a MapOfRegionWithLock while iterating or performing
- * other composite operations. ex.. MapOfRegionGuard guard( map->mutex() );
- */
-typedef ACE_Guard<ACE_Recursive_Thread_Mutex> MapOfRegionGuard;
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/MemberListForVersionStamp.hpp b/cppcache/src/MemberListForVersionStamp.hpp
index cf6ae92..bc24492 100644
--- a/cppcache/src/MemberListForVersionStamp.hpp
+++ b/cppcache/src/MemberListForVersionStamp.hpp
@@ -23,11 +23,12 @@
 #include <memory>
 #include <unordered_map>
 
+#include <ace/RW_Thread_Mutex.h>
+
 #include <geode/internal/geode_globals.hpp>
 
 #include "DSMemberForVersionStamp.hpp"
 #include "ReadWriteLock.hpp"
-#include "ace/RW_Thread_Mutex.h"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/NonCopyable.hpp b/cppcache/src/NonCopyable.hpp
index 3bb3063..7dd6cb5 100644
--- a/cppcache/src/NonCopyable.hpp
+++ b/cppcache/src/NonCopyable.hpp
@@ -31,8 +31,8 @@
   NonCopyable() {}
   ~NonCopyable() {}
 
- private:
-  NonCopyable(const NonCopyable&);
+ public:
+  NonCopyable(const NonCopyable&) = delete;
 };
 
 class APACHE_GEODE_EXPORT NonAssignable {
@@ -40,8 +40,8 @@
   NonAssignable() {}
   ~NonAssignable() {}
 
- private:
-  const NonAssignable& operator=(const NonAssignable&);
+ public:
+  const NonAssignable& operator=(const NonAssignable&) = delete;
 };
 
 }  // namespace client
diff --git a/cppcache/src/PdxFieldType.cpp b/cppcache/src/PdxFieldType.cpp
index c3b3f86..360ed61 100644
--- a/cppcache/src/PdxFieldType.cpp
+++ b/cppcache/src/PdxFieldType.cpp
@@ -26,9 +26,6 @@
 #include <geode/PdxFieldTypes.hpp>
 
 #include "PdxTypes.hpp"
-//#include <malloc.h>
-
-#include "ace/OS.h"
 
 namespace apache {
 namespace geode {
@@ -135,11 +132,10 @@
 
 std::string PdxFieldType::toString() const {
   char stringBuf[1024];
-  ACE_OS::snprintf(
-      stringBuf, 1024,
-      " PdxFieldName=%s TypeId=%d VarLenFieldIdx=%d sequenceid=%d\n",
-      this->m_fieldName.c_str(), static_cast<int>(this->m_typeId),
-      this->m_varLenFieldIdx, this->m_sequenceId);
+  std::snprintf(stringBuf, 1024,
+                " PdxFieldName=%s TypeId=%d VarLenFieldIdx=%d sequenceid=%d\n",
+                this->m_fieldName.c_str(), static_cast<int>(this->m_typeId),
+                this->m_varLenFieldIdx, this->m_sequenceId);
   return std::string(stringBuf);
 }
 
diff --git a/cppcache/src/PdxFieldType.hpp b/cppcache/src/PdxFieldType.hpp
index aed8471..ea04687 100644
--- a/cppcache/src/PdxFieldType.hpp
+++ b/cppcache/src/PdxFieldType.hpp
@@ -60,9 +60,9 @@
 
   PdxFieldType();
 
-  inline const char* getFieldName() { return m_fieldName.c_str(); }
+  inline const std::string& getFieldName() { return m_fieldName; }
 
-  inline const char* getClassName() { return m_className.c_str(); }
+  inline const std::string& getClassName() { return m_className; }
 
   inline PdxFieldTypes getTypeId() { return m_typeId; }
 
diff --git a/cppcache/src/PdxInstanceImpl.cpp b/cppcache/src/PdxInstanceImpl.cpp
index cbaf8b6..0796320 100644
--- a/cppcache/src/PdxInstanceImpl.cpp
+++ b/cppcache/src/PdxInstanceImpl.cpp
@@ -51,7 +51,7 @@
 
 bool sortFunc(std::shared_ptr<PdxFieldType> field1,
               std::shared_ptr<PdxFieldType> field2) {
-  int diff = ACE_OS::strcmp(field1->getFieldName(), field2->getFieldName());
+  const auto diff = field1->getFieldName().compare(field2->getFieldName());
   if (diff < 0) {
     return true;
   } else {
@@ -653,7 +653,7 @@
     auto pField = pdxIdentityFieldList.at(i);
 
     LOGDEBUG("hashcode for pdxfield %s  hashcode is %d ",
-             pField->getFieldName(), hashCode);
+             pField->getFieldName().c_str(), hashCode);
     switch (pField->getTypeId()) {
       case PdxFieldTypes::CHAR:
       case PdxFieldTypes::BOOLEAN:
@@ -699,18 +699,8 @@
       }
       default: {
         char excpStr[256] = {0};
-        /* adongre  - Coverity II
-         * CID 29264: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-         * "sprintf" can cause a
-         * buffer overflow when done incorrectly. Because sprintf() assumes an
-         * arbitrarily long string,
-         * callers must be careful not to overflow the actual space of the
-         * destination.
-         * Use snprintf() instead, or correct precision specifiers.
-         * Fix : using ACE_OS::snprintf
-         */
-        ACE_OS::snprintf(excpStr, 256, "PdxInstance not found typeid %d ",
-                         static_cast<int>(pField->getTypeId()));
+        std::snprintf(excpStr, 256, "PdxInstance not found typeid %d ",
+                      static_cast<int>(pField->getTypeId()));
         throw IllegalStateException(excpStr);
       }
     }
@@ -880,15 +870,6 @@
 }
 
 std::string PdxInstanceImpl::toString() const {
-  /* adongre - Coverity II
-   * CID 29265: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-   * "sprintf" can cause a
-   * buffer overflow when done incorrectly. Because sprintf() assumes an
-   * arbitrarily long string,
-   * callers must be careful not to overflow the actual space of the
-   * destination. Use snprintf() instead, or correct precision specifiers. Fix
-   * : using ACE_OS::snprintf
-   */
   auto pt = getPdxType();
   std::string toString = "PDX[" + std::to_string(pt->getTypeId()) + "," +
                          pt->getPdxClassName() + "]{";
@@ -1163,7 +1144,8 @@
 
     LOGDEBUG("pdxfield %s ",
              ((myPFT != m_DefaultPdxFieldType) ? myPFT->getFieldName()
-                                               : otherPFT->getFieldName()));
+                                               : otherPFT->getFieldName())
+                 .c_str());
     if (myPFT->equals(m_DefaultPdxFieldType)) {
       fieldTypeId = otherPFT->getTypeId();
     } else if (otherPFT->equals(m_DefaultPdxFieldType)) {
@@ -1243,18 +1225,8 @@
       }
       default: {
         char excpStr[256] = {0};
-        /* adongre - Coverity II
-         * CID 29267: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-         * "sprintf" can cause a
-         * buffer overflow when done incorrectly. Because sprintf() assumes an
-         * arbitrarily long string,
-         * callers must be careful not to overflow the actual space of the
-         * destination.
-         * Use snprintf() instead, or correct precision specifiers.
-         * Fix : using ACE_OS::snprintf
-         */
-        ACE_OS::snprintf(excpStr, 256, "PdxInstance not found typeid  %d ",
-                         static_cast<int>(myPFT->getTypeId()));
+        std::snprintf(excpStr, 256, "PdxInstance not found typeid  %d ",
+                      static_cast<int>(myPFT->getTypeId()));
         throw IllegalStateException(excpStr);
       }
     }
@@ -1369,7 +1341,7 @@
     for (size_t i = 0; i < pdxFieldList->size(); i++) {
       auto currPf = pdxFieldList->at(i);
       LOGDEBUG("toData filedname = %s , isVarLengthType = %d ",
-               currPf->getFieldName(), currPf->IsVariableLengthType());
+               currPf->getFieldName().c_str(), currPf->IsVariableLengthType());
       std::shared_ptr<Cacheable> value = nullptr;
 
       auto&& iter = m_updatedFields.find(currPf->getFieldName());
@@ -1399,7 +1371,7 @@
     for (size_t i = 0; i < pdxFieldList->size(); i++) {
       auto currPf = pdxFieldList->at(i);
       LOGDEBUG("toData1 filedname = %s , isVarLengthType = %d ",
-               currPf->getFieldName(), currPf->IsVariableLengthType());
+               currPf->getFieldName().c_str(), currPf->IsVariableLengthType());
       auto value = m_updatedFields[currPf->getFieldName()];
       writeField(writer, currPf->getFieldName(), currPf->getTypeId(), value);
     }
diff --git a/cppcache/src/PdxReaderWithTypeCollector.cpp b/cppcache/src/PdxReaderWithTypeCollector.cpp
index 44bc9cb..974c603 100644
--- a/cppcache/src/PdxReaderWithTypeCollector.cpp
+++ b/cppcache/src/PdxReaderWithTypeCollector.cpp
@@ -23,8 +23,6 @@
 
 #include "PdxReaderWithTypeCollector.hpp"
 
-#include <ace/OS_NS_stdio.h>
-
 #include <geode/PdxFieldTypes.hpp>
 
 #include "CacheImpl.hpp"
diff --git a/cppcache/src/PdxType.cpp b/cppcache/src/PdxType.cpp
index 04457d9..53bb207 100644
--- a/cppcache/src/PdxType.cpp
+++ b/cppcache/src/PdxType.cpp
@@ -23,8 +23,6 @@
 
 #include "PdxType.hpp"
 
-#include <ace/OS.h>
-
 #include "PdxFieldType.hpp"
 #include "PdxHelper.hpp"
 #include "PdxTypeRegistry.hpp"
diff --git a/cppcache/src/PdxType.hpp b/cppcache/src/PdxType.hpp
index 54b7e40..b76b824 100644
--- a/cppcache/src/PdxType.hpp
+++ b/cppcache/src/PdxType.hpp
@@ -25,8 +25,7 @@
 #include <string>
 #include <vector>
 
-#include <ace/ACE.h>
-#include <ace/Recursive_Thread_Mutex.h>
+#include <ace/RW_Thread_Mutex.h>
 
 #include <geode/CacheableBuiltins.hpp>
 #include <geode/PdxFieldTypes.hpp>
diff --git a/cppcache/src/PdxTypeRegistry.cpp b/cppcache/src/PdxTypeRegistry.cpp
index 6c77596..9c520da 100644
--- a/cppcache/src/PdxTypeRegistry.cpp
+++ b/cppcache/src/PdxTypeRegistry.cpp
@@ -182,7 +182,8 @@
   } else {
     // schedule new expiry task
     auto handler = new PreservedDataExpiryHandler(shared_from_this(), obj);
-    auto id = expiryTaskManager.scheduleExpiryTask(handler, 20, 0, false);
+    auto id = expiryTaskManager.scheduleExpiryTask(
+        handler, std::chrono::seconds(20), std::chrono::seconds::zero(), false);
     pData->setPreservedDataExpiryTaskId(id);
     LOGDEBUG(
         "PdxTypeRegistry::setPreserveData Schedule new expirt task with id=%ld",
diff --git a/cppcache/src/PdxTypeRegistry.hpp b/cppcache/src/PdxTypeRegistry.hpp
index 7998d1e..b2d168e 100644
--- a/cppcache/src/PdxTypeRegistry.hpp
+++ b/cppcache/src/PdxTypeRegistry.hpp
@@ -23,8 +23,7 @@
 #include <map>
 #include <unordered_map>
 
-#include <ace/ACE.h>
-#include <ace/Recursive_Thread_Mutex.h>
+#include <ace/RW_Thread_Mutex.h>
 
 #include <geode/Cache.hpp>
 #include <geode/PdxSerializable.hpp>
diff --git a/cppcache/src/Pool.cpp b/cppcache/src/Pool.cpp
index 4a02faf..129bbc6 100644
--- a/cppcache/src/Pool.cpp
+++ b/cppcache/src/Pool.cpp
@@ -21,12 +21,9 @@
 #include <geode/Pool.hpp>
 
 #include "PoolAttributes.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolHADM.hpp"
 
-/**
- * @file
- */
-
 namespace apache {
 namespace geode {
 namespace client {
diff --git a/cppcache/src/PoolAttributes.hpp b/cppcache/src/PoolAttributes.hpp
index f8a47e6..3fee900 100644
--- a/cppcache/src/PoolAttributes.hpp
+++ b/cppcache/src/PoolAttributes.hpp
@@ -24,8 +24,6 @@
 #include <string>
 #include <vector>
 
-#include <ace/OS.h>
-
 #include <geode/ExceptionTypes.hpp>
 #include <geode/internal/geode_globals.hpp>
 
diff --git a/cppcache/src/PoolFactory.cpp b/cppcache/src/PoolFactory.cpp
index d4af923..deaed13 100644
--- a/cppcache/src/PoolFactory.cpp
+++ b/cppcache/src/PoolFactory.cpp
@@ -16,7 +16,6 @@
  */
 
 #include <ace/INET_Addr.h>
-#include <ace/Recursive_Thread_Mutex.h>
 
 #include <geode/Pool.hpp>
 #include <geode/PoolFactory.hpp>
@@ -26,6 +25,7 @@
 #include "CacheImpl.hpp"
 #include "CacheRegionHelper.hpp"
 #include "PoolAttributes.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "ThinClientPoolHADM.hpp"
 #include "ThinClientPoolStickyDM.hpp"
diff --git a/cppcache/src/PoolManagerImpl.hpp b/cppcache/src/PoolManagerImpl.hpp
index c9f5289..a35eae0 100644
--- a/cppcache/src/PoolManagerImpl.hpp
+++ b/cppcache/src/PoolManagerImpl.hpp
@@ -25,6 +25,7 @@
 #include <string>
 #include <unordered_map>
 
+#include <geode/HashMapOfPools.hpp>
 #include <geode/Region.hpp>
 
 #include "CacheImpl.hpp"
@@ -35,7 +36,6 @@
 
 class Pool;
 class PoolFactory;
-typedef std::unordered_map<std::string, std::shared_ptr<Pool>> HashMapOfPools;
 
 class PoolManagerImpl {
  public:
diff --git a/cppcache/src/PoolStatistics.hpp b/cppcache/src/PoolStatistics.hpp
index b12ed79..8b7e861 100644
--- a/cppcache/src/PoolStatistics.hpp
+++ b/cppcache/src/PoolStatistics.hpp
@@ -26,6 +26,7 @@
 #include "statistics/Statistics.hpp"
 #include "statistics/StatisticsFactory.hpp"
 #include "statistics/StatisticsManager.hpp"
+#include "util/concurrent/spinlock_mutex.hpp"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/PreservedDataExpiryHandler.cpp b/cppcache/src/PreservedDataExpiryHandler.cpp
index 5cf1a3d..e30dd53 100644
--- a/cppcache/src/PreservedDataExpiryHandler.cpp
+++ b/cppcache/src/PreservedDataExpiryHandler.cpp
@@ -22,13 +22,14 @@
  */
 #include "PreservedDataExpiryHandler.hpp"
 
+#include <ace/Reactor.h>
+#include <ace/Timer_Heap.h>
+#include <ace/Timer_Heap_T.h>
+#include <ace/Timer_Queue.h>
+#include <ace/Timer_Queue_Adapters.h>
+#include <ace/svc_export.h>
+
 #include "PdxTypeRegistry.hpp"
-#include "ace/Reactor.h"
-#include "ace/Timer_Heap.h"
-#include "ace/Timer_Heap_T.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Timer_Queue_Adapters.h"
-#include "ace/svc_export.h"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/ProxyRemoteQueryService.cpp b/cppcache/src/ProxyRemoteQueryService.cpp
index 381179c..2174a73 100644
--- a/cppcache/src/ProxyRemoteQueryService.cpp
+++ b/cppcache/src/ProxyRemoteQueryService.cpp
@@ -82,7 +82,7 @@
 
 void ProxyRemoteQueryService::addCqQuery(
     const std::shared_ptr<CqQuery>& cqQuery) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
+  std::lock_guard<decltype(m_cqQueryListLock)> guard(m_cqQueryListLock);
   m_cqQueries.push_back(cqQuery);
 }
 
@@ -113,7 +113,7 @@
 void ProxyRemoteQueryService::closeCqs() { closeCqs(false); }
 
 void ProxyRemoteQueryService::closeCqs(bool keepAlive) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
+  std::lock_guard<decltype(m_cqQueryListLock)> guard(m_cqQueryListLock);
 
   for (auto&& q : m_cqQueries) {
     try {
@@ -135,7 +135,7 @@
 }
 
 QueryService::query_container_type ProxyRemoteQueryService::getCqs() const {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
+  std::lock_guard<decltype(m_cqQueryListLock)> guard(m_cqQueryListLock);
   return m_cqQueries;
 }
 
@@ -160,7 +160,7 @@
 }
 
 void ProxyRemoteQueryService::executeCqs() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
+  std::lock_guard<decltype(m_cqQueryListLock)> guard(m_cqQueryListLock);
 
   for (auto&& q : m_cqQueries) {
     try {
@@ -176,7 +176,7 @@
 }
 
 void ProxyRemoteQueryService::stopCqs() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
+  std::lock_guard<decltype(m_cqQueryListLock)> guard(m_cqQueryListLock);
 
   for (auto&& q : m_cqQueries) {
     try {
diff --git a/cppcache/src/ProxyRemoteQueryService.hpp b/cppcache/src/ProxyRemoteQueryService.hpp
index f8508b9..82ff468 100644
--- a/cppcache/src/ProxyRemoteQueryService.hpp
+++ b/cppcache/src/ProxyRemoteQueryService.hpp
@@ -19,9 +19,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <memory>
 
-#include <ace/Recursive_Thread_Mutex.h>
+#include <memory>
+#include <mutex>
 
 #include <geode/AuthenticatedView.hpp>
 #include <geode/QueryService.hpp>
@@ -81,7 +81,7 @@
   AuthenticatedView* m_authenticatedView;
   query_container_type m_cqQueries;
   // lock for cqQuery list;
-  mutable ACE_Recursive_Thread_Mutex m_cqQueryListLock;
+  mutable std::recursive_mutex m_cqQueryListLock;
 
   friend class AuthenticatedView;
 };
diff --git a/cppcache/src/PutAllPartialResult.cpp b/cppcache/src/PutAllPartialResult.cpp
index 7cbf1c1..84adafb 100644
--- a/cppcache/src/PutAllPartialResult.cpp
+++ b/cppcache/src/PutAllPartialResult.cpp
@@ -20,8 +20,8 @@
 namespace geode {
 namespace client {
 
-PutAllPartialResult::PutAllPartialResult(
-    int totalMapSize, ACE_Recursive_Thread_Mutex& responseLock) {
+PutAllPartialResult::PutAllPartialResult(int totalMapSize,
+                                         std::recursive_mutex& responseLock) {
   m_succeededKeys = std::make_shared<VersionedCacheableObjectPartList>(
       new std::vector<std::shared_ptr<CacheableKey>>(), responseLock);
   m_totalMapSize = totalMapSize;
diff --git a/cppcache/src/PutAllPartialResult.hpp b/cppcache/src/PutAllPartialResult.hpp
index 5da3a62..9b7e658 100644
--- a/cppcache/src/PutAllPartialResult.hpp
+++ b/cppcache/src/PutAllPartialResult.hpp
@@ -20,6 +20,9 @@
 #ifndef GEODE_PUTALLPARTIALRESULT_H_
 #define GEODE_PUTALLPARTIALRESULT_H_
 
+#include <mutex>
+
+#include <ace/RW_Thread_Mutex.h>
 #include <ace/Task.h>
 
 #include <geode/CacheableString.hpp>
@@ -40,8 +43,7 @@
   ACE_RW_Thread_Mutex g_readerWriterLock;
 
  public:
-  PutAllPartialResult(int totalMapSize,
-                      ACE_Recursive_Thread_Mutex& responseLock);
+  PutAllPartialResult(int totalMapSize, std::recursive_mutex& responseLock);
   ~PutAllPartialResult() noexcept final {}
 
   void setTotalMapSize(int totalMapSize) { m_totalMapSize = totalMapSize; }
@@ -86,8 +88,8 @@
   virtual std::string toString() const final {
     char msgStr1[1024];
     if (m_firstFailedKey != nullptr) {
-      ACE_OS::snprintf(msgStr1, 1024, "[ Key =%s ]",
-                       m_firstFailedKey->toString().c_str());
+      std::snprintf(msgStr1, 1024, "[ Key =%s ]",
+                    m_firstFailedKey->toString().c_str());
     }
 
     char msgStr2[1024];
@@ -95,12 +97,12 @@
       // TODO:: impl. CacheableObjectPartList.size();
       int failedKeyNum = m_totalMapSize - m_succeededKeys->size();
       if (failedKeyNum > 0) {
-        ACE_OS::snprintf(
+        std::snprintf(
             msgStr2, 1024,
             "The putAll operation failed to put %d out of %d entries ",
             failedKeyNum, m_totalMapSize);
       } else {
-        ACE_OS::snprintf(
+        std::snprintf(
             msgStr2, 1024,
             "The putAll operation successfully put %d out of %d entries ",
             m_succeededKeys->size(), m_totalMapSize);
@@ -108,8 +110,8 @@
     }
 
     char stringBuf[7000];
-    ACE_OS::snprintf(stringBuf, 7000, "PutAllPartialResult: %s%s", msgStr1,
-                     msgStr2);
+    std::snprintf(stringBuf, 7000, "PutAllPartialResult: %s%s", msgStr1,
+                  msgStr2);
     return std::string(stringBuf);
   }
 };
diff --git a/cppcache/src/PutAllPartialResultServerException.cpp b/cppcache/src/PutAllPartialResultServerException.cpp
index b1cd000..b1a4a6d 100644
--- a/cppcache/src/PutAllPartialResultServerException.cpp
+++ b/cppcache/src/PutAllPartialResultServerException.cpp
@@ -29,7 +29,7 @@
 
 PutAllPartialResultServerException::PutAllPartialResultServerException() {
   LOGDEBUG("Partial keys are processed in putAll");
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   m_result = std::make_shared<PutAllPartialResult>(-1, responseLock);
 }
 
diff --git a/cppcache/src/Queue.hpp b/cppcache/src/Queue.hpp
index bdab592..715277d 100644
--- a/cppcache/src/Queue.hpp
+++ b/cppcache/src/Queue.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_QUEUE_H_
-#define GEODE_QUEUE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,12 +15,15 @@
  * limitations under the License.
  */
 
-#include <deque>
+#pragma once
 
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Time_Value.h>
+#ifndef GEODE_QUEUE_H_
+#define GEODE_QUEUE_H_
+
+#include <chrono>
+#include <condition_variable>
+#include <deque>
+#include <mutex>
 
 namespace apache {
 namespace geode {
@@ -39,76 +37,62 @@
    * should be deleted in the destructor, and maximum size of queue.
    */
   explicit Queue(bool deleteObjs = true, const uint32_t maxSize = 0)
-      : m_cond(m_mutex),
-        m_deleteObjs(deleteObjs),
-        m_maxSize(maxSize),
-        m_closed(false) {}
+      : m_deleteObjs(deleteObjs), m_maxSize(maxSize), m_closed(false) {}
 
   ~Queue() { close(); }
 
   T get() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
     return getNoLock();
   }
 
-  /** wait "sec" secs, "usec" micros time until notified */
-  T getUntil(uint32_t sec, uint32_t usec = 0) {
-    auto&& mp = get();
-
+  template <class _Rep, class _Period>
+  T getFor(const std::chrono::duration<_Rep, _Period>& duration) {
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
+    auto&& mp = getNoLock();
     if (mp == nullptr) {
-      ACE_Time_Value interval(sec + usec / 1000000, usec % 1000000);
-      ACE_Time_Value stopAt(ACE_OS::gettimeofday());
-      stopAt += interval;
-
-      while (!m_closed && mp == nullptr && ACE_OS::gettimeofday() < stopAt) {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-        if (m_cond.wait(&stopAt) != -1) mp = getNoLock();
-      }
+      m_cond.wait_for(_guard, duration, [this, &mp] {
+        return !(m_closed || nullptr == (mp = getNoLock()));
+      });
     }
     return mp;
   }
 
   bool put(T mp) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
     if (m_maxSize > 0 && m_queue.size() >= m_maxSize) {
       return false;
     }
     return putNoLock(mp);
   }
 
-  bool putUntil(T mp, uint32_t sec, uint32_t usec = 0) {
+  template <class _Rep, class _Period>
+  bool putFor(T mp, const std::chrono::duration<_Rep, _Period>& duration) {
     if (m_maxSize > 0) {
-      {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-        if (m_queue.size() < m_maxSize) {
-          return putNoLock(mp);
-        }
+      std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
+      if (m_queue.size() < m_maxSize) {
+        return putNoLock(mp);
       }
-      ACE_Time_Value interval(sec + usec / 1000000, usec % 1000000);
-      ACE_Time_Value stopAt(ACE_OS::gettimeofday());
-      stopAt += interval;
 
-      while (ACE_OS::gettimeofday() < stopAt) {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-        m_cond.wait(&stopAt);
-        if (m_queue.size() < m_maxSize) {
-          return putNoLock(mp);
-        }
+      if (m_cond.wait_for(_guard, duration,
+                          [this] { return m_queue.size() < m_maxSize; })) {
+        return putNoLock(mp);
       }
+
       return false;
     } else {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+      std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
       return putNoLock(mp);
     }
   }
 
   void open() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
     m_closed = false;
   }
 
   void close() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
 
     if (m_deleteObjs) {
       while (m_queue.size() > 0) {
@@ -119,11 +103,11 @@
       m_queue.clear();
     }
     m_closed = true;
-    m_cond.signal();
+    m_cond.notify_all();
   }
 
   uint32_t size() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
+    std::unique_lock<decltype(m_mutex)> _guard(m_mutex);
     return static_cast<uint32_t>(m_queue.size());
   }
 
@@ -133,13 +117,13 @@
   inline T getNoLock() {
     T mp = nullptr;
 
-    uint32_t queueSize = static_cast<uint32_t>(m_queue.size());
+    auto queueSize = static_cast<uint32_t>(m_queue.size());
     if (queueSize > 0) {
       mp = m_queue.back();
       m_queue.pop_back();
       // signal the waiting putter threads, if any
       if (m_maxSize > 0 && queueSize == m_maxSize) {
-        m_cond.signal();
+        m_cond.notify_one();
       }
     }
     return mp;
@@ -150,7 +134,7 @@
       m_queue.push_front(mp);
       // signal the waiting getter threads, if any
       if (m_queue.size() == 1) {
-        m_cond.signal();
+        m_cond.notify_one();
       }
       return true;
     }
@@ -158,12 +142,13 @@
   }
 
   std::deque<T> m_queue;
-  ACE_Recursive_Thread_Mutex m_mutex;
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_cond;
+  std::recursive_mutex m_mutex;
+  std::condition_variable_any m_cond;
   bool m_deleteObjs;
   const uint32_t m_maxSize;
   bool m_closed;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/ReadWriteLock.cpp b/cppcache/src/ReadWriteLock.cpp
index aa02c6a..2ce5385 100644
--- a/cppcache/src/ReadWriteLock.cpp
+++ b/cppcache/src/ReadWriteLock.cpp
@@ -23,44 +23,6 @@
 namespace geode {
 namespace client {
 
-TimedTryWriteGuard::TimedTryWriteGuard(ACE_RW_Thread_Mutex& lock, uint32_t usec)
-    : lock_(lock), isAcquired_(false), mutex_(), cond_(mutex_) {
-  int cnt = 10;
-  uint32_t timeSlice = usec / cnt;
-  do {
-    if (lock_.tryacquire_write() != -1) {
-      isAcquired_ = true;
-      break;
-    }
-    ACE_Time_Value tv = ACE_OS::gettimeofday();
-    ACE_Time_Value offset(0, timeSlice);
-    tv += offset;
-    ACE_Time_Value stopAt(tv);
-    ACE_OS::thr_yield();
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(cond_.mutex());
-    cond_.waitUntil(&stopAt);
-  } while (cnt-- > 0);
-}
-
-bool TimedTryWriteGuard::tryAcquireLock(uint32_t usec) {
-  int cnt = 10;
-  uint32_t timeSlice = usec / cnt;
-  do {
-    if (lock_.tryacquire_write() != -1) {
-      isAcquired_ = true;
-      break;
-    }
-    ACE_Time_Value tv = ACE_OS::gettimeofday();
-    ACE_Time_Value offset(0, timeSlice);
-    tv += offset;
-    ACE_Time_Value stopAt(tv);
-    ACE_OS::thr_yield();
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(cond_.mutex());
-    cond_.waitUntil(&stopAt);
-  } while (cnt-- > 0);
-  return isAcquired();
-}
-
 TryReadGuard::TryReadGuard(ACE_RW_Thread_Mutex& lock,
                            const volatile bool& exitCondition)
     : lock_(lock), isAcquired_(false) {
diff --git a/cppcache/src/ReadWriteLock.hpp b/cppcache/src/ReadWriteLock.hpp
index 825d277..ecad9b8 100644
--- a/cppcache/src/ReadWriteLock.hpp
+++ b/cppcache/src/ReadWriteLock.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_READWRITELOCK_H_
-#define GEODE_READWRITELOCK_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,28 +15,18 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_READWRITELOCK_H_
+#define GEODE_READWRITELOCK_H_
+
 #include <ace/RW_Thread_Mutex.h>
 
-#include "Condition.hpp"
+#include <geode/internal/geode_globals.hpp>
 
 namespace apache {
 namespace geode {
 namespace client {
-class TimedTryWriteGuard {
- public:
-  TimedTryWriteGuard(ACE_RW_Thread_Mutex& lock, uint32_t usec);
-  bool tryAcquireLock(uint32_t usec);
-  ~TimedTryWriteGuard() {
-    if (isAcquired_) lock_.release();
-  }
-  bool isAcquired() const { return isAcquired_; }
-
- private:
-  ACE_RW_Thread_Mutex& lock_;
-  bool isAcquired_;
-  ACE_Recursive_Thread_Mutex mutex_;
-  Condition cond_;
-};
 
 class APACHE_GEODE_EXPORT ReadGuard {
  public:
diff --git a/cppcache/src/RegionAttributes.cpp b/cppcache/src/RegionAttributes.cpp
index f696f12..8c37059 100644
--- a/cppcache/src/RegionAttributes.cpp
+++ b/cppcache/src/RegionAttributes.cpp
@@ -19,7 +19,6 @@
 #include <string>
 
 #include <ace/DLL.h>
-#include <ace/OS.h>
 
 #include <geode/Cache.hpp>
 #include <geode/DataInput.hpp>
diff --git a/cppcache/src/RegionExpiryHandler.cpp b/cppcache/src/RegionExpiryHandler.cpp
index 062f0fb..71ffc46 100644
--- a/cppcache/src/RegionExpiryHandler.cpp
+++ b/cppcache/src/RegionExpiryHandler.cpp
@@ -17,15 +17,16 @@
 
 #include "RegionExpiryHandler.hpp"
 
+#include <ace/Reactor.h>
+#include <ace/Timer_Heap.h>
+#include <ace/Timer_Heap_T.h>
+#include <ace/Timer_Queue.h>
+#include <ace/Timer_Queue_Adapters.h>
+#include <ace/svc_export.h>
+
 #include "CacheImpl.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "RegionInternal.hpp"
-#include "ace/Reactor.h"
-#include "ace/Timer_Heap.h"
-#include "ace/Timer_Heap_T.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Timer_Queue_Adapters.h"
-#include "ace/svc_export.h"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/RegionFactory.cpp b/cppcache/src/RegionFactory.cpp
index 166444f..ab947dd 100644
--- a/cppcache/src/RegionFactory.cpp
+++ b/cppcache/src/RegionFactory.cpp
@@ -18,9 +18,6 @@
 #include <map>
 #include <string>
 
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/Cache.hpp>
 #include <geode/CacheFactory.hpp>
 #include <geode/PoolManager.hpp>
@@ -156,7 +153,7 @@
 RegionFactory& RegionFactory::setInitialCapacity(int initialCapacity) {
   char excpStr[256] = {0};
   if (initialCapacity < 0) {
-    ACE_OS::snprintf(excpStr, 256, "initialCapacity must be >= 0 ");
+    std::snprintf(excpStr, 256, "initialCapacity must be >= 0 ");
     throw IllegalArgumentException(excpStr);
   }
   m_regionAttributesFactory->setInitialCapacity(initialCapacity);
diff --git a/cppcache/src/RemoteQuery.cpp b/cppcache/src/RemoteQuery.cpp
index 0c28ea5..fce5803 100644
--- a/cppcache/src/RemoteQuery.cpp
+++ b/cppcache/src/RemoteQuery.cpp
@@ -19,6 +19,7 @@
 
 #include "ResultSetImpl.hpp"
 #include "StructSetImpl.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "ThinClientRegion.hpp"
 #include "UserAttributes.hpp"
@@ -96,10 +97,10 @@
   } else {
     if (values->size() % fieldNameVec.size() != 0) {
       char exMsg[1024];
-      ACE_OS::snprintf(exMsg, 1023,
-                       "%s: Number of values coming from "
-                       "server has to be exactly divisible by field count",
-                       func);
+      std::snprintf(exMsg, 1023,
+                    "%s: Number of values coming from "
+                    "server has to be exactly divisible by field count",
+                    func);
       throw MessageException(exMsg);
     } else {
       LOGFINEST("%s: creating StructSet for query: %s", func,
diff --git a/cppcache/src/RemoteQuery.hpp b/cppcache/src/RemoteQuery.hpp
index 71dda84..263d2e0 100644
--- a/cppcache/src/RemoteQuery.hpp
+++ b/cppcache/src/RemoteQuery.hpp
@@ -32,16 +32,13 @@
 #include <geode/internal/geode_globals.hpp>
 
 #include "CacheImpl.hpp"
-#include "ThinClientBaseDM.hpp"
-
-/**
- * @file
- */
 
 namespace apache {
 namespace geode {
 namespace client {
 
+class ThinClientBaseDM;
+
 class APACHE_GEODE_EXPORT RemoteQuery : public Query {
   std::string m_queryString;
   std::shared_ptr<RemoteQueryService> m_queryService;
diff --git a/cppcache/src/RemoteQueryService.cpp b/cppcache/src/RemoteQueryService.cpp
index dcec032..8a3d079 100644
--- a/cppcache/src/RemoteQueryService.cpp
+++ b/cppcache/src/RemoteQueryService.cpp
@@ -72,8 +72,6 @@
     return std::shared_ptr<Query>(
         new RemoteQuery(querystring, shared_from_this(), m_tccdm));
   } else {
-    auto ua =
-        TSSUserAttributesWrapper::s_geodeTSSUserAttributes->getUserAttributes();
     TryReadGuard guard(m_rwLock, m_invalid);
 
     if (m_invalid) {
@@ -83,7 +81,8 @@
 
     LOGDEBUG("RemoteQueryService: creating a new query: " + querystring);
     return std::shared_ptr<Query>(new RemoteQuery(
-        querystring, shared_from_this(), m_tccdm, ua->getAuthenticatedView()));
+        querystring, shared_from_this(), m_tccdm,
+        UserAttributes::threadLocalUserAttributes->getAuthenticatedView()));
   }
 }
 
diff --git a/cppcache/src/RemoteQueryService.hpp b/cppcache/src/RemoteQueryService.hpp
index 6003eeb..9de7ac8 100644
--- a/cppcache/src/RemoteQueryService.hpp
+++ b/cppcache/src/RemoteQueryService.hpp
@@ -23,7 +23,7 @@
 #include <memory>
 #include <string>
 
-#include <ace/Recursive_Thread_Mutex.h>
+#include <ace/RW_Thread_Mutex.h>
 
 #include <geode/QueryService.hpp>
 #include <geode/internal/geode_globals.hpp>
diff --git a/cppcache/src/SerializationRegistry.cpp b/cppcache/src/SerializationRegistry.cpp
index 5040c9e..7918144 100644
--- a/cppcache/src/SerializationRegistry.cpp
+++ b/cppcache/src/SerializationRegistry.cpp
@@ -230,7 +230,8 @@
 
   TypeFactoryMethod createType = nullptr;
 
-  theTypeMap.findDataSerializableFixedId(fixedId, createType);
+  theTypeMap.findDataSerializableFixedId(static_cast<DSFid>(fixedId),
+                                         createType);
 
   if (createType == nullptr) {
     throw IllegalStateException("Unregistered type in deserialization");
@@ -285,11 +286,12 @@
 }
 
 void SerializationRegistry::addDataSerializableFixedIdType(
-    int32_t id, TypeFactoryMethod func) {
+    internal::DSFid id, TypeFactoryMethod func) {
   theTypeMap.rebindDataSerializableFixedId(id, func);
 }
 
-void SerializationRegistry::removeDataSerializableFixeIdType(int32_t id) {
+void SerializationRegistry::removeDataSerializableFixeIdType(
+    internal::DSFid id) {
   theTypeMap.unbindDataSerializableFixedId(id);
 }
 
@@ -367,36 +369,45 @@
 void TheTypeMap::clear() {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableMapLock);
-  m_dataSerializableMap->unbind_all();
+  m_dataSerializableMap.clear();
 
   std::lock_guard<util::concurrent::spinlock_mutex> guard2(
       m_dataSerializableFixedIdMapLock);
-  m_dataSerializableFixedIdMap->unbind_all();
+  m_dataSerializableFixedIdMap.clear();
 
   std::lock_guard<util::concurrent::spinlock_mutex> guard3(
       m_pdxSerializableMapLock);
-  m_pdxSerializableMap->unbind_all();
+  m_pdxSerializableMap.clear();
 }
 
 void TheTypeMap::findDataSerializable(int32_t id,
                                       TypeFactoryMethod& func) const {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableMapLock);
-  m_dataSerializableMap->find(id, func);
+  const auto& found = m_dataSerializableMap.find(id);
+  if (found != m_dataSerializableMap.end()) {
+    func = found->second;
+  }
 }
 
-void TheTypeMap::findDataSerializableFixedId(int32_t id,
+void TheTypeMap::findDataSerializableFixedId(DSFid dsfid,
                                              TypeFactoryMethod& func) const {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableFixedIdMapLock);
-  m_dataSerializableFixedIdMap->find(id, func);
+  const auto& found = m_dataSerializableFixedIdMap.find(dsfid);
+  if (found != m_dataSerializableFixedIdMap.end()) {
+    func = found->second;
+  }
 }
 
 void TheTypeMap::findDataSerializablePrimitive(DSCode dsCode,
                                                TypeFactoryMethod& func) const {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializablePrimitiveMapLock);
-  m_dataSerializablePrimitiveMap->find(dsCode, func);
+  const auto& found = m_dataSerializablePrimitiveMap.find(dsCode);
+  if (found != m_dataSerializablePrimitiveMap.end()) {
+    func = found->second;
+  }
 }
 
 void TheTypeMap::bindDataSerializable(TypeFactoryMethod func, int32_t id) {
@@ -412,49 +423,34 @@
 
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableMapLock);
-  int bindRes = m_dataSerializableMap->bind(id, func);
-  if (bindRes == 1) {
+  const auto& result = m_dataSerializableMap.emplace(id, func);
+  if (!result.second) {
     LOGERROR("A class with ID %d is already registered.", id);
     throw IllegalStateException("A class with given ID is already registered.");
-  } else if (bindRes == -1) {
-    LOGERROR("Unknown error while adding class ID %d to map.", id);
-    throw IllegalStateException("Unknown error while adding type to map.");
   }
 }
 
 void TheTypeMap::rebindDataSerializable(int32_t id, TypeFactoryMethod func) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableMapLock);
-  int bindRes = m_dataSerializableMap->rebind(id, func);
-  if (bindRes == -1) {
-    LOGERROR(
-        "Unknown error "
-        "while adding class ID %d to map.",
-        id);
-    throw IllegalStateException(
-        "Unknown error "
-        "while adding type to map.");
-  }
+  m_dataSerializableMap[id] = func;
 }
 
 void TheTypeMap::unbindDataSerializable(int32_t id) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableMapLock);
-  m_dataSerializableMap->unbind(id);
+  m_dataSerializableMap.erase(id);
 }
 
 void TheTypeMap::bindDataSerializablePrimitive(TypeFactoryMethod func,
                                                DSCode dsCode) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializablePrimitiveMapLock);
-  int bindRes = m_dataSerializablePrimitiveMap->bind(dsCode, func);
-  if (bindRes == 1) {
+  const auto& result = m_dataSerializablePrimitiveMap.emplace(dsCode, func);
+  if (!result.second) {
     LOGERROR("A class with DSCode %d is already registered.", dsCode);
     throw IllegalStateException(
         "A class with given DSCode is already registered.");
-  } else if (bindRes == -1) {
-    LOGERROR("Unknown error while adding DSCode %d to map.", dsCode);
-    throw IllegalStateException("Unknown error while adding type to map.");
   }
 }
 
@@ -462,16 +458,16 @@
                                                  TypeFactoryMethod func) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializablePrimitiveMapLock);
-  m_dataSerializablePrimitiveMap->rebind(dsCode, func);
+  m_dataSerializablePrimitiveMap[dsCode] = func;
 }
 
 void TheTypeMap::bindDataSerializableFixedId(TypeFactoryMethod func) {
   auto obj = func();
 
-  int32_t id = 0;
+  DSFid id;
   if (const auto dataSerializableFixedId =
           std::dynamic_pointer_cast<DataSerializableFixedId>(obj)) {
-    id = static_cast<int64_t>(dataSerializableFixedId->getDSFID());
+    id = dataSerializableFixedId->getDSFID();
   } else {
     throw UnsupportedOperationException(
         "TheTypeMap::bindDataSerializableInternal: Unknown serialization "
@@ -480,37 +476,25 @@
 
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableFixedIdMapLock);
-  int bindRes = m_dataSerializableFixedIdMap->bind(id, func);
-  if (bindRes == 1) {
-    LOGERROR(
-        "A fixed class with "
-        "ID %d is already registered.",
-        id);
+  const auto& result = m_dataSerializableFixedIdMap.emplace(id, func);
+  if (!result.second) {
+    LOGERROR("A fixed class with ID %d is already registered.", id);
     throw IllegalStateException(
-        "A fixed class with "
-        "given ID is already registered.");
-  } else if (bindRes == -1) {
-    LOGERROR(
-        "Unknown error "
-        "while adding class ID %d to map2.",
-        id);
-    throw IllegalStateException(
-        "Unknown error "
-        "while adding to map2.");
+        "A fixed class with given ID is already registered.");
   }
 }
 
-void TheTypeMap::rebindDataSerializableFixedId(int32_t id,
+void TheTypeMap::rebindDataSerializableFixedId(internal::DSFid id,
                                                TypeFactoryMethod func) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableFixedIdMapLock);
-  m_dataSerializableFixedIdMap->rebind(id, func);
+  m_dataSerializableFixedIdMap[id] = func;
 }
 
-void TheTypeMap::unbindDataSerializableFixedId(int32_t id) {
+void TheTypeMap::unbindDataSerializableFixedId(internal::DSFid id) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_dataSerializableFixedIdMapLock);
-  m_dataSerializableFixedIdMap->unbind(id);
+  m_dataSerializableFixedIdMap.erase(id);
 }
 
 void TheTypeMap::bindPdxSerializable(TypeFactoryMethodPdx func) {
@@ -519,17 +503,12 @@
       m_pdxSerializableMapLock);
   auto&& objFullName = obj->getClassName();
 
-  int bindRes = m_pdxSerializableMap->bind(objFullName, func);
-
-  if (bindRes == 1) {
+  const auto& result = m_pdxSerializableMap.emplace(objFullName, func);
+  if (!result.second) {
     LOGERROR("A object with FullName " + objFullName +
              " is already registered.");
     throw IllegalStateException(
         "A Object with given FullName is already registered.");
-  } else if (bindRes == -1) {
-    LOGERROR("Unknown error while adding Pdx Object named " + objFullName +
-             " to map.");
-    throw IllegalStateException("Unknown error while adding type to map.");
   }
 }
 
@@ -537,27 +516,23 @@
                                      TypeFactoryMethodPdx& func) const {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_pdxSerializableMapLock);
-  m_pdxSerializableMap->find(objFullName, func);
+  const auto& found = m_pdxSerializableMap.find(objFullName);
+  if (found != m_pdxSerializableMap.end()) {
+    func = found->second;
+  }
 }
 
 void TheTypeMap::rebindPdxSerializable(std::string objFullName,
                                        TypeFactoryMethodPdx func) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_pdxSerializableMapLock);
-  int bindRes = m_pdxSerializableMap->rebind(objFullName, func);
-  if (bindRes == -1) {
-    LOGERROR("Unknown error while adding Pdx Object FullName " + objFullName +
-             " to map.");
-    throw IllegalStateException(
-        "Unknown error "
-        "while adding type to map.");
-  }
+  m_pdxSerializableMap[objFullName] = func;
 }
 
 void TheTypeMap::unbindPdxSerializable(const std::string& objFullName) {
   std::lock_guard<util::concurrent::spinlock_mutex> guard(
       m_pdxSerializableMapLock);
-  m_pdxSerializableMap->unbind(objFullName);
+  m_pdxSerializableMap.erase(objFullName);
 }
 
 void PdxTypeHandler::serialize(
diff --git a/cppcache/src/SerializationRegistry.hpp b/cppcache/src/SerializationRegistry.hpp
index 329cc62..bd46bcd 100644
--- a/cppcache/src/SerializationRegistry.hpp
+++ b/cppcache/src/SerializationRegistry.hpp
@@ -28,10 +28,6 @@
 #include <typeinfo>
 #include <unordered_map>
 
-#include <ace/Hash_Map_Manager.h>
-#include <ace/Null_Mutex.h>
-#include <ace/Thread_Mutex.h>
-
 #include <geode/DataOutput.hpp>
 #include <geode/DataSerializable.hpp>
 #include <geode/Delta.hpp>
@@ -48,33 +44,27 @@
 #include "config.h"
 #include "util/concurrent/spinlock_mutex.hpp"
 
-namespace ACE_VERSIONED_NAMESPACE_NAME {
+namespace std {
 
-#if defined(_MACOSX)
-// TODO CMake check type int64_t
 template <>
-class ACE_Export ACE_Hash<int64_t> {
- public:
-  // NOLINTNEXTLINE(google-runtime-int)
-  inline unsigned long operator()(int64_t t) const {
-    // NOLINTNEXTLINE(google-runtime-int)
-    return static_cast<unsigned long>(t);
+struct hash<apache::geode::client::internal::DSCode>
+    : public std::unary_function<apache::geode::client::internal::DSCode,
+                                 size_t> {
+  size_t operator()(apache::geode::client::internal::DSCode val) const {
+    return std::hash<int32_t>{}(static_cast<int32_t>(val));
   }
 };
 
-#endif
-
-using apache::geode::client::DSCode;
 template <>
-class ACE_Hash<DSCode> {
- public:
-  inline u_long operator()(const DSCode key) {
-    return static_cast<u_long>(key);
+struct hash<apache::geode::client::internal::DSFid>
+    : public std::unary_function<apache::geode::client::internal::DSFid,
+                                 size_t> {
+  size_t operator()(apache::geode::client::internal::DSFid val) const {
+    return std::hash<int32_t>{}(static_cast<int32_t>(val));
   }
 };
 
-// NOLINTNEXTLINE(google-readability-namespace-comments)
-}  // namespace ACE_VERSIONED_NAMESPACE_NAME
+}  // namespace std
 
 namespace apache {
 namespace geode {
@@ -83,21 +73,14 @@
 using internal::DataSerializableInternal;
 using internal::DataSerializablePrimitive;
 
-typedef ACE_Hash_Map_Manager<DSCode, TypeFactoryMethod, ACE_Null_Mutex>
-    DSCodeToFactoryMap;
-
-typedef ACE_Hash_Map_Manager<int32_t, TypeFactoryMethod, ACE_Null_Mutex>
-    IdToFactoryMap;
-
-typedef ACE_Hash_Map_Manager<std::string, TypeFactoryMethodPdx, ACE_Null_Mutex>
-    StrToPdxFactoryMap;
-
 class TheTypeMap : private NonCopyable {
  private:
-  DSCodeToFactoryMap* m_dataSerializablePrimitiveMap;
-  IdToFactoryMap* m_dataSerializableMap;
-  IdToFactoryMap* m_dataSerializableFixedIdMap;
-  StrToPdxFactoryMap* m_pdxSerializableMap;
+  std::unordered_map<internal::DSCode, TypeFactoryMethod>
+      m_dataSerializablePrimitiveMap;
+  std::unordered_map<int32_t, TypeFactoryMethod> m_dataSerializableMap;
+  std::unordered_map<internal::DSFid, TypeFactoryMethod>
+      m_dataSerializableFixedIdMap;
+  std::unordered_map<std::string, TypeFactoryMethodPdx> m_pdxSerializableMap;
   mutable util::concurrent::spinlock_mutex m_dataSerializablePrimitiveMapLock;
   mutable util::concurrent::spinlock_mutex m_dataSerializableMapLock;
   mutable util::concurrent::spinlock_mutex m_dataSerializableFixedIdMapLock;
@@ -107,35 +90,9 @@
   std::unordered_map<std::type_index, int32_t> typeToClassId;
 
  public:
-  TheTypeMap() {
-    // map to hold DataSerializablePrimitive
-    m_dataSerializablePrimitiveMap = new DSCodeToFactoryMap();
+  TheTypeMap() { setup(); }
 
-    // map to hold Data Serializable IDs
-    m_dataSerializableMap = new IdToFactoryMap();
-
-    // map to hold internal Data Serializable Fixed IDs
-    m_dataSerializableFixedIdMap = new IdToFactoryMap();
-
-    // map to hold PDX types <string, funptr>.
-    m_pdxSerializableMap = new StrToPdxFactoryMap();
-
-    setup();
-  }
-
-  virtual ~TheTypeMap() {
-    if (m_dataSerializableMap != nullptr) {
-      delete m_dataSerializableMap;
-    }
-
-    if (m_dataSerializableFixedIdMap != nullptr) {
-      delete m_dataSerializableFixedIdMap;
-    }
-
-    if (m_pdxSerializableMap != nullptr) {
-      delete m_pdxSerializableMap;
-    }
-  }
+  ~TheTypeMap() noexcept = default;
 
   void setup();
 
@@ -149,13 +106,15 @@
 
   void unbindDataSerializable(int32_t id);
 
-  void findDataSerializableFixedId(int32_t id, TypeFactoryMethod& func) const;
+  void findDataSerializableFixedId(internal::DSFid id,
+                                   TypeFactoryMethod& func) const;
 
   void bindDataSerializableFixedId(TypeFactoryMethod func);
 
-  void rebindDataSerializableFixedId(int32_t idd, TypeFactoryMethod func);
+  void rebindDataSerializableFixedId(internal::DSFid id,
+                                     TypeFactoryMethod func);
 
-  void unbindDataSerializableFixedId(int32_t id);
+  void unbindDataSerializableFixedId(internal::DSFid id);
 
   void bindPdxSerializable(TypeFactoryMethodPdx func);
 
@@ -287,9 +246,10 @@
 
   void addDataSerializableFixedIdType(TypeFactoryMethod func);
 
-  void addDataSerializableFixedIdType(int32_t id, TypeFactoryMethod func);
+  void addDataSerializableFixedIdType(internal::DSFid id,
+                                      TypeFactoryMethod func);
 
-  void removeDataSerializableFixeIdType(int32_t id);
+  void removeDataSerializableFixeIdType(internal::DSFid id);
 
   void setDataSerializablePrimitiveType(TypeFactoryMethod func, DSCode dsCode);
 
diff --git a/cppcache/src/ServerLocation.hpp b/cppcache/src/ServerLocation.hpp
index b43b4b4..1461203 100644
--- a/cppcache/src/ServerLocation.hpp
+++ b/cppcache/src/ServerLocation.hpp
@@ -108,12 +108,7 @@
 
   inline bool isValid() const { return !m_serverName.empty() && m_port >= 0; }
 
-  inline std::string& getEpString() {
-    /*if (m_epString.empty() == false) {
-      return m_epString;
-    }*/
-    return m_epString;
-  }
+  inline const std::string& getEpString() { return m_epString; }
 
   inline int hashcode() const {
     int prime = 31;
diff --git a/cppcache/src/Set.hpp b/cppcache/src/Set.hpp
deleted file mode 100644
index 89c791c..0000000
--- a/cppcache/src/Set.hpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#pragma once
-
-#ifndef GEODE_SET_H_
-#define GEODE_SET_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <unordered_set>
-
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
-#include "NonCopyable.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-
-// A synchronized Set using std::unordered_set<T>
-
-/* adongre
- * CID 28616: Other violation (COPY_WITHOUT_ASSIGN)
- * Class "apache::geode::client::Set<unsigned short>::Iterator" has user-written
- * copyi
- * `constructor "apache::geode::client::Set<unsigned
- * short>::Iterator::Iterator(apache::geode::client::Set<unsigned
- * short>::Iterator const &)" i
- * but no corresponding user-written assignment operator.
- *
- * FIX : Make the class non copyable
- */
-template <typename T>
-class APACHE_GEODE_EXPORT Set : private NonAssignable {
- public:
-  // Iterator for a synchronized Set
-  class Iterator {
-   private:
-    Set<T>& m_set;
-    typename std::unordered_set<T>::const_iterator m_iter;
-
-    explicit Iterator(Set<T>& set) : m_set(set) {
-      m_set.m_mutex.acquire();
-      m_iter = set.m_set.begin();
-    }
-    // Never defined.
-    Iterator();
-
-   public:
-    Iterator(const Iterator& other) : m_set(other.m_set) {
-      m_set.m_mutex.acquire();
-      m_iter = other.m_iter;
-    }
-
-    inline const T& next() { return *(m_iter++); }
-
-    inline bool hasNext() const { return (m_iter != m_set.m_set.end()); }
-
-    ~Iterator() { m_set.m_mutex.release(); }
-
-    friend class Set;
-  };
-
-  Set() : m_set() {}
-
-  ~Set() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    m_set.clear();
-  }
-
-  inline bool insert(const T& key) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    return m_set.insert(key).second;
-  }
-
-  inline bool find(const T& key) const {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    return (m_set.find(key) != m_set.end());
-  }
-
-  inline bool erase(const T& key) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    return (m_set.erase(key) > 0);
-  }
-
-  inline size_t size() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    return m_set.size();
-  }
-
-  inline void clear() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    m_set.clear();
-  }
-
-  inline bool empty() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-
-    return m_set.empty();
-  }
-
-  inline Iterator iterator() { return Iterator(*this); }
-
- private:
-  std::unordered_set<T> m_set;
-  ACE_Recursive_Thread_Mutex m_mutex;
-};
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_SET_H_
diff --git a/cppcache/src/SslSockStream.cpp b/cppcache/src/SslSockStream.cpp
index a394799..7a30cb0 100644
--- a/cppcache/src/SslSockStream.cpp
+++ b/cppcache/src/SslSockStream.cpp
@@ -17,7 +17,7 @@
 
 #include "SslSockStream.hpp"
 
-#include <ace/OS_NS_stdio.h>
+#include <ace/OS.h>
 
 #include <geode/ExceptionTypes.hpp>
 
@@ -31,8 +31,8 @@
   void *func = m_dll.symbol(function_name);
   if (func == nullptr) {
     char msg[1000];
-    ACE_OS::snprintf(msg, 1000, "cannot find function %s in library %s",
-                     function_name, "cryptoImpl");
+    std::snprintf(msg, 1000, "cannot find function %s in library %s",
+                  function_name, "cryptoImpl");
     LOGERROR(msg);
     throw IllegalStateException(msg);
   }
@@ -46,7 +46,7 @@
     LOGERROR("Failed to open cryptoImpl . Errno: %d : %s", lastError,
              ACE_OS::strerror(lastError));
     char msg[1000] = {0};
-    ACE_OS::snprintf(msg, 1000, "cannot open library: %s", libName);
+    std::snprintf(msg, 1000, "cannot open library: %s", libName);
     LOGERROR(msg);
     throw FileNotFoundException(msg);
   }
diff --git a/cppcache/src/SuspendedTxExpiryHandler.cpp b/cppcache/src/SuspendedTxExpiryHandler.cpp
index ab5e50f..d203722 100644
--- a/cppcache/src/SuspendedTxExpiryHandler.cpp
+++ b/cppcache/src/SuspendedTxExpiryHandler.cpp
@@ -16,14 +16,15 @@
  */
 #include "SuspendedTxExpiryHandler.hpp"
 
+#include <ace/Reactor.h>
+#include <ace/Timer_Heap.h>
+#include <ace/Timer_Heap_T.h>
+#include <ace/Timer_Queue.h>
+#include <ace/Timer_Queue_Adapters.h>
+#include <ace/svc_export.h>
+
 #include "CacheImpl.hpp"
 #include "ExpiryTaskManager.hpp"
-#include "ace/Reactor.h"
-#include "ace/Timer_Heap.h"
-#include "ace/Timer_Heap_T.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Timer_Queue_Adapters.h"
-#include "ace/svc_export.h"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/SystemProperties.cpp b/cppcache/src/SystemProperties.cpp
index fda13a3..bc69dc9 100644
--- a/cppcache/src/SystemProperties.cpp
+++ b/cppcache/src/SystemProperties.cpp
@@ -17,9 +17,7 @@
 
 #include <cstdlib>
 #include <string>
-
-#include <ace/DLL.h>
-#include <ace/OS.h>
+#include <thread>
 
 #include <geode/CacheableKey.hpp>
 #include <geode/ExceptionTypes.hpp>
@@ -68,7 +66,6 @@
 const char ConflateEvents[] = "conflate-events";
 const char SecurityClientDhAlgo[] = "security-client-dhalgo";
 const char SecurityClientKsPath[] = "security-client-kspath";
-const char GridClient[] = "grid-client";
 const char AutoReadyForEvents[] = "auto-ready-for-events";
 const char SslEnabled[] = "ssl-enabled";
 const char TimeStatisticsEnabled[] = "enable-time-statistics";
@@ -101,7 +98,6 @@
 
 const int DefaultConnectionPoolSize = 5;
 
-const bool DefaultGridClient = false;
 const bool DefaultAutoReadyForEvents = true;
 const bool DefaultSslEnabled = false;
 const bool DefaultTimeStatisticsEnabled = false;  // or true;
@@ -125,7 +121,7 @@
 constexpr auto DefaultNotifyAckInterval = std::chrono::seconds(1);
 constexpr auto DefaultNotifyDupCheckLife = std::chrono::seconds(300);
 const char DefaultSecurityPrefix[] = "security-";
-const uint32_t DefaultThreadPoolSize = ACE_OS::num_processors() * 2;
+const uint32_t DefaultThreadPoolSize = std::thread::hardware_concurrency() * 2;
 constexpr auto DefaultSuspendedTxTimeout = std::chrono::seconds(30);
 constexpr auto DefaultTombstoneTimeout = std::chrono::seconds(480);
 // not disable; all region api will use chunk handler thread
@@ -175,7 +171,6 @@
       m_connectTimeout(DefaultConnectTimeout),
       m_connectWaitTimeout(DefaultConnectWaitTimeout),
       m_bucketWaitTimeout(DefaultBucketWaitTimeout),
-      m_gridClient(DefaultGridClient),
       m_autoReadyForEvents(DefaultAutoReadyForEvents),
       m_sslEnabled(DefaultSslEnabled),
       m_timestatisticsEnabled(DefaultTimeStatisticsEnabled),
@@ -307,8 +302,6 @@
     parseDurationProperty(property, std::string(value), m_bucketWaitTimeout);
   } else if (property == DisableShufflingEndpoint) {
     m_disableShufflingEndpoint = parseBooleanProperty(property, value);
-  } else if (property == GridClient) {
-    m_gridClient = parseBooleanProperty(property, value);
   } else if (property == AutoReadyForEvents) {
     m_autoReadyForEvents = parseBooleanProperty(property, value);
   } else if (property == SslEnabled) {
@@ -420,9 +413,6 @@
   settings += "\n  enable-time-statistics = ";
   settings += getEnableTimeStatistics() ? "true" : "false";
 
-  settings += "\n  grid-client = ";
-  settings += isGridClient() ? "true" : "false";
-
   settings += "\n  heap-lru-delta = ";
   settings += std::to_string(heapLRUDelta());
 
diff --git a/cppcache/src/TSSTXStateWrapper.cpp b/cppcache/src/TSSTXStateWrapper.cpp
index 15d53e7..e51ffc9 100644
--- a/cppcache/src/TSSTXStateWrapper.cpp
+++ b/cppcache/src/TSSTXStateWrapper.cpp
@@ -14,12 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * TSSTXStateWrapper.cpp
- *
- *  Created on: 09-Feb-2011
- *      Author: ankurs
- */
 
 #include "TSSTXStateWrapper.hpp"
 
@@ -28,16 +22,14 @@
 namespace apache {
 namespace geode {
 namespace client {
-ACE_TSS<TSSTXStateWrapper> TSSTXStateWrapper::s_geodeTSSTXState;
 
-TSSTXStateWrapper::TSSTXStateWrapper() { m_txState = nullptr; }
-
-TSSTXStateWrapper::~TSSTXStateWrapper() {
+TSSTXStateWrapper::~TSSTXStateWrapper() noexcept {
   if (m_txState) {
     delete m_txState;
     m_txState = nullptr;
   }
 }
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TSSTXStateWrapper.hpp b/cppcache/src/TSSTXStateWrapper.hpp
index 467e8d4..3567b78 100644
--- a/cppcache/src/TSSTXStateWrapper.hpp
+++ b/cppcache/src/TSSTXStateWrapper.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TSSTXSTATEWRAPPER_H_
-#define GEODE_TSSTXSTATEWRAPPER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,36 +14,41 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * TSSTXStateWrapper.hpp
- *
- *  Created on: 09-Feb-2011
- *      Author: ankurs
- */
 
-#include <ace/TSS_T.h>
+#pragma once
+
+#ifndef GEODE_TSSTXSTATEWRAPPER_H_
+#define GEODE_TSSTXSTATEWRAPPER_H_
 
 #include "TXId.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 class TXState;
 
 class TSSTXStateWrapper {
  public:
-  TSSTXStateWrapper();
-  virtual ~TSSTXStateWrapper();
+  inline TSSTXStateWrapper() : m_txState(nullptr){};
 
-  static ACE_TSS<TSSTXStateWrapper> s_geodeTSSTXState;
-  TXState* getTXState() { return m_txState; }
-  void setTXState(TXState* conn) { m_txState = conn; }
+  ~TSSTXStateWrapper() noexcept;
+
+  inline static TSSTXStateWrapper& get() {
+    static thread_local TSSTXStateWrapper instance;
+    return instance;
+  }
+
+  inline TXState* getTXState() { return m_txState; }
+
+  inline void setTXState(TXState* conn) { m_txState = conn; }
 
  private:
   TXState* m_txState;
   TSSTXStateWrapper& operator=(const TSSTXStateWrapper&);
   TSSTXStateWrapper(const TSSTXStateWrapper&);
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TXCleaner.cpp b/cppcache/src/TXCleaner.cpp
index 87d31cc..40da8ed 100644
--- a/cppcache/src/TXCleaner.cpp
+++ b/cppcache/src/TXCleaner.cpp
@@ -14,12 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * TxCleaner.cpp
- *
- *  Created on: Nov 13, 2015
- *      Author: sshcherbakov
- */
 
 #include "TXCleaner.hpp"
 
@@ -28,8 +22,7 @@
 namespace client {
 
 TXCleaner::TXCleaner(CacheTransactionManagerImpl* cacheTxMgr) {
-  m_txStateWrapper = TSSTXStateWrapper::s_geodeTSSTXState;
-  m_txState = m_txStateWrapper->getTXState();
+  m_txState = TSSTXStateWrapper::get().getTXState();
   m_cacheTxMgr = cacheTxMgr;
 }
 
@@ -45,15 +38,15 @@
   if (m_txState != nullptr) {
     m_cacheTxMgr->removeTx(m_txState->getTransactionId().getId());
   }
-  if (m_txStateWrapper != nullptr && m_txState != nullptr) {
-    m_txStateWrapper->setTXState(nullptr);
+  if (m_txState != nullptr) {
+    TSSTXStateWrapper::get().setTXState(nullptr);
   }
 }
 
 TXState* TXCleaner::getTXState() {
-  return (m_txStateWrapper == nullptr) ? nullptr
-                                       : m_txStateWrapper->getTXState();
+  return TSSTXStateWrapper::get().getTXState();
 }
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TXCleaner.hpp b/cppcache/src/TXCleaner.hpp
index 7ce0f9a..776835c 100644
--- a/cppcache/src/TXCleaner.hpp
+++ b/cppcache/src/TXCleaner.hpp
@@ -43,7 +43,6 @@
   TXState* getTXState();
 
  private:
-  TSSTXStateWrapper* m_txStateWrapper;
   TXState* m_txState;
   CacheTransactionManagerImpl* m_cacheTxMgr;
 
diff --git a/cppcache/src/Task.hpp b/cppcache/src/Task.hpp
index 30340ad..5612422 100644
--- a/cppcache/src/Task.hpp
+++ b/cppcache/src/Task.hpp
@@ -20,9 +20,9 @@
 #ifndef GEODE_Task_H_
 #define GEODE_Task_H_
 
+#include <atomic>
 #include <memory>
-
-#include <ace/Task.h>
+#include <thread>
 
 #include "AppDomainContext.hpp"
 #include "DistributedSystemImpl.hpp"
@@ -30,69 +30,63 @@
 namespace apache {
 namespace geode {
 namespace client {
-const char NC_thread[] = "NC thread";
+
+/**
+ * Re-implementation of the Task class based on std::thread rather then
+ * ACE_Task.
+ */
 template <class T>
-class APACHE_GEODE_EXPORT Task : public ACE_Task_Base {
+class Task {
  public:
-  /// Handle timeout events.
-  typedef int (T::*OPERATION)(volatile bool& isRunning);
+  typedef void (T::*Method)(std::atomic<bool>& isRunning);
 
-  // op_handler is the receiver of the timeout event. timeout is the method to
-  // be executed by op_handler_
-  Task(T* op_handler, OPERATION op)
-      : op_handler_(op_handler),
-        m_op(op),
-        m_run(false),
-        m_threadName(NC_thread),
-        m_appDomainContext(createAppDomainContext()) {}
+  inline Task(T* target, Method method, const char* threadName)
+      : target_(target),
+        method_(method),
+        threadName_(threadName),
+        runnable_(false),
+        appDomainContext_(createAppDomainContext()) {}
 
-  // op_handler is the receiver of the timeout event. timeout is the method to
-  // be executed by op_handler_
-  Task(T* op_handler, OPERATION op, const char* tn)
-      : op_handler_(op_handler),
-        m_op(op),
-        m_run(false),
-        m_threadName(tn),
-        m_appDomainContext(createAppDomainContext()) {}
+  inline ~Task() noexcept { stop(); };
 
-  ~Task() {}
-
-  void start() {
-    m_run = true;
-    activate();
+  inline void start() {
+    runnable_ = true;
+    thread_ = std::thread(&Task::svc, this);
   }
 
-  void stop() {
-    if (m_run) {
-      m_run = false;
-      wait();
+  inline void stop() noexcept {
+    stopNoblock();
+    wait();
+  }
+
+  inline void stopNoblock() noexcept { runnable_ = false; }
+
+  inline void wait() noexcept {
+    if (thread_.joinable()) {
+      thread_.join();
     }
   }
 
-  void stopNoblock() { m_run = false; }
+  inline void svc(void) {
+    DistributedSystemImpl::setThreadName(threadName_);
 
-  int svc(void) {
-    DistributedSystemImpl::setThreadName(m_threadName);
-
-    if (m_appDomainContext) {
-      int ret;
-      m_appDomainContext->run([this, &ret]() {
-        ret = (this->op_handler_->*this->m_op)(this->m_run);
-      });
-      return ret;
+    if (appDomainContext_) {
+      appDomainContext_->run(
+          [this]() { (this->target_->*this->method_)(this->runnable_); });
     } else {
-      return (this->op_handler_->*m_op)(m_run);
+      (this->target_->*method_)(runnable_);
     }
   }
 
  private:
-  T* op_handler_;
-  /// Handle timeout events.
-  OPERATION m_op;
-  volatile bool m_run;
-  const char* m_threadName;
-  std::unique_ptr<AppDomainContext> m_appDomainContext;
+  std::thread thread_;
+  T* target_;
+  Method method_;
+  const char* threadName_;
+  std::atomic<bool> runnable_;
+  std::unique_ptr<AppDomainContext> appDomainContext_;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TcpConn.cpp b/cppcache/src/TcpConn.cpp
index eacc6d5..ec88007 100644
--- a/cppcache/src/TcpConn.cpp
+++ b/cppcache/src/TcpConn.cpp
@@ -17,7 +17,9 @@
 
 #include "TcpConn.hpp"
 
-#include <memory.h>
+#include <chrono>
+#include <memory>
+#include <thread>
 
 #include <ace/INET_Addr.h>
 #include <ace/OS.h>
@@ -98,8 +100,8 @@
     LOGERROR("Failed to create socket. Errno: %d: %s", lastError,
              ACE_OS::strerror(lastError));
     char msg[256];
-    ACE_OS::snprintf(msg, 256, "TcpConn::connect failed with errno: %d: %s",
-                     lastError, ACE_OS::strerror(lastError));
+    std::snprintf(msg, 256, "TcpConn::connect failed with errno: %d: %s",
+                  lastError, ACE_OS::strerror(lastError));
     throw GeodeIOException(msg);
   }
 
@@ -175,8 +177,8 @@
           "TcpConn::listen Attempt to listen timed out after " +
           to_string(waitSeconds) + ".");
     }
-    ACE_OS::snprintf(msg, 256, "TcpConn::listen failed with errno: %d: %s",
-                     lastError, ACE_OS::strerror(lastError));
+    std::snprintf(msg, 256, "TcpConn::listen failed with errno: %d: %s",
+                  lastError, ACE_OS::strerror(lastError));
     throw GeodeIOException(msg);
   }
 }
@@ -230,18 +232,18 @@
           "TcpConn::connect Attempt to connect timed out after" +
           to_string(waitMicroSeconds) + ".");
     }
-    ACE_OS::snprintf(msg, 256, "TcpConn::connect failed with errno: %d: %s",
-                     lastError, ACE_OS::strerror(lastError));
+    std::snprintf(msg, 256, "TcpConn::connect failed with errno: %d: %s",
+                  lastError, ACE_OS::strerror(lastError));
     //  this is only called by constructor, so we must delete m_io
     close();
     throw GeodeIOException(msg);
   }
   int rc = this->m_io->enable(ACE_NONBLOCK);
   if (-1 == rc) {
-    char msg[250];
+    char msg[256];
     int32_t lastError = ACE_OS::last_error();
-    ACE_OS::snprintf(msg, 256, "TcpConn::NONBLOCK: %d: %s", lastError,
-                     ACE_OS::strerror(lastError));
+    std::snprintf(msg, 256, "TcpConn::NONBLOCK: %d: %s", lastError,
+                  ACE_OS::strerror(lastError));
 
     LOGINFO(msg);
   }
@@ -265,22 +267,8 @@
 }
 
 size_t TcpConn::socketOp(TcpConn::SockOp op, char *buff, size_t len,
-                         std::chrono::microseconds waitSeconds) {
+                         std::chrono::microseconds waitDuration) {
   {
-    /*{
-      ACE_HANDLE handle = m_io->get_handle();
-       int val = ACE::get_flags (handle);
-
-      if (ACE_BIT_DISABLED (val, ACE_NONBLOCK))
-      {
-        //ACE::set_flags (handle, ACE_NONBLOCK);
-        LOGINFO("Flag is not set");
-      }else
-      {
-          LOGINFO("Flag is set");
-      }
-    }*/
-
     GF_DEV_ASSERT(m_io != nullptr);
     GF_DEV_ASSERT(buff != nullptr);
 
@@ -294,10 +282,8 @@
     }
 #endif
 
-    ACE_Time_Value waitTime(waitSeconds);
-    ACE_Time_Value endTime(ACE_OS::gettimeofday());
-    endTime += waitTime;
-    ACE_Time_Value sleepTime(0, 100);
+    ACE_Time_Value waitTime(waitDuration);
+    auto endTime = std::chrono::steady_clock::now() + waitDuration;
     size_t readLen = 0;
     ssize_t retVal;
     bool errnoSet = false;
@@ -324,7 +310,7 @@
         if (retVal < 0) {
           int32_t lastError = ACE_OS::last_error();
           if (lastError == EAGAIN) {
-            ACE_OS::sleep(sleepTime);
+            std::this_thread::sleep_for(std::chrono::microseconds(100));
           } else {
             errnoSet = true;
             break;
@@ -337,7 +323,7 @@
 
         buff += readLen;
         if (sendlen == 0) break;
-        waitTime = endTime - ACE_OS::gettimeofday();
+        waitTime = endTime - std::chrono::steady_clock::now();
         if (waitTime <= ACE_Time_Value::zero) break;
       } while (sendlen > 0);
       if (errnoSet) break;
diff --git a/cppcache/src/TcpConn.hpp b/cppcache/src/TcpConn.hpp
index b602796..8fddb8a 100644
--- a/cppcache/src/TcpConn.hpp
+++ b/cppcache/src/TcpConn.hpp
@@ -22,6 +22,7 @@
 
 #include <ace/OS.h>
 #include <ace/SOCK_Stream.h>
+#include <boost/interprocess/mapped_region.hpp>
 
 #include <geode/internal/geode_globals.hpp>
 
@@ -62,17 +63,17 @@
   int32_t maxSize(ACE_HANDLE sock, int32_t flag, int32_t size);
 
   virtual size_t socketOp(SockOp op, char* buff, size_t len,
-                          std::chrono::microseconds waitSeconds);
+                          std::chrono::microseconds waitDuration);
 
   virtual void createSocket(ACE_HANDLE sock);
 
  public:
   size_t m_chunkSize;
 
-  static int getDefaultChunkSize() {
+  static size_t getDefaultChunkSize() {
     // Attempt to set chunk size to nearest OS page size
     // for perf improvement
-    int pageSize = ACE_OS::getpagesize();
+    auto pageSize = boost::interprocess::mapped_region::get_page_size();
     if (pageSize > 16000000) {
       return 16000000;
     } else if (pageSize > 0) {
diff --git a/cppcache/src/TcpSslConn.cpp b/cppcache/src/TcpSslConn.cpp
index 2b2bbbf..8712ad0 100644
--- a/cppcache/src/TcpSslConn.cpp
+++ b/cppcache/src/TcpSslConn.cpp
@@ -17,6 +17,9 @@
 
 #include "TcpSslConn.hpp"
 
+#include <chrono>
+#include <thread>
+
 #include <geode/SystemProperties.hpp>
 
 #include "CacheImpl.hpp"
@@ -31,7 +34,7 @@
   const char* libName = "cryptoImpl";
   if (m_dll.open(libName, RTLD_NOW | RTLD_GLOBAL, 0) == -1) {
     char msg[1000] = {0};
-    ACE_OS::snprintf(msg, 1000, "cannot open library: %s", libName);
+    std::snprintf(msg, 1000, "cannot open library: %s", libName);
     LOGERROR(msg);
     throw FileNotFoundException(msg);
   }
@@ -40,9 +43,9 @@
       reinterpret_cast<gf_create_SslImpl>(m_dll.symbol("gf_create_SslImpl"));
   if (func == nullptr) {
     char msg[1000];
-    ACE_OS::snprintf(msg, 1000,
-                     "cannot find function %s in library gf_create_SslImpl",
-                     "cryptoImpl");
+    std::snprintf(msg, 1000,
+                  "cannot find function %s in library gf_create_SslImpl",
+                  "cryptoImpl");
     LOGERROR(msg);
     throw IllegalStateException(msg);
   }
@@ -71,10 +74,8 @@
           "TcpSslConn::listen Attempt to listen timed out after" +
           to_string(waitSeconds) + ".");
     }
-    // sprintf( msg, "TcpSslConn::listen failed with errno: %d: %s", lastError,
-    // ACE_OS::strerror(lastError) );
-    ACE_OS::snprintf(msg, 255, "TcpSslConn::listen failed with errno: %d: %s",
-                     lastError, ACE_OS::strerror(lastError));
+    std::snprintf(msg, 255, "TcpSslConn::listen failed with errno: %d: %s",
+                  lastError, ACE_OS::strerror(lastError));
     throw GeodeIOException(msg);
   }
 }
@@ -106,8 +107,8 @@
           "TcpSslConn::connect Attempt to connect timed out after " +
           to_string(waitMicroSeconds) + ".");
     }
-    ACE_OS::snprintf(msg, 256, "TcpSslConn::connect failed with errno: %d: %s",
-                     lastError, ACE_OS::strerror(lastError));
+    std::snprintf(msg, 256, "TcpSslConn::connect failed with errno: %d: %s",
+                  lastError, ACE_OS::strerror(lastError));
     // this is only called by constructor, so we must delete m_ssl
     _GEODE_SAFE_DELETE(m_ssl);
     throw GeodeIOException(msg);
@@ -125,7 +126,7 @@
 }
 
 size_t TcpSslConn::socketOp(TcpConn::SockOp op, char* buff, size_t len,
-                            std::chrono::microseconds waitSeconds) {
+                            std::chrono::microseconds waitDuration) {
   {
     GF_DEV_ASSERT(m_ssl != nullptr);
     GF_DEV_ASSERT(buff != nullptr);
@@ -140,10 +141,8 @@
     }
 #endif
     // passing wait time as micro seconds
-    ACE_Time_Value waitTime(waitSeconds);
-    ACE_Time_Value endTime(ACE_OS::gettimeofday());
-    endTime += waitTime;
-    ACE_Time_Value sleepTime(0, 100);
+    ACE_Time_Value waitTime(waitDuration);
+    auto endTime = std::chrono::steady_clock::now() + waitDuration;
     size_t readLen = 0;
     bool errnoSet = false;
 
@@ -170,7 +169,7 @@
         if (retVal < 0) {
           int32_t lastError = ACE_OS::last_error();
           if (lastError == EAGAIN) {
-            ACE_OS::sleep(sleepTime);
+            std::this_thread::sleep_for(std::chrono::microseconds(100));
           } else {
             errnoSet = true;
             break;
@@ -183,7 +182,7 @@
 
         buff += readLen;
 
-        waitTime = endTime - ACE_OS::gettimeofday();
+        waitTime = endTime - std::chrono::steady_clock::now();
         if (waitTime <= ACE_Time_Value::zero) break;
       } while (sendlen > 0);
       if (errnoSet) break;
diff --git a/cppcache/src/TcpSslConn.hpp b/cppcache/src/TcpSslConn.hpp
index 52b6c69..02f3ea5 100644
--- a/cppcache/src/TcpSslConn.hpp
+++ b/cppcache/src/TcpSslConn.hpp
@@ -47,7 +47,7 @@
 
  protected:
   size_t socketOp(SockOp op, char* buff, size_t len,
-                  std::chrono::microseconds waitSeconds) override;
+                  std::chrono::microseconds waitDuration) override;
 
   void createSocket(ACE_HANDLE sock) override;
 
diff --git a/cppcache/src/TcrChunkedContext.hpp b/cppcache/src/TcrChunkedContext.hpp
index 3e548c2..e5df84c 100644
--- a/cppcache/src/TcrChunkedContext.hpp
+++ b/cppcache/src/TcrChunkedContext.hpp
@@ -41,7 +41,6 @@
   ACE_Semaphore* m_finalizeSema;
   std::shared_ptr<Exception> m_ex;
   bool m_inSameThread;
-  std::unique_ptr<AppDomainContext> appDomainContext;
 
  protected:
   uint16_t m_dsmemId;
@@ -56,7 +55,6 @@
       : m_finalizeSema(nullptr),
         m_ex(nullptr),
         m_inSameThread(false),
-        appDomainContext(createAppDomainContext()),
         m_dsmemId(0) {}
   virtual ~TcrChunkedResult() {}
   void setFinalizeSemaphore(ACE_Semaphore* finalizeSema) {
@@ -73,14 +71,7 @@
   void fireHandleChunk(const uint8_t* bytes, int32_t len,
                        uint8_t isLastChunkWithSecurity,
                        const CacheImpl* cacheImpl) {
-    if (appDomainContext) {
-      appDomainContext->run(
-          [this, bytes, len, isLastChunkWithSecurity, cacheImpl]() {
-            handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
-          });
-    } else {
-      handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
-    }
+    handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
   }
 
   /**
diff --git a/cppcache/src/TcrConnection.cpp b/cppcache/src/TcrConnection.cpp
index 031d136..bdfa00e 100644
--- a/cppcache/src/TcrConnection.cpp
+++ b/cppcache/src/TcrConnection.cpp
@@ -50,7 +50,8 @@
     throw ex;                                         \
   }
 bool TcrConnection::InitTcrConnection(
-    TcrEndpoint* endpointObj, const char* endpoint, Set<uint16_t>& ports,
+    TcrEndpoint* endpointObj, const char* endpoint,
+    synchronized_set<std::unordered_set<uint16_t>>& ports,
     bool isClientNotification, bool isSecondary,
     std::chrono::microseconds connectTimeout) {
   m_conn = nullptr;
@@ -63,9 +64,9 @@
   m_queueSize = 0;
   m_dh = nullptr;
   // m_chunksProcessSema = 0;
-  m_creationTime = ACE_OS::gettimeofday();
+  m_creationTime = clock::now();
   connectionId = INITIAL_CONNECTION_ID;
-  m_lastAccessed = ACE_OS::gettimeofday();
+  m_lastAccessed = clock::now();
   auto cacheImpl = m_poolDM->getConnectionManager().getCacheImpl();
   const auto& distributedSystem = cacheImpl->getDistributedSystem();
   const auto& sysProp = distributedSystem.getSystemProperties();
@@ -127,10 +128,10 @@
     ports.insert(m_port);
   } else {
     // add the local ports to message
-    Set<uint16_t>::Iterator iter = ports.iterator();
+    auto&& lock = ports.make_lock();
     handShakeMsg.writeInt(static_cast<int32_t>(ports.size()));
-    while (iter.hasNext()) {
-      handShakeMsg.writeInt(static_cast<int32_t>(iter.next()));
+    for (const auto& port : ports) {
+      handShakeMsg.writeInt(static_cast<int32_t>(port));
     }
   }
 
@@ -709,29 +710,7 @@
     const TcrMessage& request, size_t len, TcrMessageReply& reply,
     std::chrono::microseconds sendTimeoutSec,
     std::chrono::microseconds receiveTimeoutSec) {
-  int32_t msgType = request.getMessageType();
-  // ACE_OS::memcpy(&msgType, buffer, 4);
-  // msgType = ntohl(msgType);
-
-  /*receiveTimeoutSec = (msgType == TcrMessage::QUERY ||
-    msgType == TcrMessage::QUERY_WITH_PARAMETERS ||
-    msgType == TcrMessage::EXECUTECQ_WITH_IR_MSG_TYPE ||
-    msgType == TcrMessage::GETDURABLECQS_MSG_TYPE ||
-    msgType == TcrMessage::EXECUTE_FUNCTION ||
-    msgType == TcrMessage::EXECUTE_REGION_FUNCTION ||
-    msgType == TcrMessage::EXECUTE_REGION_FUNCTION_SINGLE_HOP)
-    ? reply.getTimeout() : receiveTimeoutSec;
-
-  //send + recieve should be part of API timeout
-  sendTimeoutSec = (msgType == TcrMessage::QUERY ||
-    msgType == TcrMessage::QUERY_WITH_PARAMETERS ||
-    msgType == TcrMessage::EXECUTECQ_WITH_IR_MSG_TYPE ||
-    msgType == TcrMessage::GETDURABLECQS_MSG_TYPE ||
-    msgType == TcrMessage::EXECUTE_FUNCTION ||
-    msgType == TcrMessage::EXECUTE_REGION_FUNCTION ||
-    msgType == TcrMessage::EXECUTE_REGION_FUNCTION_SINGLE_HOP)
-    ? reply.getTimeout() : sendTimeoutSec;
-    */
+  auto msgType = request.getMessageType();
   switch (msgType) {
     case TcrMessage::QUERY:
     case TcrMessage::QUERY_WITH_PARAMETERS:
@@ -747,18 +726,7 @@
     default:
       break;
   }
-  /*if((msgType == TcrMessage::QUERY ||
-    msgType == TcrMessage::QUERY_WITH_PARAMETERS ||
-    msgType == TcrMessage::EXECUTECQ_WITH_IR_MSG_TYPE ||
-    msgType == TcrMessage::GETDURABLECQS_MSG_TYPE ||
-    msgType == TcrMessage::EXECUTE_FUNCTION ||
-    msgType == TcrMessage::EXECUTE_REGION_FUNCTION))
-  {
-    receiveTimeoutSec = reply.getTimeout();
-    sendTimeoutSec = reply.getTimeout();
-  }*/
 
-  // send(buffer, len, sendTimeoutSec);
   std::chrono::microseconds timeSpent{0};
   send(timeSpent, request.getMsgData(), len, sendTimeoutSec, true);
 
@@ -893,7 +861,7 @@
     char* fullMessage;
     *recvLen = HEADER_LENGTH + msgLen;
     _GEODE_NEW(fullMessage, char[HEADER_LENGTH + msgLen]);
-    ACE_OS::memcpy(fullMessage, msg_header, HEADER_LENGTH);
+    std::memcpy(fullMessage, msg_header, HEADER_LENGTH);
     return fullMessage;
     // exit(0);
   }
@@ -903,7 +871,7 @@
   char* fullMessage;
   *recvLen = HEADER_LENGTH + msgLen;
   _GEODE_NEW(fullMessage, char[HEADER_LENGTH + msgLen]);
-  ACE_OS::memcpy(fullMessage, msg_header, HEADER_LENGTH);
+  std::memcpy(fullMessage, msg_header, HEADER_LENGTH);
 
   std::chrono::microseconds mesgBodyTimeout = receiveTimeoutSec;
   if (isNotificationMessage) {
@@ -937,20 +905,7 @@
       "TcrConnection::readMessage: received message body from "
       "endpoint %s; bytes: %s",
       m_endpoint,
-      Utils::convertBytesToString(fullMessage + HEADER_LENGTH, msgLen)
-
-          .c_str());
-
-  // This is the test case when msg type is GET_CLIENT_PR_METADATA and msgLen is
-  // 0.
-  /*if (request == TcrMessage::GET_CLIENT_PR_METADATA) {
-  LOGCONFIG("Amey request == TcrMessage::GET_CLIENT_PR_METADATA");
-  char* fullMessage2;
-  *recvLen = HEADER_LENGTH;
-  _GEODE_NEW( fullMessage2, char[HEADER_LENGTH ] );
-  ACE_OS::memcpy(fullMessage2, msg_header, HEADER_LENGTH);
-  return fullMessage2;
-  }*/
+      Utils::convertBytesToString(fullMessage + HEADER_LENGTH, msgLen).c_str());
 
   return fullMessage;
 }
@@ -1102,16 +1057,6 @@
 }
 
 void TcrConnection::close() {
-  // If this is a short lived grid client, don't bother with this close ack
-  // message
-  if (m_poolDM->getConnectionManager()
-          .getCacheImpl()
-          ->getDistributedSystem()
-          .getSystemProperties()
-          .isGridClient()) {
-    return;
-  }
-
   TcrMessage* closeMsg = TcrMessage::getCloseConnMessage(
       m_poolDM->getConnectionManager().getCacheImpl());
   try {
@@ -1399,13 +1344,7 @@
     return false;
   }
 
-  ACE_Time_Value _expiryTime(expiryTime);
-
-  if (ACE_OS::gettimeofday() - m_creationTime > _expiryTime) {
-    return true;
-  } else {
-    return false;
-  }
+  return (clock::now() - m_creationTime) > expiryTime;
 }
 
 bool TcrConnection::isIdle(const std::chrono::milliseconds& idleTime) {
@@ -1413,18 +1352,14 @@
     return false;
   }
 
-  ACE_Time_Value _idleTime(idleTime);
-
-  if (ACE_OS::gettimeofday() - m_lastAccessed > _idleTime) {
-    return true;
-  } else {
-    return false;
-  }
+  return (clock::now() - m_lastAccessed) > idleTime;
 }
 
-void TcrConnection::touch() { m_lastAccessed = ACE_OS::gettimeofday(); }
+void TcrConnection::touch() { m_lastAccessed = clock::now(); }
 
-ACE_Time_Value TcrConnection::getLastAccessed() { return m_lastAccessed; }
+TcrConnection::time_point TcrConnection::getLastAccessed() {
+  return m_lastAccessed;
+}
 
 uint8_t TcrConnection::getOverrides(const SystemProperties* props) {
   uint8_t conflateByte = 0;
@@ -1440,7 +1375,7 @@
 }
 
 void TcrConnection::updateCreationTime() {
-  m_creationTime = ACE_OS::gettimeofday();
+  m_creationTime = clock::now();
   touch();
 }
 
diff --git a/cppcache/src/TcrConnection.hpp b/cppcache/src/TcrConnection.hpp
index 904db27..64d78e4 100644
--- a/cppcache/src/TcrConnection.hpp
+++ b/cppcache/src/TcrConnection.hpp
@@ -31,8 +31,8 @@
 
 #include "Connector.hpp"
 #include "DiffieHellman.hpp"
-#include "Set.hpp"
 #include "TcrMessage.hpp"
+#include "util/synchronized_set.hpp"
 
 #define DEFAULT_TIMEOUT_RETRIES 12
 #define PRIMARY_SERVER_TO_CLIENT 101
@@ -86,6 +86,9 @@
 class TcrConnectionManager;
 class APACHE_GEODE_EXPORT TcrConnection {
  public:
+  using clock = std::chrono::steady_clock;
+  using time_point = clock::time_point;
+
   /** Create one connection, endpoint is in format of hostname:portno
    * It will do handshake with j-server. There're 2 types of handshakes:
    * 1) handshake for request
@@ -111,7 +114,8 @@
    * @param     numPorts  Size of ports list
    */
   bool InitTcrConnection(
-      TcrEndpoint* endpointObj, const char* endpoint, Set<uint16_t>& ports,
+      TcrEndpoint* endpointObj, const char* endpoint,
+      synchronized_set<std::unordered_set<uint16_t>>& ports,
       bool isClientNotification = false, bool isSecondary = false,
       std::chrono::microseconds connectTimeout = DEFAULT_CONNECT_TIMEOUT);
 
@@ -275,7 +279,7 @@
   void touch();
   bool hasExpired(const std::chrono::milliseconds& expiryTime);
   bool isIdle(const std::chrono::milliseconds& idleTime);
-  ACE_Time_Value getLastAccessed();
+  time_point getLastAccessed();
   void updateCreationTime();
 
   int64_t getConnectionId() {
@@ -403,8 +407,10 @@
 
   // semaphore to synchronize with the chunked response processing thread
   ACE_Semaphore m_chunksProcessSema;
-  ACE_Time_Value m_creationTime;
-  ACE_Time_Value m_lastAccessed;
+
+  time_point m_creationTime;
+  time_point m_lastAccessed;
+
   // Disallow copy constructor and assignment operator.
   TcrConnection(const TcrConnection&);
   TcrConnection& operator=(const TcrConnection&);
diff --git a/cppcache/src/TcrConnectionManager.cpp b/cppcache/src/TcrConnectionManager.cpp
index efccda8..cb6dcae 100644
--- a/cppcache/src/TcrConnectionManager.cpp
+++ b/cppcache/src/TcrConnectionManager.cpp
@@ -82,7 +82,7 @@
   auto &props = m_cache->getDistributedSystem().getSystemProperties();
   m_isDurable = !props.durableClientId().empty();
   auto pingInterval = (props.pingInterval() / 2);
-  if (!props.isGridClient() && !isPool) {
+  if (!isPool) {
     ACE_Event_Handler *connectionChecker =
         new ExpiryHandler_T<TcrConnectionManager>(
             this, &TcrConnectionManager::checkConnection);
@@ -127,32 +127,33 @@
       GfErrTypeToException("TcrConnectionManager::init", err);
     }
 
-    m_redundancyTask = new Task<TcrConnectionManager>(
-        this, &TcrConnectionManager::redundancy, NC_Redundancy);
+    m_redundancyTask = std::unique_ptr<Task<TcrConnectionManager>>(
+        new Task<TcrConnectionManager>(this, &TcrConnectionManager::redundancy,
+                                       NC_Redundancy));
     m_redundancyTask->start();
 
     m_redundancyManager->m_HAenabled = true;
   }
 
-  if (!props.isGridClient()) {
-    startFailoverAndCleanupThreads(isPool);
-  }
+  startFailoverAndCleanupThreads(isPool);
 }
 
 void TcrConnectionManager::startFailoverAndCleanupThreads(bool isPool) {
-  if (m_failoverTask == nullptr || m_cleanupTask == nullptr) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_distMngrsLock);
-    if (m_failoverTask == nullptr && !isPool) {
-      m_failoverTask = new Task<TcrConnectionManager>(
-          this, &TcrConnectionManager::failover, NC_Failover);
+  if (!isPool && (m_failoverTask == nullptr || m_cleanupTask == nullptr)) {
+    std::lock_guard<decltype(m_distMngrsLock)> _guard(m_distMngrsLock);
+    if (!m_failoverTask) {
+      m_failoverTask = std::unique_ptr<Task<TcrConnectionManager>>(
+          new Task<TcrConnectionManager>(this, &TcrConnectionManager::failover,
+                                         NC_Failover));
       m_failoverTask->start();
     }
-    if (m_cleanupTask == nullptr && !isPool) {
-      if (m_redundancyManager->m_HAenabled && !isPool) {
+    if (!m_cleanupTask) {
+      if (m_redundancyManager->m_HAenabled) {
         m_redundancyManager->startPeriodicAck();
       }
-      m_cleanupTask = new Task<TcrConnectionManager>(
-          this, &TcrConnectionManager::cleanup, NC_CleanUp);
+      m_cleanupTask = std::unique_ptr<Task<TcrConnectionManager>>(
+          new Task<TcrConnectionManager>(this, &TcrConnectionManager::cleanup,
+                                         NC_CleanUp));
       m_cleanupTask->start();
     }
   }
@@ -168,7 +169,7 @@
     m_failoverTask->stopNoblock();
     m_failoverSema.release();
     m_failoverTask->wait();
-    _GEODE_SAFE_DELETE(m_failoverTask);
+    m_failoverTask = nullptr;
   }
 
   auto cacheAttributes = m_cache->getAttributes();
@@ -183,7 +184,7 @@
       m_redundancyTask->wait();
       // now stop cleanup task
       // stopCleanupTask();
-      _GEODE_SAFE_DELETE(m_redundancyTask);
+      m_redundancyTask = nullptr;
     }
 
     m_redundancyManager->close();
@@ -206,22 +207,18 @@
     m_cleanupTask->wait();
     // Clean notification lists if something remains in there; see bug #250
     cleanNotificationLists();
-    _GEODE_SAFE_DELETE(m_cleanupTask);
+    m_cleanupTask = nullptr;
 
     // sanity cleanup of any remaining endpoints with warning; see bug #298
     //  cleanup of endpoints, when regions are destroyed via notification
     {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-
-      size_t numEndPoints = m_endpoints.current_size();
+      auto &&guard = m_endpoints.make_lock();
+      auto numEndPoints = m_endpoints.size();
       if (numEndPoints > 0) {
         LOGFINE("TCCM: endpoints remain in destructor");
       }
-      for (ACE_Map_Manager<std::string, TcrEndpoint *,
-                           ACE_Recursive_Thread_Mutex>::iterator iter =
-               m_endpoints.begin();
-           iter != m_endpoints.end(); ++iter) {
-        TcrEndpoint *ep = (*iter).int_id_;
+      for (const auto &iter : m_endpoints) {
+        auto ep = iter.second;
         LOGFINE("TCCM: forcing endpoint delete for %d in destructor",
                 ep->name().c_str());
         _GEODE_SAFE_DELETE(ep);
@@ -234,9 +231,9 @@
 void TcrConnectionManager::connect(
     ThinClientBaseDM *distMng, std::vector<TcrEndpoint *> &endpoints,
     const std::unordered_set<std::string> &endpointStrs) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardDistMngrs(m_distMngrsLock);
+  std::lock_guard<decltype(m_distMngrsLock)> guardDistMngrs(m_distMngrsLock);
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
+    auto &&endpointsGuard = m_endpoints.make_lock();
     int32_t numEndPoints = static_cast<int32_t>(endpointStrs.size());
 
     if (numEndPoints == 0) {
@@ -244,12 +241,9 @@
           "TcrConnectionManager::connect(): Empty endpointstr vector "
           "passed to TCCM, will initialize endpoints list with all available "
           "endpoints (%d).",
-          m_endpoints.current_size());
-      for (ACE_Map_Manager<std::string, TcrEndpoint *,
-                           ACE_Recursive_Thread_Mutex>::iterator currItr =
-               m_endpoints.begin();
-           currItr != m_endpoints.end(); ++currItr) {
-        TcrEndpoint *ep = (*currItr).int_id_;
+          m_endpoints.size());
+      for (const auto &currItr : m_endpoints) {
+        auto ep = currItr.second;
         ep->setNumRegions(ep->numRegions() + 1);
         LOGFINER(
             "TCCM 2: incremented region reference count for endpoint %s "
@@ -258,10 +252,8 @@
         endpoints.push_back(ep);
       }
     } else {
-      for (std::unordered_set<std::string>::const_iterator iter =
-               endpointStrs.begin();
-           iter != endpointStrs.end(); ++iter) {
-        TcrEndpoint *ep = addRefToTcrEndpoint(*iter, distMng);
+      for (const auto &iter : endpointStrs) {
+        auto ep = addRefToTcrEndpoint(iter, distMng);
         endpoints.push_back(ep);
       }
     }
@@ -285,14 +277,16 @@
 TcrEndpoint *TcrConnectionManager::addRefToTcrEndpoint(std::string endpointName,
                                                        ThinClientBaseDM *dm) {
   TcrEndpoint *ep = nullptr;
-  /*
-  endpointName = Utils::convertHostToCanonicalForm(endpointName.c_str());
-  */
-  if (0 != m_endpoints.find(endpointName, ep)) {
+
+  auto &&guard = m_endpoints.make_lock();
+  const auto &find = m_endpoints.find(endpointName);
+  if (find == m_endpoints.end()) {
     // this endpoint does not exist
     ep = new TcrEndpoint(endpointName, m_cache, m_failoverSema, m_cleanupSema,
                          m_redundancySema, dm, false);
-    GF_R_ASSERT(0 == m_endpoints.bind(endpointName, ep));
+    m_endpoints.emplace(endpointName, ep);
+  } else {
+    ep = find->second;
   }
   ep->setNumRegions(ep->numRegions() + 1);
 
@@ -305,13 +299,10 @@
 void TcrConnectionManager::disconnect(ThinClientBaseDM *distMng,
                                       std::vector<TcrEndpoint *> &endpoints,
                                       bool keepEndpoints) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardDistMngrs(m_distMngrsLock);
+  std::lock_guard<decltype(m_distMngrsLock)> guardDistMngrs(m_distMngrsLock);
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-
-    int32_t numEndPoints = static_cast<int32_t>(endpoints.size());
-    for (int32_t i = 0; i < numEndPoints; ++i) {
-      TcrEndpoint *ep = endpoints[i];
+    auto &&guard = m_endpoints.make_lock();
+    for (const auto &ep : endpoints) {
       removeRefToEndpoint(ep, keepEndpoints);
     }
   }
@@ -333,7 +324,7 @@
 
   if (0 == ep->numRegions()) {
     // this endpoint no longer used
-    GF_R_ASSERT(0 == m_endpoints.unbind(ep->name(), ep));
+    m_endpoints.erase(ep->name());
     LOGFINE("delete endpoint %s", ep->name().c_str());
     _GEODE_SAFE_DELETE(ep);
     hasRemovedEndpoint = true;
@@ -348,15 +339,11 @@
 
 int TcrConnectionManager::checkConnection(const ACE_Time_Value &,
                                           const void *) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-  ACE_Map_Manager<std::string, TcrEndpoint *,
-                  ACE_Recursive_Thread_Mutex>::iterator currItr =
-      m_endpoints.begin();
-  while (currItr != m_endpoints.end()) {
-    if ((*currItr).int_id_->connected() && !m_isNetDown) {
-      (*currItr).int_id_->pingServer();
+  auto &&guard = m_endpoints.make_lock();
+  for (const auto &currItr : m_endpoints) {
+    if (currItr.second->connected() && !m_isNetDown) {
+      currItr.second->pingServer();
     }
-    currItr++;
   }
   return 0;
 }
@@ -367,16 +354,15 @@
   return 0;
 }
 
-int TcrConnectionManager::failover(volatile bool &isRunning) {
+void TcrConnectionManager::failover(std::atomic<bool> &isRunning) {
   LOGFINE("TcrConnectionManager: starting failover thread");
   while (isRunning) {
     m_failoverSema.acquire();
     if (isRunning && !m_isNetDown) {
       try {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_distMngrsLock);
-        for (std::list<ThinClientBaseDM *>::iterator it = m_distMngrs.begin();
-             it != m_distMngrs.end(); ++it) {
-          (*it)->failover();
+        std::lock_guard<decltype(m_distMngrsLock)> guard(m_distMngrsLock);
+        for (const auto &it : m_distMngrs) {
+          it->failover();
         }
         while (m_failoverSema.tryacquire() != -1) {
           ;
@@ -393,24 +379,18 @@
     }
   }
   LOGFINE("TcrConnectionManager: ending failover thread");
-  return 0;
 }
 
 void TcrConnectionManager::getAllEndpoints(
     std::vector<TcrEndpoint *> &endpoints) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-
-  for (ACE_Map_Manager<std::string, TcrEndpoint *,
-                       ACE_Recursive_Thread_Mutex>::iterator currItr =
-           m_endpoints.begin();
-       currItr != m_endpoints.end(); currItr++) {
-    endpoints.push_back((*currItr).int_id_);
+  auto &&guard = m_endpoints.make_lock();
+  for (const auto &currItr : m_endpoints) {
+    endpoints.push_back(currItr.second);
   }
 }
 
 int32_t TcrConnectionManager::getNumEndPoints() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-  return static_cast<int32_t>(m_endpoints.current_size());
+  return static_cast<int32_t>(m_endpoints.size());
 }
 
 GfErrType TcrConnectionManager::registerInterestAllRegions(
@@ -421,7 +401,7 @@
 
   GfErrType err = GF_NOERR;
   GfErrType opErr = GF_NOERR;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_distMngrsLock);
+  std::lock_guard<decltype(m_distMngrsLock)> guard(m_distMngrsLock);
   std::list<ThinClientBaseDM *>::iterator begin = m_distMngrs.begin();
   std::list<ThinClientBaseDM *>::iterator end = m_distMngrs.end();
   for (std::list<ThinClientBaseDM *>::iterator it = begin; it != end; ++it) {
@@ -446,7 +426,7 @@
   // 1. m_distMngrs.size() > 1 (query distribution manager + 1 or more
   // TcrHADistributionManagers).
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_distMngrsLock);
+  std::lock_guard<decltype(m_distMngrsLock)> guard(m_distMngrsLock);
   std::list<ThinClientBaseDM *>::iterator begin = m_distMngrs.begin();
   std::list<ThinClientBaseDM *>::iterator end = m_distMngrs.end();
   for (std::list<ThinClientBaseDM *>::iterator it = begin; it != end; ++it) {
@@ -472,12 +452,10 @@
 }
 
 void TcrConnectionManager::removeHAEndpoints() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-  ACE_Map_Manager<std::string, TcrEndpoint *,
-                  ACE_Recursive_Thread_Mutex>::iterator currItr =
-      m_endpoints.begin();
+  auto &&guard = m_endpoints.make_lock();
+  auto currItr = m_endpoints.begin();
   while (currItr != m_endpoints.end()) {
-    if (removeRefToEndpoint((*currItr).int_id_)) {
+    if (removeRefToEndpoint(currItr->second)) {
       currItr = m_endpoints.begin();
     } else {
       currItr++;
@@ -492,13 +470,9 @@
   std::this_thread::sleep_for(std::chrono::seconds(15));
 
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpoints.mutex());
-
-    for (ACE_Map_Manager<std::string, TcrEndpoint *,
-                         ACE_Recursive_Thread_Mutex>::iterator currItr =
-             m_endpoints.begin();
-         currItr != m_endpoints.end(); currItr++) {
-      (*currItr).int_id_->setConnectionStatus(false);
+    auto &&guard = m_endpoints.make_lock();
+    for (auto &currItr : m_endpoints) {
+      currItr.second->setConnectionStatus(false);
     }
   }
 
@@ -515,7 +489,7 @@
   std::this_thread::sleep_for(std::chrono::seconds(15));
 }
 
-int TcrConnectionManager::redundancy(volatile bool &isRunning) {
+void TcrConnectionManager::redundancy(std::atomic<bool> &isRunning) {
   LOGFINE("Starting subscription maintain redundancy thread.");
   while (isRunning) {
     m_redundancySema.acquire();
@@ -527,19 +501,18 @@
     }
   }
   LOGFINE("Ending subscription maintain redundancy thread.");
-  return 0;
 }
 
 void TcrConnectionManager::addNotificationForDeletion(
     Task<TcrEndpoint> *notifyReceiver, TcrConnection *notifyConnection,
     ACE_Semaphore &notifyCleanupSema) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notificationLock);
+  std::lock_guard<decltype(m_notificationLock)> guard(m_notificationLock);
   m_connectionReleaseList.put(notifyConnection);
   m_receiverReleaseList.put(notifyReceiver);
   m_notifyCleanupSemaList.put(&notifyCleanupSema);
 }
 
-int TcrConnectionManager::cleanup(volatile bool &isRunning) {
+void TcrConnectionManager::cleanup(std::atomic<bool> &isRunning) {
   LOGFINE("TcrConnectionManager: starting cleanup thread");
   do {
     //  If we block on acquire, the queue must be empty (precondition).
@@ -561,7 +534,6 @@
   //  Postcondition - all notification channels should be cleaned up by the end
   //  of this function.
   GF_DEV_ASSERT(m_receiverReleaseList.size() == 0);
-  return 0;
 }
 
 void TcrConnectionManager::cleanNotificationLists() {
@@ -571,14 +543,14 @@
 
   while (true) {
     {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notificationLock);
+      std::lock_guard<decltype(m_notificationLock)> guard(m_notificationLock);
       notifyReceiver = m_receiverReleaseList.get();
       if (!notifyReceiver) break;
       notifyConnection = m_connectionReleaseList.get();
       notifyCleanupSema = m_notifyCleanupSemaList.get();
     }
     notifyReceiver->wait();
-    _GEODE_SAFE_DELETE(notifyReceiver);
+    //_GEODE_SAFE_DELETE(notifyReceiver);
     _GEODE_SAFE_DELETE(notifyConnection);
     notifyCleanupSema->release();
   }
@@ -591,11 +563,8 @@
 
 //  TESTING: Durable clients - return queue status of endpoing. Not thread safe.
 bool TcrConnectionManager::getEndpointStatus(const std::string &endpoint) {
-  for (ACE_Map_Manager<std::string, TcrEndpoint *,
-                       ACE_Recursive_Thread_Mutex>::iterator currItr =
-           m_endpoints.begin();
-       currItr != m_endpoints.end(); currItr++) {
-    TcrEndpoint *ep = (*currItr).int_id_;
+  for (auto &currItr : m_endpoints) {
+    auto ep = currItr.second;
     const std::string epName = ep->name();
     if (epName == endpoint) return ep->getServerQueueStatusTEST();
   }
diff --git a/cppcache/src/TcrConnectionManager.hpp b/cppcache/src/TcrConnectionManager.hpp
index 8e01b87..837e448 100644
--- a/cppcache/src/TcrConnectionManager.hpp
+++ b/cppcache/src/TcrConnectionManager.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TCRCONNECTIONMANAGER_H_
-#define GEODE_TCRCONNECTIONMANAGER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,15 +15,18 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_TCRCONNECTIONMANAGER_H_
+#define GEODE_TCRCONNECTIONMANAGER_H_
+
 #include <list>
+#include <mutex>
 #include <string>
 #include <unordered_map>
 #include <vector>
 
-#include <ace/Map_Manager.h>
-#include <ace/Recursive_Thread_Mutex.h>
 #include <ace/Semaphore.h>
-#include <ace/Versioned_Namespace.h>
 #include <ace/config-lite.h>
 
 #include <geode/internal/geode_globals.hpp>
@@ -37,6 +35,7 @@
 #include "Queue.hpp"
 #include "Task.hpp"
 #include "ThinClientRedundancyManager.hpp"
+#include "util/synchronized_map.hpp"
 
 namespace apache {
 namespace geode {
@@ -52,7 +51,7 @@
 /**
  * @brief transport data between caches
  */
-class APACHE_GEODE_EXPORT TcrConnectionManager {
+class TcrConnectionManager {
  public:
   explicit TcrConnectionManager(CacheImpl* cache);
   ~TcrConnectionManager();
@@ -78,7 +77,8 @@
   void setClientCrashTEST() { TEST_DURABLE_CLIENT_CRASH = true; }
   volatile static bool TEST_DURABLE_CLIENT_CRASH;
 
-  inline ACE_Map_Manager<std::string, TcrEndpoint*, ACE_Recursive_Thread_Mutex>&
+  inline synchronized_map<std::unordered_map<std::string, TcrEndpoint*>,
+                          std::recursive_mutex>&
   getGlobalEndpoints() {
     return m_endpoints;
   }
@@ -119,20 +119,20 @@
 
   inline void acquireRedundancyLock() {
     m_redundancyManager->acquireRedundancyLock();
-    m_distMngrsLock.acquire_read();
+    m_distMngrsLock.lock();
   }
 
   inline void releaseRedundancyLock() {
     m_redundancyManager->releaseRedundancyLock();
-    m_distMngrsLock.release();
+    m_distMngrsLock.unlock();
   }
 
   bool checkDupAndAdd(std::shared_ptr<EventId> eventid) {
     return m_redundancyManager->checkDupAndAdd(eventid);
   }
 
-  ACE_Recursive_Thread_Mutex* getRedundancyLock() {
-    return &m_redundancyManager->getRedundancyLock();
+  std::recursive_mutex& getRedundancyLock() {
+    return m_redundancyManager->getRedundancyLock();
   }
 
   GfErrType sendRequestToPrimary(TcrMessage& request, TcrMessageReply& reply) {
@@ -144,16 +144,17 @@
  private:
   CacheImpl* m_cache;
   volatile bool m_initGuard;
-  ACE_Map_Manager<std::string, TcrEndpoint*, ACE_Recursive_Thread_Mutex>
+  synchronized_map<std::unordered_map<std::string, TcrEndpoint*>,
+                   std::recursive_mutex>
       m_endpoints;
   std::list<TcrEndpoint*> m_poolEndpointList;
 
   // key is hostname:port
   std::list<ThinClientBaseDM*> m_distMngrs;
-  ACE_Recursive_Thread_Mutex m_distMngrsLock;
+  std::recursive_mutex m_distMngrsLock;
 
   ACE_Semaphore m_failoverSema;
-  Task<TcrConnectionManager>* m_failoverTask;
+  std::unique_ptr<Task<TcrConnectionManager>> m_failoverTask;
 
   bool removeRefToEndpoint(TcrEndpoint* ep, bool keepEndpoint = false);
   TcrEndpoint* addRefToTcrEndpoint(std::string endpointName,
@@ -163,7 +164,7 @@
   void removeHAEndpoints();
 
   ACE_Semaphore m_cleanupSema;
-  Task<TcrConnectionManager>* m_cleanupTask;
+  std::unique_ptr<Task<TcrConnectionManager>> m_cleanupTask;
 
   ExpiryTaskManager::id_type m_pingTaskId;
   ExpiryTaskManager::id_type m_servermonitorTaskId;
@@ -172,19 +173,19 @@
   Queue<ACE_Semaphore*> m_notifyCleanupSemaList;
 
   ACE_Semaphore m_redundancySema;
-  Task<TcrConnectionManager>* m_redundancyTask;
-  ACE_Recursive_Thread_Mutex m_notificationLock;
+  std::unique_ptr<Task<TcrConnectionManager>> m_redundancyTask;
+  std::recursive_mutex m_notificationLock;
   bool m_isDurable;
 
   bool m_isNetDown;
 
   ThinClientRedundancyManager* m_redundancyManager;
 
-  int failover(volatile bool& isRunning);
-  int redundancy(volatile bool& isRunning);
+  void failover(std::atomic<bool>& isRunning);
+  void redundancy(std::atomic<bool>& isRunning);
 
   void cleanNotificationLists();
-  int cleanup(volatile bool& isRunning);
+  void cleanup(std::atomic<bool>& isRunning);
 
   // Disallow copy constructor and assignment operator.
   TcrConnectionManager(const TcrConnectionManager&);
@@ -206,10 +207,10 @@
 
  public:
   explicit DistManagersLockGuard(TcrConnectionManager& tccm) : m_tccm(tccm) {
-    m_tccm.m_distMngrsLock.acquire();
+    m_tccm.m_distMngrsLock.lock();
   }
 
-  ~DistManagersLockGuard() { m_tccm.m_distMngrsLock.release(); }
+  ~DistManagersLockGuard() { m_tccm.m_distMngrsLock.unlock(); }
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/TcrEndpoint.cpp b/cppcache/src/TcrEndpoint.cpp
index 0a0d6a4..7b57e5d 100644
--- a/cppcache/src/TcrEndpoint.cpp
+++ b/cppcache/src/TcrEndpoint.cpp
@@ -28,6 +28,7 @@
 #include "CacheImpl.hpp"
 #include "DistributedSystemImpl.hpp"
 #include "StackTrace.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolHADM.hpp"
 #include "ThinClientRegion.hpp"
 #include "Utils.hpp"
@@ -47,7 +48,6 @@
     : m_notifyConnection(nullptr),
       m_notifyReceiver(nullptr),
       m_cacheImpl(cacheImpl),
-      m_connectLockCond(m_connectLock),
       m_maxConnections(cacheImpl->getDistributedSystem()
                            .getSystemProperties()
                            .connectionPoolSize()),
@@ -88,7 +88,7 @@
   closeConnections();
   {
     // force close the notification channel -- see bug #295
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+    std::lock_guard<decltype(m_notifyReceiverLock)> guard(m_notifyReceiverLock);
     if (m_numRegionListener > 0) {
       LOGFINE(
           "Connection to %s still has references "
@@ -127,23 +127,25 @@
 GfErrType TcrEndpoint::createNewConnectionWL(
     TcrConnection*& newConn, bool isClientNotification, bool isSecondary,
     std::chrono::microseconds connectTimeout) {
+  using clock = std::chrono::steady_clock;
+
   LOGFINE("TcrEndpoint::createNewConnectionWL");
   auto connectWaitTimeout = m_cacheImpl->getDistributedSystem()
                                 .getSystemProperties()
                                 .connectWaitTimeout();
-  ACE_Time_Value interval(connectWaitTimeout);
-  ACE_Time_Value stopAt(ACE_OS::gettimeofday());
-  stopAt += interval;
-  bool connCreated = false;
 
-  while (ACE_OS::gettimeofday() < stopAt) {
-    int32_t ret = m_connectLock.acquire(&stopAt);
+  auto stopAt = clock::now() + connectWaitTimeout;
+  auto connCreated = false;
+  std::unique_lock<decltype(m_connectLock)> lock(m_connectLock,
+                                                 std::defer_lock);
 
-    LOGFINE(
-        "TcrEndpoint::createNewConnectionWL ret = %d interval = %ld error =%s",
-        ret, interval.get_msec(), ACE_OS::strerror(ACE_OS::last_error()));
+  while (clock::now() < stopAt) {
+    auto locked = lock.try_lock_until(stopAt);
 
-    if (ret != -1) {  // got lock
+    LOGFINE("TcrEndpoint::createNewConnectionWL ret = %d interval = %ld",
+            locked, connectWaitTimeout.count());
+
+    if (locked) {
       try {
         LOGFINE("TcrEndpoint::createNewConnectionWL got lock");
         newConn =
@@ -152,29 +154,20 @@
                                    isClientNotification, isSecondary,
                                    connectTimeout);
 
-        connCreated = true;  // to break while loop
-
+        connCreated = true;             // to break while loop
         m_needToConnectInLock = false;  // no need to take lock
-
-        m_connectLock.release();
         LOGFINE("New Connection Created");
         break;
       } catch (const TimeoutException&) {
         LOGINFO("Timeout1 in handshake with endpoint[%s]", m_name.c_str());
-        m_connectLock.release();
-        // throw te;
         return GF_CLIENT_WAIT_TIMEOUT_REFRESH_PRMETADATA;
       } catch (std::exception& ex) {
-        m_connectLock.release();
         LOGWARN("Failed1 in handshake with endpoint[%s]: %s", m_name.c_str(),
                 ex.what());
-        // throw ex;
         return GF_CLIENT_WAIT_TIMEOUT_REFRESH_PRMETADATA;
       } catch (...) {
         LOGWARN("Unknown1 failure in handshake with endpoint[%s]",
                 m_name.c_str());
-        m_connectLock.release();
-        // throw;
         return GF_CLIENT_WAIT_TIMEOUT_REFRESH_PRMETADATA;
       }
     }
@@ -224,7 +217,8 @@
       if (!isClientNotification && sendUpdateNotification) {
         bool notificationStarted;
         {
-          ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+          std::lock_guard<decltype(m_notifyReceiverLock)> guard(
+              m_notifyReceiverLock);
           notificationStarted = (m_numRegionListener > 0) || m_isQueueHosted;
         }
         if (notificationStarted) {
@@ -247,8 +241,8 @@
       m_needToConnectInLock = true;  // while creating the connection
       std::this_thread::sleep_for(std::chrono::milliseconds(50));
     } catch (const GeodeIOException& ex) {
-      LOGINFO("IO error[%d] in handshake with endpoint[%s]: %s",
-              ACE_OS::last_error(), m_name.c_str(), ex.what());
+      LOGINFO("IO error in handshake with endpoint[%s]: %s", m_name.c_str(),
+              ex.what());
       err = GF_IOERR;
       m_needToConnectInLock = true;  // while creating the connection
       break;
@@ -296,7 +290,8 @@
       m_isAuthenticated, m_baseDM);
   if (!m_isAuthenticated && m_baseDM) {
     this->setConnected();
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointAuthenticationLock);
+    std::lock_guard<decltype(m_endpointAuthenticationLock)> guard(
+        m_endpointAuthenticationLock);
     GfErrType err = GF_NOERR;
     auto creds = getCredentials();
 
@@ -401,7 +396,7 @@
   bool connected = false;
   GfErrType err = GF_NOERR;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_connectionLock);
+  std::lock_guard<decltype(m_connectionLock)> guard(m_connectionLock);
   // Three cases here:
   // 1. m_connected is false, m_isActiveEndpoint is false and then
   //    if isActiveEndpoint is true, then create 'max' connections
@@ -456,7 +451,7 @@
   if (m_connected || connected) {
     if (clientNotification) {
       if (distMgr != nullptr) {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> guardDistMgrs(m_distMgrsLock);
+        std::lock_guard<decltype(m_distMgrsLock)> guardDistMgrs(m_distMgrsLock);
         m_distMgrs.push_back(distMgr);
       }
       LOGFINEST(
@@ -464,7 +459,8 @@
           "channel for endpoint %s",
           m_name.c_str());
       // setup notification channel for the first region
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+      std::lock_guard<decltype(m_notifyReceiverLock)> guard(
+          m_notifyReceiverLock);
       if (m_numRegionListener == 0) {
         if ((err = createNewConnection(m_notifyConnection, true, isSecondary,
                                        m_cacheImpl->getDistributedSystem()
@@ -479,8 +475,9 @@
                   m_name.c_str());
           return err;
         }
-        m_notifyReceiver = new Task<TcrEndpoint>(
-            this, &TcrEndpoint::receiveNotification, NC_Notification);
+        m_notifyReceiver =
+            std::unique_ptr<Task<TcrEndpoint>>(new Task<TcrEndpoint>(
+                this, &TcrEndpoint::receiveNotification, NC_Notification));
         m_notifyReceiver->start();
       }
       ++m_numRegionListener;
@@ -519,14 +516,14 @@
         "channel for endpoint %s",
         m_name.c_str());
     // close notification channel if there is no region
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+    std::lock_guard<decltype(m_notifyReceiverLock)> guard(m_notifyReceiverLock);
     if (m_numRegionListener > 0 && --m_numRegionListener == 0) {
       closeNotification();
     }
     LOGFINEST("Decremented subscription region count for endpoint %s to %d",
               m_name.c_str(), m_numRegionListener);
     if (distMgr != nullptr) {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guardDistMgrs(m_distMgrsLock);
+      std::lock_guard<decltype(m_distMgrsLock)> guardDistMgrs(m_distMgrsLock);
       m_distMgrs.remove(distMgr);
     }
     LOGFINEST("Done unsubscribe for endpoint %s", m_name.c_str());
@@ -583,7 +580,7 @@
   return m_cacheImpl->tcrConnectionManager().checkDupAndAdd(eventid);
 }
 
-int TcrEndpoint::receiveNotification(volatile bool& isRunning) {
+void TcrEndpoint::receiveNotification(std::atomic<bool>& isRunning) {
   LOGFINE("Started subscription channel for endpoint %s", m_name.c_str());
   while (isRunning) {
     TcrMessageReply* msg = nullptr;
@@ -601,7 +598,8 @@
         if (isRunning) {
           setConnectionStatus(false);
           // close notification channel
-          ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+          std::lock_guard<decltype(m_notifyReceiverLock)> guard(
+              m_notifyReceiverLock);
           if (m_numRegionListener > 0) {
             m_numRegionListener = 0;
             closeNotification();
@@ -711,7 +709,8 @@
       if (m_connected) {
         setConnectionStatus(false);
         // close notification channel
-        ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+        std::lock_guard<decltype(m_notifyReceiverLock)> guard(
+            m_notifyReceiverLock);
         if (m_numRegionListener > 0) {
           m_numRegionListener = 0;
           closeNotification();
@@ -733,7 +732,6 @@
     }
   }
   LOGFINE("Ended subscription channel for endpoint %s", m_name.c_str());
-  return 0;
 }
 
 inline bool TcrEndpoint::compareTransactionIds(int32_t reqTransId,
@@ -919,7 +917,7 @@
     epFailure = false;
     if (useEPPool) {
       if (m_maxConnections == 0) {
-        ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_connectionLock);
+        std::lock_guard<decltype(m_connectionLock)> guard(m_connectionLock);
         if (m_maxConnections == 0) {
           LOGFINE(
               "Creating a new connection when connection-pool-size system "
@@ -1191,7 +1189,7 @@
   // bool wasActive = m_isActiveEndpoint;
   // Then after taking the lock:
   // If ( !wasActive && isActiveEndpoint ) { return; }
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_connectionLock);
+  std::lock_guard<decltype(m_connectionLock)> guard(m_connectionLock);
   if (m_connected != status) {
     bool connected = m_connected;
     m_connected = status;
@@ -1242,7 +1240,7 @@
   m_notifyConnection->close();
   m_notifyReceiver->stopNoblock();
   TcrConnectionManager& tccm = m_cacheImpl->tcrConnectionManager();
-  tccm.addNotificationForDeletion(m_notifyReceiver, m_notifyConnection,
+  tccm.addNotificationForDeletion(m_notifyReceiver.get(), m_notifyConnection,
                                   m_notificationCleanupSema);
   m_notifyCount++;
   m_cleanupSema.release();
@@ -1262,53 +1260,36 @@
 
 void TcrEndpoint::stopNotifyReceiverAndCleanup() {
   LOGFINER("Stopping subscription receiver and cleaning up");
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_notifyReceiverLock);
+  std::lock_guard<decltype(m_notifyReceiverLock)> guard(m_notifyReceiverLock);
 
   if (m_notifyReceiver != nullptr) {
     LOGFINER("Waiting for notification thread...");
     // m_notifyReceiver->stopNoblock();
     m_notifyReceiver->wait();
     bool found = false;
-    for (std::list<Task<TcrEndpoint>*>::iterator it =
-             m_notifyReceiverList.begin();
-         it != m_notifyReceiverList.end(); it++) {
-      if (*it == m_notifyReceiver) {
+    for (const auto& it : m_notifyReceiverList) {
+      if (it == m_notifyReceiver.get()) {
         found = true;
         break;
       }
     }
 
     if (!found) {
-      _GEODE_SAFE_DELETE(m_notifyReceiver);
+      m_notifyReceiver = nullptr;
       _GEODE_SAFE_DELETE(m_notifyConnection);
     }
   }
 
   m_numRegionListener = 0;
 
-  if (m_notifyReceiverList.size() > 0) {
-    LOGFINER("TcrEndpoint::stopNotifyReceiverAndCleanup: notifylist size = %d",
-             m_notifyReceiverList.size());
-    for (std::list<Task<TcrEndpoint>*>::iterator it =
-             m_notifyReceiverList.begin();
-         it != m_notifyReceiverList.end(); it++) {
-      LOGFINER(
-          "TcrEndpoint::stopNotifyReceiverAndCleanup: deleting old notify "
-          "recievers.");
-      _GEODE_SAFE_DELETE(*it);
-    }
-  }
-
-  if (m_notifyConnectionList.size() > 0) {
+  if (!m_notifyConnectionList.empty()) {
     LOGFINER("TcrEndpoint::stopNotifyReceiverAndCleanup: notifylist size = %d",
              m_notifyConnectionList.size());
-    for (std::list<TcrConnection*>::iterator it =
-             m_notifyConnectionList.begin();
-         it != m_notifyConnectionList.end(); it++) {
+    for (auto& it : m_notifyConnectionList) {
       LOGFINER(
           "TcrEndpoint::stopNotifyReceiverAndCleanup: deleting old notify "
           "connections.");
-      _GEODE_SAFE_DELETE(*it);
+      _GEODE_SAFE_DELETE(it);
     }
   }
 }
diff --git a/cppcache/src/TcrEndpoint.hpp b/cppcache/src/TcrEndpoint.hpp
index ac54349..4413529 100644
--- a/cppcache/src/TcrEndpoint.hpp
+++ b/cppcache/src/TcrEndpoint.hpp
@@ -22,9 +22,12 @@
 
 #include <atomic>
 #include <list>
+#include <memory>
+#include <mutex>
 #include <string>
+#include <unordered_set>
 
-#include <ace/Recursive_Thread_Mutex.h>
+#include <ace/Condition_Recursive_Thread_Mutex.h>
 #include <ace/Semaphore.h>
 
 #include <geode/internal/geode_base.hpp>
@@ -32,9 +35,9 @@
 
 #include "ErrType.hpp"
 #include "FairQueue.hpp"
-#include "Set.hpp"
 #include "Task.hpp"
 #include "TcrConnection.hpp"
+#include "util/synchronized_set.hpp"
 
 namespace apache {
 namespace geode {
@@ -48,7 +51,7 @@
 class ThinClientPoolDM;
 class QueryService;
 
-class APACHE_GEODE_EXPORT TcrEndpoint {
+class TcrEndpoint {
  public:
   TcrEndpoint(
       const std::string& name, CacheImpl* cacheImpl,
@@ -73,7 +76,7 @@
   // void unregisterPoolDM(  );
 
   void pingServer(ThinClientPoolDM* poolDM = nullptr);
-  int receiveNotification(volatile bool& isRunning);
+  void receiveNotification(std::atomic<bool>& isRunning);
   GfErrType send(const TcrMessage& request, TcrMessageReply& reply);
   GfErrType sendRequestConn(const TcrMessage& request, TcrMessageReply& reply,
                             TcrConnection* conn, std::string& failReason);
@@ -166,9 +169,7 @@
   void setConnected(volatile bool connected = true) { m_connected = connected; }
   virtual ThinClientPoolDM* getPoolHADM() { return nullptr; }
   bool isQueueHosted();
-  ACE_Recursive_Thread_Mutex& getQueueHostedMutex() {
-    return m_notifyReceiverLock;
-  }
+  std::recursive_mutex& getQueueHostedMutex() { return m_notifyReceiverLock; }
   /*
   void sendNotificationCloseMsg();
   */
@@ -190,13 +191,12 @@
 
  protected:
   TcrConnection* m_notifyConnection;
-  Task<TcrEndpoint>* m_notifyReceiver;
+  std::unique_ptr<Task<TcrEndpoint>> m_notifyReceiver;
   CacheImpl* m_cacheImpl;
   std::list<Task<TcrEndpoint>*> m_notifyReceiverList;
   std::list<TcrConnection*> m_notifyConnectionList;
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_connectLockCond;
-  ACE_Recursive_Thread_Mutex m_connectLock;
-  ACE_Recursive_Thread_Mutex m_notifyReceiverLock;
+  std::timed_mutex m_connectLock;
+  std::recursive_mutex m_notifyReceiverLock;
   FairQueue<TcrConnection> m_opConnections;
   volatile int m_maxConnections;
   int m_numRegionListener;
@@ -229,11 +229,11 @@
   ThinClientBaseDM* m_baseDM;
   std::string m_name;
   std::list<ThinClientBaseDM*> m_distMgrs;
-  ACE_Recursive_Thread_Mutex m_endpointAuthenticationLock;
-  ACE_Recursive_Thread_Mutex m_connectionLock;
-  ACE_Recursive_Thread_Mutex m_distMgrsLock;
+  std::recursive_mutex m_endpointAuthenticationLock;
+  std::recursive_mutex m_connectionLock;
+  std::recursive_mutex m_distMgrsLock;
   ACE_Semaphore m_notificationCleanupSema;
-  Set<uint16_t> m_ports;
+  synchronized_set<std::unordered_set<uint16_t>> m_ports;
   int32_t m_numberOfTimesFailed;
   int m_numRegions;
   int m_pingTimeouts;
diff --git a/cppcache/src/TcrHADistributionManager.cpp b/cppcache/src/TcrHADistributionManager.cpp
index 3ede87d..91dfa06 100644
--- a/cppcache/src/TcrHADistributionManager.cpp
+++ b/cppcache/src/TcrHADistributionManager.cpp
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "TcrHADistributionManager.hpp"
 
 #include <geode/ExceptionTypes.hpp>
@@ -21,6 +22,7 @@
 
 #include "CacheImpl.hpp"
 #include "RemoteQueryService.hpp"
+#include "TcrEndpoint.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientHARegion.hpp"
 #include "ThinClientRegion.hpp"
diff --git a/cppcache/src/TcrHADistributionManager.hpp b/cppcache/src/TcrHADistributionManager.hpp
index e0a91fe..fb293ae 100644
--- a/cppcache/src/TcrHADistributionManager.hpp
+++ b/cppcache/src/TcrHADistributionManager.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TCRHADISTRIBUTIONMANAGER_H_
-#define GEODE_TCRHADISTRIBUTIONMANAGER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,10 +15,15 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_TCRHADISTRIBUTIONMANAGER_H_
+#define GEODE_TCRHADISTRIBUTIONMANAGER_H_
+
 #include <geode/CacheAttributes.hpp>
 #include <geode/internal/geode_base.hpp>
 
-#include "TcrEndpoint.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientDistributionManager.hpp"
 
 namespace apache {
@@ -32,6 +32,8 @@
 
 class ThinClientRegion;
 class ThinClientHARegion;
+class TcrEndpoint;
+
 /**
  * @brief Distribute data between caches
  */
diff --git a/cppcache/src/TcrMessage.cpp b/cppcache/src/TcrMessage.cpp
index 6b7ee76..e5b6f93 100644
--- a/cppcache/src/TcrMessage.cpp
+++ b/cppcache/src/TcrMessage.cpp
@@ -36,6 +36,7 @@
 #include "TXState.hpp"
 #include "TcrChunkedContext.hpp"
 #include "TcrConnection.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientBaseDM.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "ThinClientRegion.hpp"
@@ -53,6 +54,8 @@
 uint32_t g_headerLen = 17;
 }  // namespace
 
+extern void setThreadLocalExceptionMessage(const char*);
+
 // AtomicInc TcrMessage::m_transactionId = 0;
 uint8_t* TcrMessage::m_keepalive = nullptr;
 const int TcrMessage::m_flag_empty = 0x01;
@@ -197,32 +200,31 @@
   *intValue = input.readInt64();
 }
 
-void TcrMessage::readStringPart(DataInput& input, uint32_t* len, char** str) {
-  char* ts;
-  int32_t sl = input.readInt32();
-  ts = new char[sl];
-  if (input.read()) throw Exception("String is not an object");
-  input.readBytesOnly(reinterpret_cast<int8_t*>(ts), sl);
-  *len = sl;
-  *str = ts;
+const std::string TcrMessage::readStringPart(DataInput& input) {
+  char* stringBuffer;
+  int32_t stringLength = input.readInt32();
+  stringBuffer = new char[stringLength + 1];
+  stringBuffer[stringLength] = '\0';
+  if (input.read()) {
+    throw Exception("String is not an object");
+  }
+  input.readBytesOnly(reinterpret_cast<int8_t*>(stringBuffer), stringLength);
+  std::string str = stringBuffer;
+  delete[] stringBuffer;
+  return str;
 }
+
 void TcrMessage::readCqsPart(DataInput& input) {
   m_cqs->clear();
   readIntPart(input, &m_numCqPart);
   for (uint32_t cqCnt = 0; cqCnt < m_numCqPart;) {
-    char* cqName;
-    uint32_t len;
-    readStringPart(input, &len, &cqName);
-    std::string cq(cqName, len);
-    delete[] cqName;
+    auto cq = readStringPart(input);
     cqCnt++;
     int32_t cqOp;
     readIntPart(input, reinterpret_cast<uint32_t*>(&cqOp));
     cqCnt++;
     (*m_cqs)[cq] = cqOp;
-    //	 LOGINFO("read cqName[%s],cqOp[%d]", cq.c_str(), cqOp);
   }
-  // LOGDEBUG("mapsize = %d", m_cqs.size());
 }
 
 inline void TcrMessage::readCallbackObjectPart(DataInput& input,
@@ -234,17 +236,10 @@
       input.readObject(m_callbackArgument);
     } else {
       if (defaultString) {
-        // TODO:
-        // m_callbackArgument = CacheableString::create(
-        //  (char*)input.currentBufferPosition( ), lenObj );
         m_callbackArgument = readCacheableString(input, lenObj);
       } else {
-        // TODO::
-        // m_callbackArgument = CacheableBytes::create(
-        //  input.currentBufferPosition( ), lenObj );
         m_callbackArgument = readCacheableBytes(input, lenObj);
       }
-      // input.advanceCursor( lenObj );
     }
   }
 }
@@ -257,15 +252,10 @@
       input.readObject(m_value);
     } else {
       if (defaultString) {
-        // m_value = CacheableString::create(
-        //  (char*)input.currentBufferPosition( ), lenObj );
         m_value = readCacheableString(input, lenObj);
       } else {
-        // m_value = CacheableBytes::create(
-        //  input.currentBufferPosition( ), lenObj );
         m_value = readCacheableBytes(input, lenObj);
       }
-      // input.advanceCursor( lenObj );
     }
   } else if (lenObj == 0 && isObj == 2) {  // EMPTY BYTE ARRAY
     m_value = CacheableBytes::create();
@@ -596,7 +586,7 @@
                                  // the end write the length at the (buffer +
                                  // 4) offset.
   m_request->writeInt(static_cast<int32_t>(numOfParts));
-  TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  auto txState = TSSTXStateWrapper::get().getTXState();
   if (txState == nullptr) {
     m_txId = -1;
   } else {
@@ -851,12 +841,28 @@
       }
       break;
     }
+    case TcrMessage::PUT_DATA_ERROR: {
+      chunkSecurityHeader(1, bytes, len, isLastChunkAndisSecurityHeader);
+      if (nullptr != bytes) {
+        auto input =
+            m_tcdm->getConnectionManager().getCacheImpl()->createDataInput(
+                bytes, len);
+        auto errorString = readStringPart(input);
+
+        if (!errorString.empty()) {
+          setThreadLocalExceptionMessage(errorString.c_str());
+        }
+
+        _GEODE_SAFE_DELETE_ARRAY(bytes);
+      }
+      break;
+    }
     case TcrMessage::GET_ALL_DATA_ERROR: {
       chunkSecurityHeader(1, bytes, len, isLastChunkAndisSecurityHeader);
       if (bytes != nullptr) {
         _GEODE_SAFE_DELETE_ARRAY(bytes);
       }
-      // nothing else to done since this will be taken care of at higher level
+
       break;
     }
     default: {
@@ -1043,13 +1049,12 @@
     case TcrMessage::UNREGISTER_INTEREST_DATA_ERROR:
     case TcrMessage::PUT_DATA_ERROR:
     case TcrMessage::KEY_SET_DATA_ERROR:
-    case TcrMessage::REQUEST_DATA_ERROR:
     case TcrMessage::DESTROY_REGION_DATA_ERROR:
     case TcrMessage::CLEAR_REGION_DATA_ERROR:
     case TcrMessage::CONTAINS_KEY_DATA_ERROR:
-    case TcrMessage::PUT_DELTA_ERROR: {
-      // do nothing. (?) TODO Do we need to process further.
-      m_shouldIgnore = true;
+    case TcrMessage::PUT_DELTA_ERROR:
+    case TcrMessage::REQUEST_DATA_ERROR: {
+      m_value = std::make_shared<CacheableString>(readStringPart(input));
       break;
     }
 
diff --git a/cppcache/src/TcrMessage.hpp b/cppcache/src/TcrMessage.hpp
index f949851..46665c0 100644
--- a/cppcache/src/TcrMessage.hpp
+++ b/cppcache/src/TcrMessage.hpp
@@ -26,8 +26,6 @@
 #include <string>
 #include <vector>
 
-#include <ace/OS.h>
-
 #include <geode/CacheableBuiltins.hpp>
 #include <geode/CacheableKey.hpp>
 #include <geode/CacheableString.hpp>
@@ -35,6 +33,7 @@
 #include <geode/DataInput.hpp>
 #include <geode/DataOutput.hpp>
 #include <geode/ExceptionTypes.hpp>
+#include <geode/Region.hpp>
 #include <geode/Serializable.hpp>
 #include <geode/internal/geode_globals.hpp>
 
@@ -577,7 +576,7 @@
                        int32_t parts = 1);  // skip num parts then read eventid
 
   void skipParts(DataInput& input, int32_t numParts = 1);
-  void readStringPart(DataInput& input, uint32_t* len, char** str);
+  const std::string readStringPart(DataInput& input);
   void readCqsPart(DataInput& input);
   void readHashMapForGCVersions(apache::geode::client::DataInput& input,
                                 std::shared_ptr<CacheableHashMap>& value);
@@ -1263,12 +1262,11 @@
     } else if (!isObj) {
       // otherwise we're currently always expecting an object
       char exMsg[256];
-      ACE_OS::snprintf(exMsg, 255,
-                       "TcrMessageHelper::readChunkPartHeader: "
-                       "%s: part is not object",
-                       methodName);
+      std::snprintf(exMsg, sizeof(exMsg),
+                    "TcrMessageHelper::readChunkPartHeader: "
+                    "%s: part is not object",
+                    methodName);
       LOGDEBUG("%s ", exMsg);
-      // throw MessageException(exMsg);
       return ChunkObjectType::EXCEPTION;
     }
 
@@ -1284,8 +1282,8 @@
         return ChunkObjectType::EXCEPTION;
       } else {
         char exMsg[256];
-        ACE_OS::snprintf(
-            exMsg, 255,
+        std::snprintf(
+            exMsg, sizeof(exMsg),
             "TcrMessageHelper::readChunkPartHeader: %s: cannot handle "
             "java serializable object from server",
             methodName);
@@ -1300,10 +1298,10 @@
     if (expectedFirstType > DSCode::FixedIDDefault) {
       if (partType != expectedFirstType) {
         char exMsg[256];
-        ACE_OS::snprintf(exMsg, 255,
-                         "TcrMessageHelper::readChunkPartHeader: "
-                         "%s: got unhandled object class = %" PRId8,
-                         methodName, static_cast<int8_t>(partType));
+        std::snprintf(exMsg, sizeof(exMsg),
+                      "TcrMessageHelper::readChunkPartHeader: "
+                      "%s: got unhandled object class = %" PRId8,
+                      methodName, static_cast<int8_t>(partType));
         throw MessageException(exMsg);
       }
       // This is for GETALL
@@ -1316,8 +1314,8 @@
     }
     if (compId != expectedPartType) {
       char exMsg[256];
-      ACE_OS::snprintf(
-          exMsg, 255,
+      std::snprintf(
+          exMsg, sizeof(exMsg),
           "TcrMessageHelper::readChunkPartHeader: "
           "%s: got unhandled object type = %d, expected = %d, raw = %d",
           methodName, compId, expectedPartType, rawByte);
@@ -1340,10 +1338,10 @@
     } else if (!isObj) {
       // otherwise we're currently always expecting an object
       char exMsg[256];
-      ACE_OS::snprintf(exMsg, 255,
-                       "TcrMessageHelper::readChunkPartHeader: "
-                       "%s: part is not object",
-                       methodName);
+      std::snprintf(exMsg, 255,
+                    "TcrMessageHelper::readChunkPartHeader: "
+                    "%s: part is not object",
+                    methodName);
       throw MessageException(exMsg);
     }
 
@@ -1356,7 +1354,7 @@
         return ChunkObjectType::EXCEPTION;
       } else {
         char exMsg[256];
-        ACE_OS::snprintf(
+        std::snprintf(
             exMsg, 255,
             "TcrMessageHelper::readChunkPartHeader: %s: cannot handle "
             "java serializable object from server",
diff --git a/cppcache/src/TcrPoolEndPoint.cpp b/cppcache/src/TcrPoolEndPoint.cpp
index cd387e5..c3ff4c0 100644
--- a/cppcache/src/TcrPoolEndPoint.cpp
+++ b/cppcache/src/TcrPoolEndPoint.cpp
@@ -60,7 +60,7 @@
   LOGFINE("TcrPoolEndPoint::closeNotification..");
   m_notifyReceiver->stopNoblock();
   m_notifyConnectionList.push_back(m_notifyConnection);
-  m_notifyReceiverList.push_back(m_notifyReceiver);
+  m_notifyReceiverList.push_back(m_notifyReceiver.get());
   m_isQueueHosted = false;
 }
 
@@ -68,7 +68,8 @@
                                       ThinClientBaseDM*) {
   GfErrType err = GF_NOERR;
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_dm->getPoolLock());
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardQueueHosted(getQueueHostedMutex());
+  std::lock_guard<decltype(getQueueHostedMutex())> guardQueueHosted(
+      getQueueHostedMutex());
   auto& sysProp = m_cacheImpl->getDistributedSystem().getSystemProperties();
   if (!connected()) {
     TcrConnection* newConn;
@@ -97,8 +98,8 @@
               name().c_str());
       return err;
     }
-    m_notifyReceiver = new Task<TcrEndpoint>(
-        this, &TcrEndpoint::receiveNotification, NC_Notification);
+    m_notifyReceiver = std::unique_ptr<Task<TcrEndpoint>>(new Task<TcrEndpoint>(
+        this, &TcrEndpoint::receiveNotification, NC_Notification));
     m_notifyReceiver->start();
   }
   ++m_numRegionListener;
@@ -111,7 +112,8 @@
 }
 void TcrPoolEndPoint::unregisterDM(bool, ThinClientBaseDM*,
                                    bool checkQueueHosted) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(getQueueHostedMutex());
+  std::lock_guard<decltype(getQueueHostedMutex())> guardQueueHosted(
+      getQueueHostedMutex());
 
   if (checkQueueHosted && !m_isQueueHosted) {
     LOGFINEST(
@@ -125,7 +127,7 @@
       "TcrEndpoint: unregistering pool DM and closing notification "
       "channel for endpoint %s",
       name().c_str());
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard2(m_notifyReceiverLock);
+  std::lock_guard<decltype(m_notifyReceiverLock)> guard2(m_notifyReceiverLock);
   if (m_numRegionListener > 0 && --m_numRegionListener == 0) {
     closeNotification();
   }
diff --git a/cppcache/src/ThinClientBaseDM.cpp b/cppcache/src/ThinClientBaseDM.cpp
index 2bc1baa..b062915 100644
--- a/cppcache/src/ThinClientBaseDM.cpp
+++ b/cppcache/src/ThinClientBaseDM.cpp
@@ -17,8 +17,11 @@
 
 #include "ThinClientBaseDM.hpp"
 
+#include <chrono>
+
 #include <geode/AuthenticatedView.hpp>
 
+#include "TcrConnectionManager.hpp"
 #include "ThinClientRegion.hpp"
 #include "UserAttributes.hpp"
 
@@ -45,8 +48,7 @@
                                      ->getDistributedSystem()
                                      .getSystemProperties();
 
-  if (!systemProperties.isGridClient() &&
-      systemProperties.enableChunkHandlerThread()) {
+  if (systemProperties.enableChunkHandlerThread()) {
     startChunkProcessor();
   }
 
@@ -194,19 +196,17 @@
 
 void ThinClientBaseDM::queueChunk(TcrChunkedContext* chunk) {
   LOGDEBUG("ThinClientBaseDM::queueChunk");
-  const uint32_t timeout = 1;
   if (m_chunkProcessor == nullptr) {
     LOGDEBUG("ThinClientBaseDM::queueChunk2");
     // process in same thread if no chunk processor thread
     chunk->handleChunk(true);
     _GEODE_SAFE_DELETE(chunk);
-  } else if (!m_chunks.putUntil(chunk, timeout, 0)) {
+  } else if (!m_chunks.putFor(chunk, std::chrono::seconds(1))) {
     LOGDEBUG("ThinClientBaseDM::queueChunk3");
     // if put in queue fails due to whatever reason then process in same thread
     LOGFINE(
         "addChunkToQueue: timed out while adding to queue of "
-        "unbounded size after waiting for %d secs",
-        timeout);
+        "unbounded size after waiting for 1 secs");
     chunk->handleChunk(true);
     _GEODE_SAFE_DELETE(chunk);
   } else {
@@ -215,39 +215,39 @@
 }
 
 // the chunk processing thread
-int ThinClientBaseDM::processChunks(volatile bool& isRunning) {
+void ThinClientBaseDM::processChunks(std::atomic<bool>& isRunning) {
   TcrChunkedContext* chunk;
   LOGFINE("Starting chunk process thread for region %s",
-          (m_region != nullptr ? m_region->getFullPath().c_str() : "(null)"));
+          (m_region ? m_region->getFullPath().c_str() : "(null)"));
   while (isRunning) {
-    chunk = m_chunks.getUntil(0, 100000);
+    chunk = m_chunks.getFor(std::chrono::microseconds(100000));
     if (chunk) {
       chunk->handleChunk(false);
       _GEODE_SAFE_DELETE(chunk);
     }
   }
   LOGFINE("Ending chunk process thread for region %s",
-          (m_region != nullptr ? m_region->getFullPath().c_str() : "(null)"));
+          (m_region ? m_region->getFullPath().c_str() : "(null)"));
   GF_DEV_ASSERT(m_chunks.size() == 0);
-  return 0;
 }
 
 // start the chunk processing thread
 void ThinClientBaseDM::startChunkProcessor() {
   if (m_chunkProcessor == nullptr) {
     m_chunks.open();
-    m_chunkProcessor = new Task<ThinClientBaseDM>(
-        this, &ThinClientBaseDM::processChunks, NC_ProcessChunk);
+    m_chunkProcessor =
+        std::unique_ptr<Task<ThinClientBaseDM>>(new Task<ThinClientBaseDM>(
+            this, &ThinClientBaseDM::processChunks, NC_ProcessChunk));
     m_chunkProcessor->start();
   }
 }
 
 // stop the chunk processing thread
 void ThinClientBaseDM::stopChunkProcessor() {
-  if (m_chunkProcessor != nullptr) {
+  if (m_chunkProcessor) {
     m_chunkProcessor->stop();
     m_chunks.close();
-    _GEODE_SAFE_DELETE(m_chunkProcessor);
+    m_chunkProcessor = nullptr;
   }
 }
 
@@ -270,13 +270,11 @@
       connId = conn->getConnectionId();
       uniqueId = conn->getEndpointObject()->getUniqueId();
     } else {
-      auto userAttribute = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                               ->getUserAttributes();
       connId = conn->getConnectionId();
       if (!(request.getMessageType() == TcrMessage::USER_CREDENTIAL_MESSAGE)) {
-        uniqueId =
-            userAttribute->getConnectionAttribute(conn->getEndpointObject())
-                ->getUniqueId();
+        uniqueId = UserAttributes::threadLocalUserAttributes
+                       ->getConnectionAttribute(conn->getEndpointObject())
+                       ->getUniqueId();
       }
     }
 
@@ -302,11 +300,8 @@
     if (request.getMessageType() == TcrMessage::USER_CREDENTIAL_MESSAGE) {
       if (TcrMessage::RESPONSE == reply.getMessageType()) {
         if (this->isMultiUserMode()) {
-          auto userAttribute =
-              TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                  ->getUserAttributes();
-          userAttribute->setConnectionAttributes(conn->getEndpointObject(),
-                                                 reply.getUniqueId(conn));
+          UserAttributes::threadLocalUserAttributes->setConnectionAttributes(
+              conn->getEndpointObject(), reply.getUniqueId(conn));
         } else {
           conn->getEndpointObject()->setUniqueId(reply.getUniqueId(conn));
         }
@@ -336,6 +331,14 @@
 
 bool ThinClientBaseDM::isEndpointAttached(TcrEndpoint*) { return false; }
 
+bool ThinClientBaseDM::checkDupAndAdd(std::shared_ptr<EventId> eventid) {
+  return m_connManager.checkDupAndAdd(eventid);
+}
+
+std::recursive_mutex& ThinClientBaseDM::getRedundancyLock() {
+  return m_connManager.getRedundancyLock();
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/ThinClientBaseDM.hpp b/cppcache/src/ThinClientBaseDM.hpp
index 7a235b9..779f441 100644
--- a/cppcache/src/ThinClientBaseDM.hpp
+++ b/cppcache/src/ThinClientBaseDM.hpp
@@ -20,23 +20,30 @@
 #ifndef GEODE_THINCLIENTBASEDM_H_
 #define GEODE_THINCLIENTBASEDM_H_
 
+#include <memory>
 #include <vector>
 
 #include <geode/internal/geode_globals.hpp>
 
-#include "TcrConnectionManager.hpp"
-#include "TcrEndpoint.hpp"
+#include "Queue.hpp"
+#include "Task.hpp"
+#include "util/Log.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
+class TcrMessage;
+class ThinClientRegion;
+class TcrEndpoint;
+class TcrConnectionManager;
+class TcrMessageReply;
+class TcrChunkedContext;
+class EventId;
+
 /**
  * @brief Distribute data between caches
  */
-class TcrMessage;
-class ThinClientRegion;
-
 class ThinClientBaseDM {
  public:
   ThinClientBaseDM(TcrConnectionManager& connManager, ThinClientRegion* region);
@@ -108,13 +115,9 @@
 
   virtual TcrEndpoint* getActiveEndpoint() { return nullptr; }
 
-  virtual bool checkDupAndAdd(std::shared_ptr<EventId> eventid) {
-    return m_connManager.checkDupAndAdd(eventid);
-  }
+  virtual bool checkDupAndAdd(std::shared_ptr<EventId> eventid);
 
-  virtual ACE_Recursive_Thread_Mutex* getRedundancyLock() {
-    return m_connManager.getRedundancyLock();
-  }
+  virtual std::recursive_mutex& getRedundancyLock();
 
   static bool isDeltaEnabledOnServer() { return s_isDeltaEnabledOnServer; }
 
@@ -172,7 +175,7 @@
   ThinClientRegion* m_region;
 
   // methods for the chunk processing thread
-  int processChunks(volatile bool& isRunning);
+  void processChunks(std::atomic<bool>& isRunning);
   void startChunkProcessor();
   void stopChunkProcessor();
 
@@ -193,7 +196,7 @@
   bool m_clientNotification;
 
   Queue<TcrChunkedContext*> m_chunks;
-  Task<ThinClientBaseDM>* m_chunkProcessor;
+  std::unique_ptr<Task<ThinClientBaseDM>> m_chunkProcessor;
 
  private:
   static volatile bool s_isDeltaEnabledOnServer;
diff --git a/cppcache/src/ThinClientCacheDistributionManager.cpp b/cppcache/src/ThinClientCacheDistributionManager.cpp
index 50e1acf..7a67a10 100644
--- a/cppcache/src/ThinClientCacheDistributionManager.cpp
+++ b/cppcache/src/ThinClientCacheDistributionManager.cpp
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "ThinClientCacheDistributionManager.hpp"
 
 #include <algorithm>
@@ -25,6 +26,7 @@
 #include "CacheImpl.hpp"
 #include "ReadWriteLock.hpp"
 #include "RemoteQueryService.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrEndpoint.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientBaseDM.hpp"
@@ -52,7 +54,7 @@
 
   reply.setDM(this);
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
+  std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
 
   // Return best effort result: If CQ succeeds on ANY server return no-error
   // even if
@@ -134,8 +136,7 @@
   //  take the global endpoint lock so that the global endpoints list
   // does not change while we are (possibly) adding endpoint to this endpoints
   // list and incrementing the reference count of endpoint
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(
-      m_connManager.getGlobalEndpoints().mutex());
+  auto&& guard = m_connManager.getGlobalEndpoints().make_lock();
   //  This method is called at the time of failover to refresh
   // the list of endpoints.
   std::vector<TcrEndpoint*> currentGlobalEndpointsList;
@@ -143,23 +144,18 @@
 
   //  Update local list with new endpoints.
   std::vector<TcrEndpoint*> newEndpointsList;
-  for (std::vector<TcrEndpoint*>::iterator it =
-           currentGlobalEndpointsList.begin();
-       it != currentGlobalEndpointsList.end(); ++it) {
+  for (const auto& it : currentGlobalEndpointsList) {
     bool found = false;
-    for (std::vector<TcrEndpoint*>::iterator currIter = m_endpoints.begin();
-         currIter != m_endpoints.end(); ++currIter) {
-      if (*currIter == *it) {
+    for (const auto& currIter : m_endpoints) {
+      if (currIter == it) {
         found = true;
         break;
       }
     }
-    if (!found) newEndpointsList.push_back(*it);
+    if (!found) newEndpointsList.push_back(it);
   }
 
-  for (std::vector<TcrEndpoint*>::iterator it = newEndpointsList.begin();
-       it != newEndpointsList.end(); ++it) {
-    TcrEndpoint* ep = *it;
+  for (const auto& ep : newEndpointsList) {
     m_endpoints.push_back(ep);
     ep->setNumRegions(ep->numRegions() + 1);
     LOGFINER(
diff --git a/cppcache/src/ThinClientDistributionManager.cpp b/cppcache/src/ThinClientDistributionManager.cpp
index 723c64d..5bf8cfe 100644
--- a/cppcache/src/ThinClientDistributionManager.cpp
+++ b/cppcache/src/ThinClientDistributionManager.cpp
@@ -23,6 +23,8 @@
 #include <geode/SystemProperties.hpp>
 
 #include "DistributedSystemImpl.hpp"
+#include "TcrConnectionManager.hpp"
+#include "TcrEndpoint.hpp"
 #include "ThinClientRegion.hpp"
 #include "util/exception.hpp"
 
@@ -68,7 +70,7 @@
     return;
   }
   DistManagersLockGuard _guard(m_connManager);
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
+  std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
   if (m_activeEndpoint >= 0) {
     m_endpoints[m_activeEndpoint]->unregisterDM(m_clientNotification, this);
   }
@@ -160,7 +162,7 @@
   }
 
   if (!isFatalError(error)) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
+    std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
     GfErrType connErr = GF_NOERR;
     while (error != GF_NOERR && !isFatalError(error) &&
            (connErr = selectEndpoint(randIndex, doRand, useActiveEndpoint,
@@ -249,7 +251,7 @@
 
   if (currentEndpoint < 0 || !m_endpoints[currentEndpoint]->connected() ||
       forceSelect) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
+    std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
     if (m_activeEndpoint < 0 || !m_endpoints[m_activeEndpoint]->connected() ||
         forceSelect) {  // double check
       currentEndpoint = m_activeEndpoint;
diff --git a/cppcache/src/ThinClientDistributionManager.hpp b/cppcache/src/ThinClientDistributionManager.hpp
index d16421e..794cbf2 100644
--- a/cppcache/src/ThinClientDistributionManager.hpp
+++ b/cppcache/src/ThinClientDistributionManager.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_THINCLIENTDISTRIBUTIONMANAGER_H_
-#define GEODE_THINCLIENTDISTRIBUTIONMANAGER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,11 +15,19 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_THINCLIENTDISTRIBUTIONMANAGER_H_
+#define GEODE_THINCLIENTDISTRIBUTIONMANAGER_H_
+
+#include <mutex>
+
 #include "ThinClientBaseDM.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 class ThinClientDistributionManager : public ThinClientBaseDM {
  public:
   ThinClientDistributionManager(TcrConnectionManager& connManager,
@@ -40,8 +43,8 @@
 
   void failover() override;
 
-  void acquireFailoverLock() override { m_endpointsLock.acquire_read(); };
-  void releaseFailoverLock() override { m_endpointsLock.release(); };
+  void acquireFailoverLock() override { m_endpointsLock.lock(); };
+  void releaseFailoverLock() override { m_endpointsLock.unlock(); };
 
   TcrEndpoint* getActiveEndpoint() override {
     return m_endpoints[m_activeEndpoint];
@@ -76,7 +79,7 @@
   volatile int m_activeEndpoint;
 
   std::vector<TcrEndpoint*> m_endpoints;
-  ACE_Recursive_Thread_Mutex m_endpointsLock;
+  std::recursive_mutex m_endpointsLock;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/ThinClientHARegion.cpp b/cppcache/src/ThinClientHARegion.cpp
index 8205c57..3d11082 100644
--- a/cppcache/src/ThinClientHARegion.cpp
+++ b/cppcache/src/ThinClientHARegion.cpp
@@ -43,16 +43,6 @@
 void ThinClientHARegion::initTCR() {
   try {
     const bool isPool = !m_attributes.getPoolName().empty();
-    if (m_cacheImpl->getDistributedSystem()
-            .getSystemProperties()
-            .isGridClient()) {
-      LOGWARN(
-          "Region: HA region having notification channel created for grid "
-          "client; force starting required notification, cleanup and "
-          "failover threads");
-      m_cacheImpl->tcrConnectionManager().startFailoverAndCleanupThreads(
-          isPool);
-    }
 
     if (isPool) {
       m_tcrdm = dynamic_cast<ThinClientPoolHADM*>(
diff --git a/cppcache/src/ThinClientLocatorHelper.cpp b/cppcache/src/ThinClientLocatorHelper.cpp
index 78fd5f5..e7174ce 100644
--- a/cppcache/src/ThinClientLocatorHelper.cpp
+++ b/cppcache/src/ThinClientLocatorHelper.cpp
@@ -32,10 +32,13 @@
 #include "QueueConnectionRequest.hpp"
 #include "QueueConnectionResponse.hpp"
 #include "TcpSslConn.hpp"
+#include "TcrConnectionManager.hpp"
 #include "ThinClientPoolDM.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
+
 const int BUFF_SIZE = 3000;
 
 class ConnectionWrapper {
@@ -87,7 +90,7 @@
 GfErrType ThinClientLocatorHelper::getAllServers(
     std::vector<std::shared_ptr<ServerLocation> >& servers,
     const std::string& serverGrp) {
-  ACE_Guard<ACE_Thread_Mutex> guard(m_locatorLock);
+  std::lock_guard<decltype(m_locatorLock)> guard(m_locatorLock);
 
   auto& sysProps = m_poolDM->getConnectionManager()
                        .getCacheImpl()
@@ -151,7 +154,7 @@
     ClientProxyMembershipID& memId, std::list<ServerLocation>& outEndpoint,
     std::string&, int redundancy, const std::set<ServerLocation>& exclEndPts,
     const std::string& serverGrp) {
-  ACE_Guard<ACE_Thread_Mutex> guard(m_locatorLock);
+  std::lock_guard<decltype(m_locatorLock)> guard(m_locatorLock);
   auto& sysProps = m_poolDM->getConnectionManager()
                        .getCacheImpl()
                        ->getDistributedSystem()
@@ -233,7 +236,7 @@
     const std::set<ServerLocation>& exclEndPts, const std::string& serverGrp,
     const TcrConnection* currentServer) {
   bool locatorFound = false;
-  ACE_Guard<ACE_Thread_Mutex> guard(m_locatorLock);
+  std::lock_guard<decltype(m_locatorLock)> guard(m_locatorLock);
   auto& sysProps = m_poolDM->getConnectionManager()
                        .getCacheImpl()
                        ->getDistributedSystem()
@@ -334,7 +337,7 @@
 
 GfErrType ThinClientLocatorHelper::updateLocators(
     const std::string& serverGrp) {
-  ACE_Guard<ACE_Thread_Mutex> guard(m_locatorLock);
+  std::lock_guard<decltype(m_locatorLock)> guard(m_locatorLock);
   auto& sysProps = m_poolDM->getConnectionManager()
                        .getCacheImpl()
                        ->getDistributedSystem()
diff --git a/cppcache/src/ThinClientLocatorHelper.hpp b/cppcache/src/ThinClientLocatorHelper.hpp
index a3ede6a..c72f950 100644
--- a/cppcache/src/ThinClientLocatorHelper.hpp
+++ b/cppcache/src/ThinClientLocatorHelper.hpp
@@ -21,22 +21,25 @@
 #define GEODE_THINCLIENTLOCATORHELPER_H_
 
 #include <list>
+#include <mutex>
 #include <set>
 #include <string>
 
 #include <geode/internal/geode_globals.hpp>
 
 #include "ClientProxyMembershipID.hpp"
+#include "ErrType.hpp"
 #include "GetAllServersRequest.hpp"
 #include "GetAllServersResponse.hpp"
 #include "ServerLocation.hpp"
-#include "TcrEndpoint.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
-class TcrEndpoint;
+
 class ThinClientPoolDM;
+class Connector;
+
 class ThinClientLocatorHelper {
  public:
   ThinClientLocatorHelper(const std::vector<std::string>& locatorAddresses,
@@ -63,7 +66,7 @@
                               int32_t port,
                               std::chrono::microseconds waitSeconds,
                               int32_t maxBuffSizePool = 0);
-  ACE_Thread_Mutex m_locatorLock;
+  std::mutex m_locatorLock;
   std::vector<ServerLocation> m_locHostPort;
   const ThinClientPoolDM* m_poolDM;
   ThinClientLocatorHelper(const ThinClientLocatorHelper&);
diff --git a/cppcache/src/ThinClientPoolDM.cpp b/cppcache/src/ThinClientPoolDM.cpp
index 4ac91f2..f0c9da2 100644
--- a/cppcache/src/ThinClientPoolDM.cpp
+++ b/cppcache/src/ThinClientPoolDM.cpp
@@ -31,6 +31,7 @@
 #include "ExpiryHandler_T.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "NonCopyable.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrEndpoint.hpp"
 #include "ThinClientRegion.hpp"
 #include "ThinClientStickyManager.hpp"
@@ -91,8 +92,7 @@
         m_keys.get(), m_poolDM, m_aCallbackArgument);
     m_reply = new TcrMessageReply(true, m_poolDM);
     if (m_poolDM->isMultiUserMode()) {
-      m_userAttribute = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                            ->getUserAttributes();
+      m_userAttribute = UserAttributes::threadLocalUserAttributes;
     }
 
     m_resultCollector = (new ChunkedGetAllResponse(
@@ -208,7 +208,8 @@
     }
   }
   if (m_attrs->getPRSingleHopEnabled()) {
-    m_clientMetadataService = new ClientMetadataService(this);
+    m_clientMetadataService =
+        std::unique_ptr<ClientMetadataService>(new ClientMetadataService(this));
   }
   m_manager = new ThinClientStickyManager(this);
 }
@@ -231,15 +232,18 @@
 
   m_connManager.init(true);
 
-  LOGDEBUG("ThinClientPoolDM::init: is grid client = %d ",
-           sysProp.isGridClient());
-
-  if (!sysProp.isGridClient()) {
-    ThinClientPoolDM::startBackgroundThreads();
-  }
+  ThinClientPoolDM::startBackgroundThreads();
 
   LOGDEBUG("ThinClientPoolDM::init: Completed initialization");
 }
+
+ThinClientPoolDM::~ThinClientPoolDM() {
+  destroy();
+  _GEODE_SAFE_DELETE(m_locHelper);
+  _GEODE_SAFE_DELETE(m_stats);
+  _GEODE_SAFE_DELETE(m_manager);
+}
+
 std::shared_ptr<Properties> ThinClientPoolDM::getCredentials(TcrEndpoint* ep) {
   auto cacheImpl = m_connManager.getCacheImpl();
   const auto& distributedSystem = cacheImpl->getDistributedSystem();
@@ -262,8 +266,9 @@
 
 void ThinClientPoolDM::startBackgroundThreads() {
   LOGDEBUG("ThinClientPoolDM::startBackgroundThreads: Starting ping thread");
-  m_pingTask = new Task<ThinClientPoolDM>(this, &ThinClientPoolDM::pingServer,
-                                          NC_Ping_Thread);
+  m_pingTask =
+      std::unique_ptr<Task<ThinClientPoolDM>>(new Task<ThinClientPoolDM>(
+          this, &ThinClientPoolDM::pingServer, NC_Ping_Thread));
   m_pingTask->start();
 
   auto& props = m_connManager.getCacheImpl()
@@ -272,21 +277,21 @@
 
   if (props.onClientDisconnectClearPdxTypeIds() == true) {
     m_cliCallbackTask =
-        new Task<ThinClientPoolDM>(this, &ThinClientPoolDM::cliCallback);
+        std::unique_ptr<Task<ThinClientPoolDM>>(new Task<ThinClientPoolDM>(
+            this, &ThinClientPoolDM::cliCallback, "NC_cliCallback"));
     m_cliCallbackTask->start();
   }
 
-  auto pingInterval =
-      static_cast<int32_t>(getPingInterval().count() / (1000 * 2));
-  if (pingInterval > 0) {
+  const auto& pingInterval = getPingInterval() / 2;
+  if (pingInterval > std::chrono::seconds::zero()) {
     LOGDEBUG(
         "ThinClientPoolDM::startBackgroundThreads: Scheduling ping task at %ld",
-        pingInterval);
+        pingInterval.count());
     auto pingHandler =
         new ExpiryHandler_T<ThinClientPoolDM>(this, &ThinClientPoolDM::doPing);
     m_pingTaskId =
         m_connManager.getCacheImpl()->getExpiryTaskManager().scheduleExpiryTask(
-            pingHandler, 1, pingInterval, false);
+            pingHandler, std::chrono::seconds(1), pingInterval, false);
   } else {
     LOGDEBUG(
         "ThinClientPoolDM::startBackgroundThreads: Not Scheduling ping task as "
@@ -294,15 +299,14 @@
         getPingInterval().count());
   }
 
-  auto updateLocatorListInterval =
-      static_cast<uint32_t>(getUpdateLocatorListInterval().count());
+  auto updateLocatorListInterval = getUpdateLocatorListInterval();
 
-  if (updateLocatorListInterval > 0) {
+  if (updateLocatorListInterval > std::chrono::seconds::zero()) {
     m_updateLocatorListTask =
-        new Task<ThinClientPoolDM>(this, &ThinClientPoolDM::updateLocatorList);
+        std::unique_ptr<Task<ThinClientPoolDM>>(new Task<ThinClientPoolDM>(
+            this, &ThinClientPoolDM::updateLocatorList, "NC_LocatorList"));
     m_updateLocatorListTask->start();
 
-    updateLocatorListInterval = updateLocatorListInterval / 1000;  // seconds
     LOGDEBUG(
         "ThinClientPoolDM::startBackgroundThreads: Creating updateLocatorList "
         "task");
@@ -312,18 +316,20 @@
     LOGDEBUG(
         "ThinClientPoolDM::startBackgroundThreads: Scheduling updater Locator "
         "task at %ld",
-        updateLocatorListInterval);
+        updateLocatorListInterval.count());
     m_updateLocatorListTaskId =
         m_connManager.getCacheImpl()->getExpiryTaskManager().scheduleExpiryTask(
-            updateLocatorListHandler, 1, updateLocatorListInterval, false);
+            updateLocatorListHandler, std::chrono::seconds(1),
+            updateLocatorListInterval, false);
   }
 
   LOGDEBUG(
       "ThinClientPoolDM::startBackgroundThreads: Starting manageConnections "
       "thread");
   // Manage Connection Thread
-  m_connManageTask = new Task<ThinClientPoolDM>(
-      this, &ThinClientPoolDM::manageConnections, NC_MC_Thread);
+  m_connManageTask =
+      std::unique_ptr<Task<ThinClientPoolDM>>(new Task<ThinClientPoolDM>(
+          this, &ThinClientPoolDM::manageConnections, NC_MC_Thread));
   m_connManageTask->start();
 
   auto idle = getIdleTimeout();
@@ -360,11 +366,12 @@
 
   LOGDEBUG(
       "ThinClientPoolDM::startBackgroundThreads: Starting pool stat sampler");
-  if (m_PoolStatsSampler == nullptr &&
+  if (!m_PoolStatsSampler &&
       getStatisticInterval() > std::chrono::milliseconds::zero() &&
       props.statisticsEnabled()) {
-    m_PoolStatsSampler = new statistics::PoolStatsSampler(
-        getStatisticInterval(), m_connManager.getCacheImpl(), this);
+    m_PoolStatsSampler = std::unique_ptr<statistics::PoolStatsSampler>(
+        new statistics::PoolStatsSampler(getStatisticInterval(),
+                                         m_connManager.getCacheImpl(), this));
     m_PoolStatsSampler->start();
   }
 
@@ -375,7 +382,7 @@
     m_clientMetadataService->start();
   }
 }
-int ThinClientPoolDM::manageConnections(volatile bool& isRunning) {
+void ThinClientPoolDM::manageConnections(std::atomic<bool>& isRunning) {
   LOGFINE("ThinClientPoolDM: starting manageConnections thread");
 
   while (isRunning) {
@@ -388,18 +395,17 @@
     }
   }
   LOGFINE("ThinClientPoolDM: ending manageConnections thread");
-  return 0;
 }
 
-void ThinClientPoolDM::cleanStaleConnections(volatile bool& isRunning) {
+void ThinClientPoolDM::cleanStaleConnections(std::atomic<bool>& isRunning) {
   if (!isRunning) {
     return;
   }
 
   LOGDEBUG("Cleaning stale connections");
 
-  ACE_Time_Value _idle(getIdleTimeout());
-  ACE_Time_Value _nextIdle = _idle;
+  auto _idle = getIdleTimeout();
+  auto _nextIdle = _idle;
   {
     TcrConnection* conn = nullptr;
 
@@ -411,9 +417,10 @@
       if (canItBeDeleted(conn)) {
         replacelist.push_back(conn);
       } else if (conn) {
-        ACE_Time_Value nextIdle =
-            _idle - (ACE_OS::gettimeofday() - conn->getLastAccessed());
-        if ((ACE_Time_Value(0, 0) < nextIdle) && (nextIdle < _nextIdle)) {
+        auto nextIdle =
+            _idle - std::chrono::duration_cast<std::chrono::milliseconds>(
+                        TcrConnection::clock::now() - conn->getLastAccessed());
+        if (nextIdle > std::chrono::seconds::zero() && nextIdle < _nextIdle) {
           _nextIdle = nextIdle;
         }
         savelist.push_back(conn);
@@ -437,9 +444,11 @@
         createPoolConnection(newConn, excludeServers, maxConnLimit,
                              /*hasExpired(conn) ? nullptr :*/ conn);
         if (newConn) {
-          ACE_Time_Value nextIdle =
-              _idle - (ACE_OS::gettimeofday() - newConn->getLastAccessed());
-          if ((ACE_Time_Value(0, 0) < nextIdle) && (nextIdle < _nextIdle)) {
+          auto nextIdle =
+              _idle -
+              std::chrono::duration_cast<std::chrono::milliseconds>(
+                  TcrConnection::clock::now() - conn->getLastAccessed());
+          if (nextIdle > std::chrono::seconds::zero() && nextIdle < _nextIdle) {
             _nextIdle = nextIdle;
           }
           savelist.push_back(newConn);
@@ -457,9 +466,12 @@
             LOGDEBUG("Removed a connection");
           } else {
             conn->updateCreationTime();
-            ACE_Time_Value nextIdle =
-                _idle - (ACE_OS::gettimeofday() - conn->getLastAccessed());
-            if ((ACE_Time_Value(0, 0) < nextIdle) && (nextIdle < _nextIdle)) {
+            auto nextIdle =
+                _idle -
+                std::chrono::duration_cast<std::chrono::milliseconds>(
+                    TcrConnection::clock::now() - conn->getLastAccessed());
+            if (nextIdle > std::chrono::seconds::zero() &&
+                nextIdle < _nextIdle) {
               _nextIdle = nextIdle;
             }
             savelist.push_back(conn);
@@ -478,18 +490,20 @@
   }
   if (m_connManageTaskId >= 0 && isRunning &&
       m_connManager.getCacheImpl()->getExpiryTaskManager().resetTask(
-          m_connManageTaskId, static_cast<uint32_t>(_nextIdle.sec() + 1))) {
+          m_connManageTaskId, _nextIdle)) {
     LOGERROR("Failed to reschedule connection manager");
   } else {
-    LOGFINEST("Rescheduled next connection manager run after %d seconds",
-              _nextIdle.sec() + 1);
+    LOGFINEST(
+        "Rescheduled next connection manager run after %d seconds",
+        std::chrono::duration_cast<std::chrono::seconds>(_nextIdle).count());
   }
 
   LOGDEBUG("Pool size is %d, pool counter is %d", size(), m_poolSize.load());
 }
-void ThinClientPoolDM::cleanStickyConnections(volatile bool&) {}
 
-void ThinClientPoolDM::restoreMinConnections(volatile bool& isRunning) {
+void ThinClientPoolDM::cleanStickyConnections(std::atomic<bool>&) {}
+
+void ThinClientPoolDM::restoreMinConnections(std::atomic<bool>& isRunning) {
   if (!isRunning) {
     return;
   }
@@ -521,7 +535,7 @@
   LOGDEBUG("Pool size is %d, pool counter is %d", size(), m_poolSize.load());
 }
 
-int ThinClientPoolDM::manageConnectionsInternal(volatile bool& isRunning) {
+void ThinClientPoolDM::manageConnectionsInternal(std::atomic<bool>& isRunning) {
   try {
     LOGFINE(
         "ThinClientPoolDM::manageConnections(): checking connections in pool "
@@ -542,7 +556,6 @@
   } catch (...) {
     LOGERROR("Unexpected exception during manage connections");
   }
-  return 0;
 }
 
 std::string ThinClientPoolDM::selectEndpoint(
@@ -568,15 +581,15 @@
     getStats().incLoctorResposes();
 
     char epNameStr[128] = {0};
-    ACE_OS::snprintf(epNameStr, 128, "%s:%d",
-                     outEndpoint.getServerName().c_str(),
-                     outEndpoint.getPort());
+    std::snprintf(epNameStr, 128, "%s:%d", outEndpoint.getServerName().c_str(),
+                  outEndpoint.getPort());
     LOGFINE("ThinClientPoolDM: Locator returned endpoint [%s]", epNameStr);
     return epNameStr;
   } else if (m_attrs->m_initServList
                  .size()) {  // use specified server endpoints
     // highly complex round-robin algorithm
-    ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_endpointSelectionLock);
+    std::lock_guard<decltype(m_endpointSelectionLock)> _guard(
+        m_endpointSelectionLock);
     if (m_server >= m_attrs->m_initServList.size()) {
       m_server = 0;
     }
@@ -607,6 +620,7 @@
   put(conn, false);
   ++m_poolSize;
 }
+
 GfErrType ThinClientPoolDM::sendRequestToAllServers(
     const char* func, uint8_t getResult, std::chrono::milliseconds timeout,
     std::shared_ptr<Cacheable> args, std::shared_ptr<ResultCollector>& rs,
@@ -615,7 +629,7 @@
 
   getStats().setCurClientOps(++m_clientOps);
 
-  auto resultCollectorLock = std::make_shared<ACE_Recursive_Thread_Mutex>();
+  auto resultCollectorLock = std::make_shared<std::recursive_mutex>();
 
   auto csArray = getServers();
 
@@ -624,31 +638,30 @@
     return GF_NOSERVER_FOUND;
   }
 
-  int feIndex = 0;
-  FunctionExecution* fePtrList = new FunctionExecution[csArray->length()];
-  auto* threadPool = m_connManager.getCacheImpl()->getThreadPool();
-  auto userAttr =
-      TSSUserAttributesWrapper::s_geodeTSSUserAttributes->getUserAttributes();
+  std::vector<std::shared_ptr<FunctionExecution>> fePtrList;
+  fePtrList.reserve(csArray->length());
+  auto& threadPool = m_connManager.getCacheImpl()->getThreadPool();
+  auto userAttr = UserAttributes::threadLocalUserAttributes;
   for (int i = 0; i < csArray->length(); i++) {
     auto cs = (*csArray)[i];
-    std::string endpointStr(cs->value().c_str());
-    TcrEndpoint* ep = nullptr;
-    if (m_endpoints.find(endpointStr, ep)) {
-      ep = addEP(cs->value().c_str());
+    auto endpointStr = cs->value();
+    auto ep = getEndpoint(endpointStr);
+    if (!ep) {
+      ep = addEP(cs->value());
     } else if (!ep->connected()) {
       LOGFINE(
           "ThinClientPoolDM::sendRequestToAllServers server not connected %s ",
           cs->value().c_str());
     }
-    FunctionExecution* funcExe = &fePtrList[feIndex++];
+    auto funcExe = std::make_shared<FunctionExecution>();
     funcExe->setParameters(func, getResult, timeout, args, ep, this,
                            resultCollectorLock, &rs, userAttr);
-    threadPool->perform(funcExe);
+    fePtrList.push_back(funcExe);
+    threadPool.perform(funcExe);
   }
   GfErrType finalErrorReturn = GF_NOERR;
 
-  for (int i = 0; i < feIndex; i++) {
-    FunctionExecution* funcExe = &fePtrList[i];
+  for (auto& funcExe : fePtrList) {
     err = funcExe->getResult();
     if (err != GF_NOERR) {
       if (funcExe->getException() == nullptr) {
@@ -688,7 +701,6 @@
   getStats().setCurClientOps(--m_clientOps);
   getStats().incSucceedClientOps();
 
-  delete[] fePtrList;
   return finalErrorReturn;
 }
 
@@ -738,7 +750,7 @@
     m_pingTask->stopNoblock();
     m_pingSema.release();
     m_pingTask->wait();
-    _GEODE_SAFE_DELETE(m_pingTask);
+    m_pingTask = nullptr;
     if (m_pingTaskId >= 0) {
       m_connManager.getCacheImpl()->getExpiryTaskManager().cancelTask(
           m_pingTaskId);
@@ -752,7 +764,7 @@
     m_updateLocatorListTask->stopNoblock();
     m_updateLocatorListSema.release();
     m_updateLocatorListTask->wait();
-    _GEODE_SAFE_DELETE(m_updateLocatorListTask);
+    m_updateLocatorListTask = nullptr;
     if (m_updateLocatorListTaskId >= 0) {
       m_connManager.getCacheImpl()->getExpiryTaskManager().cancelTask(
           m_updateLocatorListTaskId);
@@ -766,7 +778,7 @@
     m_cliCallbackTask->stopNoblock();
     m_cliCallbackSema.release();
     m_cliCallbackTask->wait();
-    _GEODE_SAFE_DELETE(m_cliCallbackTask);
+    m_cliCallbackTask = nullptr;
   }
 }
 
@@ -781,21 +793,21 @@
     }
 
     LOGDEBUG("Closing PoolStatsSampler thread.");
-    if (m_PoolStatsSampler != nullptr) {
+    if (m_PoolStatsSampler) {
       m_PoolStatsSampler->stop();
-      _GEODE_SAFE_DELETE(m_PoolStatsSampler);
+      m_PoolStatsSampler = nullptr;
     }
     LOGDEBUG("PoolStatsSampler thread closed .");
     stopCliCallbackThread();
     LOGDEBUG("ThinClientPoolDM::destroy( ): Closing connection manager.");
+    auto cacheImpl = m_connManager.getCacheImpl();
     if (m_connManageTask) {
       m_connManageTask->stopNoblock();
       m_connSema.release();
       m_connManageTask->wait();
-      _GEODE_SAFE_DELETE(m_connManageTask);
+      m_connManageTask = nullptr;
       if (m_connManageTaskId >= 0) {
-        m_connManager.getCacheImpl()->getExpiryTaskManager().cancelTask(
-            m_connManageTaskId);
+        cacheImpl->getExpiryTaskManager().cancelTask(m_connManageTaskId);
       }
     }
 
@@ -803,8 +815,9 @@
     stopPingThread();
     stopUpdateLocatorListThread();
 
-    if (m_clientMetadataService != nullptr) {
+    if (m_clientMetadataService) {
       m_clientMetadataService->stop();
+      // m_clientMetadataService = nullptr;
     }
     // closing all the thread local connections ( sticky).
     LOGDEBUG("ThinClientPoolDM::destroy( ): closing FairQueue, pool size = %d",
@@ -812,11 +825,8 @@
     close();
     LOGDEBUG("ThinClientPoolDM::destroy( ): after close ");
 
-    for (ACE_Map_Manager<std::string, TcrEndpoint*,
-                         ACE_Recursive_Thread_Mutex>::iterator iter =
-             m_endpoints.begin();
-         iter != m_endpoints.end(); ++iter) {
-      TcrEndpoint* ep = (*iter).int_id_;
+    for (const auto& iter : m_endpoints) {
+      auto ep = iter.second;
       LOGFINE("ThinClientPoolDM: forcing endpoint delete for %d in destructor",
               ep->name().c_str());
       _GEODE_SAFE_DELETE(ep);
@@ -824,14 +834,9 @@
 
     // Close Stats
     getStats().close();
-    m_connManager.getCacheImpl()->getStatisticsManager().forceSample();
+    cacheImpl->getStatisticsManager().forceSample();
 
-    if (m_clientMetadataService != nullptr) {
-      _GEODE_SAFE_DELETE(m_clientMetadataService);
-    }
-
-    m_connManager.getCacheImpl()->getPoolManager().removePool(
-        m_poolName.c_str());
+    cacheImpl->getPoolManager().removePool(m_poolName);
 
     stopChunkProcessor();
     m_manager->closeAllStickyConnections();
@@ -869,30 +874,18 @@
                     ->getDistributedSystem()
                     .getSystemProperties();
 
-  if (props.isGridClient()) {
-    LOGWARN("Initializing query service while grid-client setting is enabled.");
-    // Init Query Service
-    m_remoteQueryServicePtr = std::make_shared<RemoteQueryService>(
-        m_connManager.getCacheImpl(), this);
-    m_remoteQueryServicePtr->init();
-  } else {
-    LOGWARN("Remote query service is not initialized.");
-  }
+  LOGWARN("Remote query service is not initialized.");
 
   return m_remoteQueryServicePtr;
 }
 void ThinClientPoolDM::sendUserCacheCloseMessage(bool keepAlive) {
   LOGDEBUG("ThinClientPoolDM::sendUserCacheCloseMessage");
-  auto userAttribute =
-      TSSUserAttributesWrapper::s_geodeTSSUserAttributes->getUserAttributes();
+  auto userAttribute = UserAttributes::threadLocalUserAttributes;
 
-  std::map<std::string, UserConnectionAttributes*>& uca =
-      userAttribute->getUserConnectionServers();
+  auto& ucs = userAttribute->getUserConnectionServers();
 
-  std::map<std::string, UserConnectionAttributes*>::iterator it;
-
-  for (it = uca.begin(); it != uca.end(); it++) {
-    UserConnectionAttributes* uca = (*it).second;
+  for (const auto& it : ucs) {
+    auto uca = it.second;
     if (uca->isAuthenticated() && uca->getEndpoint()->connected()) {
       TcrMessageRemoveUserAuth request(
           new DataOutput(m_connManager.getCacheImpl()->createDataOutput()),
@@ -1194,19 +1187,17 @@
       return ep;
     }
 
-    if (m_endpoints.find(serverLocation->getEpString(), ep) != -1) {
+    ep = getEndpoint(serverLocation->getEpString());
+    if (ep) {
       LOGDEBUG("Endpoint for single hop is %p", ep);
       return ep;
     }
 
     // do for pool with endpoints. Add endpoint into m_endpoints only when we
     // did not find it above and it is in the pool's m_initServList.
-    for (std::vector<std::string>::iterator itr =
-             m_attrs->m_initServList.begin();
-         itr != m_attrs->m_initServList.end(); ++itr) {
-      if ((ACE_OS::strcmp(serverLocation->getEpString().c_str(),
-                          (*itr).c_str()) == 0)) {
-        ep = addEP(*(serverLocation.get()));  // see if this is new endpoint
+    for (const auto& itr : m_attrs->m_initServList) {
+      if (serverLocation->getEpString() == itr) {
+        ep = addEP(*serverLocation);  // see if this is new endpoint
         break;
       }
     }
@@ -1241,14 +1232,13 @@
   return ep;
 }
 
-// gets the endpoint from the list of endpoints using the endpoint Name
-TcrEndpoint* ThinClientPoolDM::getEndPoint(std::string epNameStr) {
-  TcrEndpoint* ep = nullptr;
-  if (m_endpoints.find(epNameStr, ep) != -1) {
-    LOGDEBUG("Endpoint for single hop is %p", ep);
-    return ep;
+TcrEndpoint* ThinClientPoolDM::getEndpoint(const std::string& endpointName) {
+  auto&& guard = m_endpoints.make_lock();
+  const auto& find = m_endpoints.find(endpointName);
+  if (find == m_endpoints.end()) {
+    return nullptr;
   }
-  return ep;
+  return find->second;
 }
 
 GfErrType ThinClientPoolDM::sendSyncRequest(TcrMessage& request,
@@ -1274,9 +1264,9 @@
       return sendSyncRequest(request, reply, attemptFailover, isBGThread,
                              nullptr);
     }
-    std::vector<GetAllWork*> getAllWorkers;
-    auto* threadPool = m_connManager.getCacheImpl()->getThreadPool();
-    ChunkedGetAllResponse* responseHandler =
+    std::vector<std::shared_ptr<GetAllWork>> getAllWorkers;
+    auto& threadPool = m_connManager.getCacheImpl()->getThreadPool();
+    auto responseHandler =
         static_cast<ChunkedGetAllResponse*>(reply.getChunkedResultHandler());
 
     for (const auto& locationIter : *locationMap) {
@@ -1284,18 +1274,16 @@
       if (serverLocation == nullptr) {
       }
       const auto& keys = locationIter.second;
-      auto worker =
-          new GetAllWork(this, region, serverLocation, keys, attemptFailover,
-                         isBGThread, responseHandler->getAddToLocalCache(),
-                         responseHandler, request.getCallbackArgument());
-      threadPool->perform(worker);
+      auto worker = std::make_shared<GetAllWork>(
+          this, region, serverLocation, keys, attemptFailover, isBGThread,
+          responseHandler->getAddToLocalCache(), responseHandler,
+          request.getCallbackArgument());
+      threadPool.perform(worker);
       getAllWorkers.push_back(worker);
     }
     reply.setMessageType(TcrMessage::RESPONSE);
 
-    for (std::vector<GetAllWork*>::iterator iter = getAllWorkers.begin();
-         iter != getAllWorkers.end(); iter++) {
-      GetAllWork* worker = *iter;
+    for (auto& worker : getAllWorkers) {
       GfErrType err = worker->getResult();
 
       if (err != GF_NOERR) {
@@ -1306,8 +1294,6 @@
       if (currentReply->getMessageType() != TcrMessage::RESPONSE) {
         reply.setMessageType(currentReply->getMessageType());
       }
-
-      delete worker;
     }
     return error;
   } else {
@@ -1393,8 +1379,7 @@
                                      request, version, singleHopConnFound,
                                      connFound, serverLocation);
     } else {
-      userAttr = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                     ->getUserAttributes();
+      userAttr = UserAttributes::threadLocalUserAttributes;
       if (userAttr == nullptr) {
         LOGWARN("Attempted operation type %d without credentials",
                 request.getMessageType());
@@ -1636,7 +1621,7 @@
   conn = nullptr;
 
   GfErrType error = GF_NOERR;
-  auto theEP = getEndPoint(epNameStr);
+  auto theEP = getEndpoint(epNameStr);
 
   LOGFINE(
       "ThinClientPoolDM::getConnectionToAnEndPoint( ): Getting endpoint object "
@@ -1811,9 +1796,9 @@
       LOGFINE("Endpoint selection failed");
       return GF_NOTCON;
     }
+
     LOGFINE("Connecting to %s", epNameStr.c_str());
-    TcrEndpoint* ep = nullptr;
-    ep = addEP(epNameStr.c_str());
+    auto ep = addEP(epNameStr);
 
     if (currentserver != nullptr &&
         epNameStr == currentserver->getEndpointObject()->name()) {
@@ -1973,16 +1958,8 @@
         error = this->sendUserCredentials(this->getCredentials(currentEndpoint),
                                           conn, false, isServerException);
       } else if (this->m_isMultiUserMode) {
-        ua = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                 ->getUserAttributes();
-        if (ua == nullptr) {
-          LOGWARN("Attempted operation type %d without credentials",
-                  request.getMessageType());
-          if (conn) {
-            putInQueue(conn, false, request.forTransaction());
-          }
-          return GF_NOT_AUTHORIZED_EXCEPTION;
-        } else {
+        ua = UserAttributes::threadLocalUserAttributes;
+        if (ua) {
           UserConnectionAttributes* uca =
               ua->getConnectionAttribute(currentEndpoint);
 
@@ -1990,6 +1967,13 @@
             error = this->sendUserCredentials(ua->getCredentials(), conn, false,
                                               isServerException);
           }
+        } else {
+          LOGWARN("Attempted operation type %d without credentials",
+                  request.getMessageType());
+          if (conn) {
+            putInQueue(conn, false, request.forTransaction());
+          }
+          return GF_NOT_AUTHORIZED_EXCEPTION;
         }
       }
     }
@@ -2055,29 +2039,28 @@
   std::string serverName = serverLoc.getServerName();
   int port = serverLoc.getPort();
   char endpointName[100];
-  ACE_OS::snprintf(endpointName, 100, "%s:%d", serverName.c_str(), port);
+  std::snprintf(endpointName, 100, "%s:%d", serverName.c_str(), port);
 
   return addEP(endpointName);
 }
 
-TcrEndpoint* ThinClientPoolDM::addEP(const char* endpointName) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
-  TcrEndpoint* ep = nullptr;
+TcrEndpoint* ThinClientPoolDM::addEP(const std::string& endpointName) {
+  std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
 
-  std::string fullName = endpointName;
-  if (m_endpoints.find(fullName, ep)) {
-    LOGFINE("Created new endpoint %s for pool %s", fullName.c_str(),
+  auto ep = getEndpoint(endpointName);
+  if (!ep) {
+    LOGFINE("Created new endpoint %s for pool %s", endpointName.c_str(),
             m_poolName.c_str());
-    ep = createEP(fullName.c_str());
-    if (m_endpoints.bind(fullName, ep)) {
-      LOGERROR("Failed to add endpoint %s to pool %s", fullName.c_str(),
+    ep = createEP(endpointName.c_str());
+    if (m_endpoints.emplace(endpointName, ep).second) {
+      LOGERROR("Failed to add endpoint %s to pool %s", endpointName.c_str(),
                m_poolName.c_str());
       GF_DEV_ASSERT(
           "ThinClientPoolDM::addEP( ): failed to add endpoint" ? false : false);
     }
   }
   // Update Server Stats
-  getStats().setServers(static_cast<int32_t>(m_endpoints.current_size()));
+  getStats().setServers(static_cast<int32_t>(m_endpoints.size()));
   return ep;
 }
 
@@ -2089,22 +2072,20 @@
 
 void ThinClientPoolDM::pingServerLocal() {
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(getPoolLock());
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
-  for (ACE_Map_Manager<std::string, TcrEndpoint*,
-                       ACE_Recursive_Thread_Mutex>::iterator it =
-           m_endpoints.begin();
-       it != m_endpoints.end(); it++) {
-    if ((*it).int_id_->connected()) {
-      (*it).int_id_->pingServer(this);
-      if (!(*it).int_id_->connected()) {
-        removeEPConnections((*it).int_id_);
-        removeCallbackConnection((*it).int_id_);
+  std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
+  for (auto& it : m_endpoints) {
+    auto endpoint = it.second;
+    if (endpoint->connected()) {
+      endpoint->pingServer(this);
+      if (!endpoint->connected()) {
+        removeEPConnections(endpoint);
+        removeCallbackConnection(endpoint);
       }
     }
   }
 }
 
-int ThinClientPoolDM::updateLocatorList(volatile bool& isRunning) {
+void ThinClientPoolDM::updateLocatorList(std::atomic<bool>& isRunning) {
   LOGFINE("Starting updateLocatorList thread for pool %s", m_poolName.c_str());
   while (isRunning) {
     m_updateLocatorListSema.acquire();
@@ -2113,10 +2094,9 @@
     }
   }
   LOGFINE("Ending updateLocatorList thread for pool %s", m_poolName.c_str());
-  return 0;
 }
 
-int ThinClientPoolDM::pingServer(volatile bool& isRunning) {
+void ThinClientPoolDM::pingServer(std::atomic<bool>& isRunning) {
   LOGFINE("Starting ping thread for pool %s", m_poolName.c_str());
   while (isRunning) {
     m_pingSema.acquire();
@@ -2128,10 +2108,9 @@
     }
   }
   LOGFINE("Ending ping thread for pool %s", m_poolName.c_str());
-  return 0;
 }
 
-int ThinClientPoolDM::cliCallback(volatile bool& isRunning) {
+void ThinClientPoolDM::cliCallback(std::atomic<bool>& isRunning) {
   LOGFINE("Starting cliCallback thread for pool %s", m_poolName.c_str());
   while (isRunning) {
     m_cliCallbackSema.acquire();
@@ -2148,7 +2127,6 @@
     }
   }
   LOGFINE("Ending cliCallback thread for pool %s", m_poolName.c_str());
-  return 0;
 }
 
 int ThinClientPoolDM::doPing(const ACE_Time_Value&, const void*) {
@@ -2199,7 +2177,7 @@
     bool queue = false;
     {
       ACE_Guard<ACE_Recursive_Thread_Mutex> poolguard(m_queueLock);  // PXR
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guardQueue(
+      std::lock_guard<decltype(endPt->getQueueHostedMutex())> guardQueue(
           endPt->getQueueHostedMutex());
       queue = endPt->isQueueHosted();
       if (queue) {
@@ -2328,11 +2306,11 @@
 
   m_destroyPending = true;
 }
-void ThinClientPoolDM::updateNotificationStats(bool isDeltaSuccess,
-                                               int64_t timeInNanoSecond) {
+void ThinClientPoolDM::updateNotificationStats(
+    bool isDeltaSuccess, std::chrono::nanoseconds timeInNanoSecond) {
   if (isDeltaSuccess) {
     getStats().incProcessedDeltaMessages();
-    getStats().incProcessedDeltaMessagesTime(timeInNanoSecond);
+    getStats().incProcessedDeltaMessagesTime(timeInNanoSecond.count());
   } else {
     getStats().incDeltaMessageFailures();
   }
@@ -2399,7 +2377,7 @@
   if (request.forTransaction()) {
     bool connFound =
         m_manager->getStickyConnection(conn, error, excludeServers, true);
-    TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    auto txState = TSSTXStateWrapper::get().getTXState();
     if (*error == GF_NOERR && !connFound &&
         (txState == nullptr || txState->isDirty())) {
       *error = doFailover(conn);
@@ -2482,6 +2460,106 @@
   return conn;
 }
 
+bool ThinClientPoolDM::checkDupAndAdd(std::shared_ptr<EventId> eventid) {
+  return m_connManager.checkDupAndAdd(eventid);
+}
+
+TcrEndpoint* ThinClientPoolDM::createEP(const char* endpointName) {
+  return new TcrPoolEndPoint(
+      endpointName, m_connManager.getCacheImpl(), m_connManager.m_failoverSema,
+      m_connManager.m_cleanupSema, m_connManager.m_redundancySema, this);
+}
+
+GfErrType FunctionExecution::execute(void) {
+  GuardUserAttributes gua;
+
+  if (m_userAttr) {
+    gua.setAuthenticatedView(m_userAttr->getAuthenticatedView());
+  }
+
+  std::string funcName(m_func);
+  TcrMessageExecuteFunction request(
+      new DataOutput(
+          m_poolDM->getConnectionManager().getCacheImpl()->createDataOutput()),
+      funcName, m_args, m_getResult, m_poolDM, m_timeout);
+  TcrMessageReply reply(true, m_poolDM);
+  ChunkedFunctionExecutionResponse* resultProcessor(
+      new ChunkedFunctionExecutionResponse(reply, (m_getResult & 2) == 2, *m_rc,
+                                           m_resultCollectorLock));
+  reply.setChunkedResultHandler(resultProcessor);
+  reply.setTimeout(m_timeout);
+  reply.setDM(m_poolDM);
+
+  LOGDEBUG(
+      "ThinClientPoolDM::sendRequestToAllServer sendRequest on endpoint[%s]!",
+      m_ep->name().c_str());
+
+  m_error = m_poolDM->sendRequestToEP(request, reply, m_ep);
+  m_error = m_poolDM->handleEPError(m_ep, reply, m_error);
+  if (m_error != GF_NOERR) {
+    if (m_error == GF_NOTCON || m_error == GF_IOERR) {
+      delete resultProcessor;
+      resultProcessor = nullptr;
+      return GF_NOERR;  // if server is unavailable its not an error for
+      // functionexec OnServers() case
+    }
+    LOGDEBUG("FunctionExecution::execute failed on endpoint[%s]!. Error = %d ",
+             m_ep->name().c_str(), m_error);
+    if (reply.getMessageType() == TcrMessage::EXCEPTION) {
+      exceptionPtr = CacheableString::create(reply.getException());
+    }
+
+    delete resultProcessor;
+    resultProcessor = nullptr;
+    return m_error;
+  } else if (reply.getMessageType() == TcrMessage::EXCEPTION ||
+             reply.getMessageType() == TcrMessage::EXECUTE_FUNCTION_ERROR) {
+    m_error = ThinClientRegion::handleServerException("Execute",
+                                                      reply.getException());
+    exceptionPtr = CacheableString::create(reply.getException());
+  }
+  if (resultProcessor->getResult() == true) {
+  }
+  delete resultProcessor;
+  resultProcessor = nullptr;
+  return m_error;
+}
+
+OnRegionFunctionExecution::OnRegionFunctionExecution(
+    std::string func, const Region* region, std::shared_ptr<Cacheable> args,
+    std::shared_ptr<CacheableHashSet> routingObj, uint8_t getResult,
+    std::chrono::milliseconds timeout, ThinClientPoolDM* poolDM,
+    const std::shared_ptr<std::recursive_mutex>& rCL,
+    std::shared_ptr<ResultCollector> rs,
+    std::shared_ptr<UserAttributes> userAttr, bool isBGThread,
+    const std::shared_ptr<BucketServerLocation>& serverLocation,
+    bool allBuckets)
+    : m_serverLocation(serverLocation),
+      m_isBGThread(isBGThread),
+      m_poolDM(poolDM),
+      m_func(func),
+      m_getResult(getResult),
+      m_timeout(timeout),
+      m_args(args),
+      m_routingObj(routingObj),
+      m_rc(rs),
+      m_resultCollectorLock(rCL),
+      m_userAttr(userAttr),
+      m_region(region),
+      m_allBuckets(allBuckets) {
+  m_request = new TcrMessageExecuteRegionFunctionSingleHop(
+      new DataOutput(
+          m_poolDM->getConnectionManager().getCacheImpl()->createDataOutput()),
+      m_func, m_region, m_args, m_routingObj, m_getResult, nullptr,
+      m_allBuckets, timeout, m_poolDM);
+  m_reply = new TcrMessageReply(true, m_poolDM);
+  m_resultCollector = new ChunkedFunctionExecutionResponse(
+      *m_reply, (m_getResult & 2) == 2, m_rc, m_resultCollectorLock);
+  m_reply->setChunkedResultHandler(m_resultCollector);
+  m_reply->setTimeout(m_timeout);
+  m_reply->setDM(m_poolDM);
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/ThinClientPoolDM.hpp b/cppcache/src/ThinClientPoolDM.hpp
index 88bc492..79e7506 100644
--- a/cppcache/src/ThinClientPoolDM.hpp
+++ b/cppcache/src/ThinClientPoolDM.hpp
@@ -20,17 +20,19 @@
 #ifndef GEODE_THINCLIENTPOOLDM_H_
 #define GEODE_THINCLIENTPOOLDM_H_
 
+#include <chrono>
 #include <memory>
+#include <mutex>
 #include <set>
 #include <string>
 #include <vector>
 
+#include <ace/Recursive_Thread_Mutex.h>
 #include <ace/Semaphore.h>
 
 #include <geode/Pool.hpp>
 #include <geode/ResultCollector.hpp>
 
-#include "ClientMetadataService.hpp"
 #include "ExecutionImpl.hpp"
 #include "FairQueue.hpp"
 #include "NonCopyable.hpp"
@@ -60,20 +62,8 @@
 
 class CacheImpl;
 class FunctionExecution;
+class ClientMetadataService;
 
-/* adongre
- * CID 28731: Other violation (MISSING_COPY)
- * Class "apache::geode::client::ThinClientPoolDM" owns resources that are
- managed in its
- * constructor and destructor but has no user-written copy constructor.
- * FIX : Make the class no Copyablez
-
- * CID 28717: Other violation (MISSING_ASSIGN)
- * Class "apache::geode::client::ThinClientPoolDM" owns resources that are
- * managed in its constructor and destructor but has no user-written assignment
- operator.
- * Fix : Make the class Non Assinable
- */
 class ThinClientPoolDM
     : public ThinClientBaseDM,
       public Pool,
@@ -84,56 +74,49 @@
   ThinClientPoolDM(const char* name, std::shared_ptr<PoolAttributes> poolAttrs,
                    TcrConnectionManager& connManager);
 
-  virtual void init();
+  void init() override;
 
-  const std::string& getName() const { return m_poolName; }
+  const std::string& getName() const override { return m_poolName; }
 
-  virtual GfErrType sendSyncRequest(TcrMessage& request, TcrMessageReply& reply,
-                                    bool attemptFailover = true,
-                                    bool isBGThread = false);
-  GfErrType sendSyncRequest(
+  GfErrType sendSyncRequest(TcrMessage& request, TcrMessageReply& reply,
+                            bool attemptFailover = true,
+                            bool isBGThread = false) override;
+  virtual GfErrType sendSyncRequest(
       TcrMessage& request, TcrMessageReply& reply, bool attemptFailover,
       bool isBGThread,
       const std::shared_ptr<BucketServerLocation>& serverLocation);
 
   // Pool Specific Fns.
-  virtual const std::shared_ptr<CacheableStringArray> getLocators() const;
-  virtual const std::shared_ptr<CacheableStringArray> getServers();
-  virtual void destroy(bool keepalive = false);
-  virtual bool isDestroyed() const;
-  virtual std::shared_ptr<QueryService> getQueryService();
+  const std::shared_ptr<CacheableStringArray> getLocators() const override;
+  const std::shared_ptr<CacheableStringArray> getServers() override;
+  void destroy(bool keepalive = false) override;
+  bool isDestroyed() const override;
+  std::shared_ptr<QueryService> getQueryService() override;
   virtual std::shared_ptr<QueryService> getQueryServiceWithoutCheck();
-  virtual bool isEndpointAttached(TcrEndpoint* ep);
+  bool isEndpointAttached(TcrEndpoint* ep) override;
   GfErrType sendRequestToAllServers(
       const char* func, uint8_t getResult, std::chrono::milliseconds timeout,
       std::shared_ptr<Cacheable> args, std::shared_ptr<ResultCollector>& rs,
       std::shared_ptr<CacheableString>& exceptionPtr);
 
   GfErrType sendRequestToEP(const TcrMessage& request, TcrMessageReply& reply,
-                            TcrEndpoint* currentEndpoint);
+                            TcrEndpoint* currentEndpoint) override;
   void addConnection(TcrConnection* conn);
 
   TcrEndpoint* addEP(ServerLocation& serverLoc);
 
-  TcrEndpoint* addEP(const char* endpointName);
-  virtual int pingServer(volatile bool& isRunning);
-  virtual int updateLocatorList(volatile bool& isRunning);
-  virtual int cliCallback(volatile bool& isRunning);
+  TcrEndpoint* addEP(const std::string& endpointName);
+  virtual void pingServer(std::atomic<bool>& isRunning);
+  virtual void updateLocatorList(std::atomic<bool>& isRunning);
+  virtual void cliCallback(std::atomic<bool>& isRunning);
   virtual void pingServerLocal();
 
-  virtual ~ThinClientPoolDM() {
-    destroy();
-    _GEODE_SAFE_DELETE(m_locHelper);
-    _GEODE_SAFE_DELETE(m_stats);
-    _GEODE_SAFE_DELETE(m_clientMetadataService);
-    _GEODE_SAFE_DELETE(m_manager);
-  }
+  ~ThinClientPoolDM() override;
+
   // void updateQueue(const char* regionPath) ;
   ClientProxyMembershipID* getMembershipId() { return m_memId.get(); }
   virtual void processMarker(){};
-  virtual bool checkDupAndAdd(std::shared_ptr<EventId> eventid) {
-    return m_connManager.checkDupAndAdd(eventid);
-  }
+  bool checkDupAndAdd(std::shared_ptr<EventId> eventid) override;
   ACE_Recursive_Thread_Mutex& getPoolLock() { return getQueueLock(); }
   void reducePoolSize(int num);
   void removeEPConnections(int numConn, bool triggerManagerConn = true);
@@ -143,7 +126,7 @@
                                  bool& maxConnLimit,
                                  const TcrConnection* currentServer = nullptr);
   ThinClientLocatorHelper* getLocatorHelper() { return m_locHelper; }
-  virtual void releaseThreadLocalConnection();
+  void releaseThreadLocalConnection() override;
   virtual void setThreadLocalConnection(TcrConnection* conn);
   bool excludeConnection(TcrConnection*, std::set<ServerLocation>&);
   void incRegionCount();
@@ -155,17 +138,18 @@
 
   virtual bool canItBeDeletedNoImpl(TcrConnection* conn);
 
-  void updateNotificationStats(bool isDeltaSuccess, int64_t timeInNanoSecond);
+  void updateNotificationStats(bool isDeltaSuccess,
+                               std::chrono::nanoseconds timeInNanoSecond);
 
-  virtual bool isSecurityOn() { return m_isSecurityOn || m_isMultiUserMode; }
+  bool isSecurityOn() override { return m_isSecurityOn || m_isMultiUserMode; }
 
-  virtual bool isMultiUserMode() { return m_isMultiUserMode; }
+  bool isMultiUserMode() override { return m_isMultiUserMode; }
 
   virtual void sendUserCacheCloseMessage(bool keepAlive);
 
   virtual inline PoolStats& getStats() { return *m_stats; }
 
-  size_t getNumberOfEndPoints() const { return m_endpoints.current_size(); }
+  size_t getNumberOfEndPoints() const override { return m_endpoints.size(); }
 
   int32_t GetPDXIdForType(std::shared_ptr<Serializable> pdxType);
 
@@ -191,7 +175,7 @@
       int8_t& version, std::set<ServerLocation>& excludeServers);
 
   ClientMetadataService* getClientMetaDataService() {
-    return m_clientMetadataService;
+    return m_clientMetadataService.get();
   }
   void setPrimaryServerQueueSize(int queueSize) {
     m_primaryServerQueueSize = queueSize;
@@ -201,15 +185,14 @@
  protected:
   ThinClientStickyManager* m_manager;
   std::vector<std::string> m_canonicalHosts;
-  ACE_Map_Manager<std::string, TcrEndpoint*, ACE_Recursive_Thread_Mutex>
+  synchronized_map<std::unordered_map<std::string, TcrEndpoint*>,
+                   std::recursive_mutex>
       m_endpoints;
-  ACE_Recursive_Thread_Mutex m_endpointsLock;
-  ACE_Recursive_Thread_Mutex m_endpointSelectionLock;
+  std::recursive_mutex m_endpointsLock;
+  std::recursive_mutex m_endpointSelectionLock;
   std::string m_poolName;
   PoolStats* m_stats;
   bool m_sticky;
-  // PoolStats * m_stats;
-  // PoolStatType* m_poolStatType;
   void netDown();
   ACE_Semaphore m_updateLocatorListSema;
   ACE_Semaphore m_pingSema;
@@ -223,7 +206,7 @@
   virtual void stopPingThread();
   virtual void stopUpdateLocatorListThread();
   virtual void stopCliCallbackThread();
-  virtual void cleanStickyConnections(volatile bool& isRunning);
+  virtual void cleanStickyConnections(std::atomic<bool>& isRunning);
   virtual TcrConnection* getConnectionFromQueue(bool timeout, GfErrType* error,
                                                 std::set<ServerLocation>&,
                                                 bool& maxConnLimit);
@@ -263,7 +246,7 @@
       std::shared_ptr<UserAttributes> userAttribute);
 
   // get endpoint using the endpoint string
-  TcrEndpoint* getEndPoint(std::string epNameStr);
+  TcrEndpoint* getEndpoint(const std::string& epNameStr);
 
   bool m_isSecurityOn;
   bool m_isMultiUserMode;
@@ -286,18 +269,13 @@
                               std::set<ServerLocation>& excludeServers,
                               bool& maxConnLimit);
   bool exclude(TcrConnection* conn, std::set<ServerLocation>& excludeServers);
-  void deleteAction() { removeEPConnections(1); }
+  void deleteAction() override { removeEPConnections(1); }
 
   std::string selectEndpoint(std::set<ServerLocation>&,
                              const TcrConnection* currentServer = nullptr);
   // TODO global - m_memId was volatile
   std::unique_ptr<ClientProxyMembershipID> m_memId;
-  virtual TcrEndpoint* createEP(const char* endpointName) {
-    return new TcrPoolEndPoint(endpointName, m_connManager.getCacheImpl(),
-                               m_connManager.m_failoverSema,
-                               m_connManager.m_cleanupSema,
-                               m_connManager.m_redundancySema, this);
-  }
+  virtual TcrEndpoint* createEP(const char* endpointName);
   virtual void removeCallbackConnection(TcrEndpoint*) {}
 
   bool excludeServer(std::string, std::set<ServerLocation>&);
@@ -312,23 +290,23 @@
 
   // Manage Connection thread
   ACE_Semaphore m_connSema;
-  Task<ThinClientPoolDM>* m_connManageTask;
-  Task<ThinClientPoolDM>* m_pingTask;
-  Task<ThinClientPoolDM>* m_updateLocatorListTask;
-  Task<ThinClientPoolDM>* m_cliCallbackTask;
+  std::unique_ptr<Task<ThinClientPoolDM>> m_connManageTask;
+  std::unique_ptr<Task<ThinClientPoolDM>> m_pingTask;
+  std::unique_ptr<Task<ThinClientPoolDM>> m_updateLocatorListTask;
+  std::unique_ptr<Task<ThinClientPoolDM>> m_cliCallbackTask;
   ExpiryTaskManager::id_type m_pingTaskId;
   ExpiryTaskManager::id_type m_updateLocatorListTaskId;
   ExpiryTaskManager::id_type m_connManageTaskId;
-  int manageConnections(volatile bool& isRunning);
+  void manageConnections(std::atomic<bool>& isRunning);
   int doPing(const ACE_Time_Value&, const void*);
   int doUpdateLocatorList(const ACE_Time_Value&, const void*);
   int doManageConnections(const ACE_Time_Value&, const void*);
-  int manageConnectionsInternal(volatile bool& isRunning);
-  void cleanStaleConnections(volatile bool& isRunning);
-  void restoreMinConnections(volatile bool& isRunning);
+  void manageConnectionsInternal(std::atomic<bool>& isRunning);
+  void cleanStaleConnections(std::atomic<bool>& isRunning);
+  void restoreMinConnections(std::atomic<bool>& isRunning);
   std::atomic<int32_t> m_clientOps;  // Actual Size of Pool
-  statistics::PoolStatsSampler* m_PoolStatsSampler;
-  ClientMetadataService* m_clientMetadataService;
+  std::unique_ptr<statistics::PoolStatsSampler> m_PoolStatsSampler;
+  std::unique_ptr<ClientMetadataService> m_clientMetadataService;
   friend class CacheImpl;
   friend class ThinClientStickyManager;
   friend class FunctionExecution;
@@ -346,7 +324,7 @@
   std::shared_ptr<Cacheable> m_args;
   GfErrType m_error;
   std::shared_ptr<ResultCollector>* m_rc;
-  std::shared_ptr<ACE_Recursive_Thread_Mutex> m_resultCollectorLock;
+  std::shared_ptr<std::recursive_mutex> m_resultCollectorLock;
   std::shared_ptr<CacheableString> exceptionPtr;
   std::shared_ptr<UserAttributes> m_userAttr;
 
@@ -370,7 +348,7 @@
                      std::chrono::milliseconds timeout,
                      std::shared_ptr<Cacheable> args, TcrEndpoint* ep,
                      ThinClientPoolDM* poolDM,
-                     const std::shared_ptr<ACE_Recursive_Thread_Mutex>& rCL,
+                     const std::shared_ptr<std::recursive_mutex>& rCL,
                      std::shared_ptr<ResultCollector>* rs,
                      std::shared_ptr<UserAttributes> userAttr) {
     exceptionPtr = nullptr;
@@ -384,68 +362,9 @@
     m_ep = ep;
     m_poolDM = poolDM;
     m_userAttr = userAttr;
-
-    // m_functionExecutionTask = new Task<FunctionExecution>(this,
-    //&FunctionExecution::execute);
   }
 
-  GfErrType execute(void) {
-    // TSSUserAttributesWrapper::s_geodeTSSUserAttributes->setUserAttributes(m_userAttr);
-    GuardUserAttributes gua;
-
-    if (m_userAttr) {
-      gua.setAuthenticatedView(m_userAttr->getAuthenticatedView());
-    }
-
-    std::string funcName(m_func);
-    TcrMessageExecuteFunction request(
-        new DataOutput(m_poolDM->getConnectionManager()
-                           .getCacheImpl()
-                           ->createDataOutput()),
-        funcName, m_args, m_getResult, m_poolDM, m_timeout);
-    TcrMessageReply reply(true, m_poolDM);
-    ChunkedFunctionExecutionResponse* resultProcessor(
-        new ChunkedFunctionExecutionResponse(reply, (m_getResult & 2) == 2,
-                                             *m_rc, m_resultCollectorLock));
-    reply.setChunkedResultHandler(resultProcessor);
-    reply.setTimeout(m_timeout);
-    reply.setDM(m_poolDM);
-
-    LOGDEBUG(
-        "ThinClientPoolDM::sendRequestToAllServer sendRequest on endpoint[%s]!",
-        m_ep->name().c_str());
-
-    m_error = m_poolDM->sendRequestToEP(request, reply, m_ep);
-    m_error = m_poolDM->handleEPError(m_ep, reply, m_error);
-    if (m_error != GF_NOERR) {
-      if (m_error == GF_NOTCON || m_error == GF_IOERR) {
-        delete resultProcessor;
-        resultProcessor = nullptr;
-        return GF_NOERR;  // if server is unavailable its not an error for
-                          // functionexec OnServers() case
-      }
-      LOGDEBUG(
-          "FunctionExecution::execute failed on endpoint[%s]!. Error = %d ",
-          m_ep->name().c_str(), m_error);
-      if (reply.getMessageType() == TcrMessage::EXCEPTION) {
-        exceptionPtr = CacheableString::create(reply.getException());
-      }
-
-      delete resultProcessor;
-      resultProcessor = nullptr;
-      return m_error;
-    } else if (reply.getMessageType() == TcrMessage::EXCEPTION ||
-               reply.getMessageType() == TcrMessage::EXECUTE_FUNCTION_ERROR) {
-      m_error = ThinClientRegion::handleServerException("Execute",
-                                                        reply.getException());
-      exceptionPtr = CacheableString::create(reply.getException());
-    }
-    if (resultProcessor->getResult() == true) {
-    }
-    delete resultProcessor;
-    resultProcessor = nullptr;
-    return m_error;
-  }
+  GfErrType execute(void);
 };
 
 class OnRegionFunctionExecution : public PooledWork<GfErrType> {
@@ -461,7 +380,7 @@
   std::shared_ptr<CacheableHashSet> m_routingObj;
   std::shared_ptr<ResultCollector> m_rc;
   TcrChunkedResult* m_resultCollector;
-  std::shared_ptr<ACE_Recursive_Thread_Mutex> m_resultCollectorLock;
+  std::shared_ptr<std::recursive_mutex> m_resultCollectorLock;
   std::shared_ptr<UserAttributes> m_userAttr;
   const Region* m_region;
   bool m_allBuckets;
@@ -471,37 +390,11 @@
       std::string func, const Region* region, std::shared_ptr<Cacheable> args,
       std::shared_ptr<CacheableHashSet> routingObj, uint8_t getResult,
       std::chrono::milliseconds timeout, ThinClientPoolDM* poolDM,
-      const std::shared_ptr<ACE_Recursive_Thread_Mutex>& rCL,
+      const std::shared_ptr<std::recursive_mutex>& rCL,
       std::shared_ptr<ResultCollector> rs,
       std::shared_ptr<UserAttributes> userAttr, bool isBGThread,
       const std::shared_ptr<BucketServerLocation>& serverLocation,
-      bool allBuckets)
-      : m_serverLocation(serverLocation),
-        m_isBGThread(isBGThread),
-        m_poolDM(poolDM),
-        m_func(func),
-        m_getResult(getResult),
-        m_timeout(timeout),
-        m_args(args),
-        m_routingObj(routingObj),
-        m_rc(rs),
-        m_resultCollectorLock(rCL),
-        m_userAttr(userAttr),
-        m_region(region),
-        m_allBuckets(allBuckets) {
-    m_request = new TcrMessageExecuteRegionFunctionSingleHop(
-        new DataOutput(m_poolDM->getConnectionManager()
-                           .getCacheImpl()
-                           ->createDataOutput()),
-        m_func, m_region, m_args, m_routingObj, m_getResult, nullptr,
-        m_allBuckets, timeout, m_poolDM);
-    m_reply = new TcrMessageReply(true, m_poolDM);
-    m_resultCollector = new ChunkedFunctionExecutionResponse(
-        *m_reply, (m_getResult & 2) == 2, m_rc, m_resultCollectorLock);
-    m_reply->setChunkedResultHandler(m_resultCollector);
-    m_reply->setTimeout(m_timeout);
-    m_reply->setDM(m_poolDM);
-  }
+      bool allBuckets);
 
   ~OnRegionFunctionExecution() {
     delete m_request;
diff --git a/cppcache/src/ThinClientPoolHADM.cpp b/cppcache/src/ThinClientPoolHADM.cpp
index 5b0270b..244fd2e 100644
--- a/cppcache/src/ThinClientPoolHADM.cpp
+++ b/cppcache/src/ThinClientPoolHADM.cpp
@@ -20,6 +20,7 @@
 #include <geode/SystemProperties.hpp>
 
 #include "ExpiryHandler_T.hpp"
+#include "TcrConnectionManager.hpp"
 #include "util/exception.hpp"
 
 namespace apache {
@@ -50,11 +51,6 @@
                     ->getDistributedSystem()
                     .getSystemProperties();
 
-  if (props.isGridClient()) {
-    LOGWARN("Starting background threads and ignoring grid-client setting");
-    ThinClientPoolDM::startBackgroundThreads();
-  }
-
   m_redundancyManager->initialize(m_attrs->getSubscriptionRedundancy());
   //  Call maintain redundancy level, so primary is available for notification
   //  operations.
@@ -85,8 +81,9 @@
   }
 
   m_redundancyManager->startPeriodicAck();
-  m_redundancyTask = new Task<ThinClientPoolHADM>(
-      this, &ThinClientPoolHADM::redundancy, NC_Redundancy);
+  m_redundancyTask =
+      std::unique_ptr<Task<ThinClientPoolHADM>>(new Task<ThinClientPoolHADM>(
+          this, &ThinClientPoolHADM::redundancy, NC_Redundancy));
   m_redundancyTask->start();
 }
 
@@ -147,7 +144,7 @@
   return true;
 }
 
-int ThinClientPoolHADM::redundancy(volatile bool& isRunning) {
+void ThinClientPoolHADM::redundancy(std::atomic<bool>& isRunning) {
   LOGFINE("ThinClientPoolHADM: Starting maintain redundancy thread.");
   while (isRunning) {
     m_redundancySema.acquire();
@@ -159,7 +156,6 @@
     }
   }
   LOGFINE("ThinClientPoolHADM: Ending maintain redundancy thread.");
-  return 0;
 }
 
 int ThinClientPoolHADM::checkRedundancy(const ACE_Time_Value&, const void*) {
@@ -199,7 +195,7 @@
     m_redundancyTask->stopNoblock();
     m_redundancySema.release();
     m_redundancyTask->wait();
-    _GEODE_SAFE_DELETE(m_redundancyTask);
+    m_redundancyTask = nullptr;
     m_redundancyManager->sendNotificationCloseMsgs();
   }
 }
@@ -209,7 +205,7 @@
   GfErrType err = GF_NOERR;
   GfErrType opErr = GF_NOERR;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_regionsLock);
+  std::lock_guard<decltype(m_regionsLock)> guard(m_regionsLock);
   for (std::list<ThinClientRegion*>::iterator itr = m_regions.begin();
        itr != m_regions.end(); itr++) {
     if ((opErr = (*itr)->registerKeys(ep, request, reply)) != GF_NOERR) {
@@ -221,18 +217,48 @@
   return err;
 }
 
+bool ThinClientPoolHADM::checkDupAndAdd(std::shared_ptr<EventId> eventid) {
+  return m_redundancyManager->checkDupAndAdd(eventid);
+}
+
+void ThinClientPoolHADM::processMarker() {
+  // also set the static bool m_processedMarker for makePrimary messages
+  m_redundancyManager->m_globalProcessedMarker = true;
+}
+
+void ThinClientPoolHADM::acquireRedundancyLock() {
+  m_redundancyManager->acquireRedundancyLock();
+}
+
+void ThinClientPoolHADM::releaseRedundancyLock() {
+  m_redundancyManager->releaseRedundancyLock();
+}
+
+std::recursive_mutex& ThinClientPoolHADM::getRedundancyLock() {
+  return m_redundancyManager->getRedundancyLock();
+}
+
+GfErrType ThinClientPoolHADM::sendRequestToPrimary(TcrMessage& request,
+                                                   TcrMessageReply& reply) {
+  return m_redundancyManager->sendRequestToPrimary(request, reply);
+}
+
+bool ThinClientPoolHADM::isReadyForEvent() const {
+  return m_redundancyManager->isSentReadyForEvents();
+}
+
 void ThinClientPoolHADM::addRegion(ThinClientRegion* theTCR) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_regionsLock);
+  std::lock_guard<decltype(m_regionsLock)> guard(m_regionsLock);
   m_regions.push_back(theTCR);
 }
 void ThinClientPoolHADM::addDisMessToQueue(ThinClientRegion* theTCR) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_regionsLock);
+  std::lock_guard<decltype(m_regionsLock)> guard(m_regionsLock);
   if (m_redundancyManager->allEndPointDiscon()) {
     theTCR->receiveNotification(TcrMessage::getAllEPDisMess());
   }
 }
 void ThinClientPoolHADM::removeRegion(ThinClientRegion* theTCR) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_regionsLock);
+  std::lock_guard<decltype(m_regionsLock)> guard(m_regionsLock);
   for (std::list<ThinClientRegion*>::iterator itr = m_regions.begin();
        itr != m_regions.end(); itr++) {
     if (*itr == theTCR) {
@@ -261,9 +287,9 @@
   ThinClientPoolDM::netDown();
 
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_endpointsLock);
+    std::lock_guard<decltype(m_endpointsLock)> guard(m_endpointsLock);
     for (auto&& currItr : m_endpoints) {
-      currItr.int_id_->setConnectionStatus(false);
+      currItr.second->setConnectionStatus(false);
     }
   }
 
@@ -271,8 +297,8 @@
 }
 
 void ThinClientPoolHADM::pingServerLocal() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(
-      m_redundancyManager->getRedundancyLock());
+  auto& mutex = m_redundancyManager->getRedundancyLock();
+  std::lock_guard<decltype(mutex)> guard(mutex);
   ThinClientPoolDM::pingServerLocal();
 }
 
@@ -281,13 +307,19 @@
 }
 
 void ThinClientPoolHADM::sendNotConMesToAllregions() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_regionsLock);
+  std::lock_guard<decltype(m_regionsLock)> guard(m_regionsLock);
   for (std::list<ThinClientRegion*>::iterator it = m_regions.begin();
        it != m_regions.end(); it++) {
     (*it)->receiveNotification(TcrMessage::getAllEPDisMess());
   }
 }
 
+TcrEndpoint* ThinClientPoolHADM::createEP(const char* endpointName) {
+  return new TcrPoolEndPoint(
+      endpointName, m_connManager.getCacheImpl(), m_connManager.m_failoverSema,
+      m_connManager.m_cleanupSema, m_redundancySema, this);
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/ThinClientPoolHADM.hpp b/cppcache/src/ThinClientPoolHADM.hpp
index f2ca229..a430b3f 100644
--- a/cppcache/src/ThinClientPoolHADM.hpp
+++ b/cppcache/src/ThinClientPoolHADM.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_THINCLIENTPOOLHADM_H_
-#define GEODE_THINCLIENTPOOLHADM_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,27 +14,41 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#pragma once
+
+#ifndef GEODE_THINCLIENTPOOLHADM_H_
+#define GEODE_THINCLIENTPOOLHADM_H_
+
+#include <atomic>
+#include <memory>
+#include <mutex>
+
 #include "PoolAttributes.hpp"
-#include "TcrConnectionManager.hpp"
+#include "Task.hpp"
 #include "ThinClientHARegion.hpp"
 #include "ThinClientPoolDM.hpp"
-//#include "TcrPoolEndPoint.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
 
+class TcrConnectionManager;
+class ThinClientRedundancyManager;
+
 class ThinClientPoolHADM : public ThinClientPoolDM {
  public:
   ThinClientPoolHADM(const char* name, std::shared_ptr<PoolAttributes> poolAttr,
                      TcrConnectionManager& connManager);
+  ThinClientPoolHADM(const ThinClientPoolHADM&) = delete;
+  ThinClientPoolHADM& operator=(const ThinClientPoolHADM&) = delete;
+  ~ThinClientPoolHADM() override { destroy(); }
 
-  void init();
+  void init() override;
 
-  virtual ~ThinClientPoolHADM() { destroy(); }
-
-  virtual GfErrType sendSyncRequest(TcrMessage& request, TcrMessageReply& reply,
-                                    bool attemptFailover = true,
-                                    bool isBGThread = false);
+  GfErrType sendSyncRequest(TcrMessage& request, TcrMessageReply& reply,
+                            bool attemptFailover = true,
+                            bool isBGThread = false) override;
 
   bool registerInterestForHARegion(TcrEndpoint* ep, const TcrMessage* request,
                                    ThinClientHARegion& region);
@@ -47,55 +56,43 @@
   GfErrType sendSyncRequestRegisterInterestEP(TcrMessage& request,
                                               TcrMessageReply& reply,
                                               bool attemptFailover,
-                                              TcrEndpoint* endpoint);
+                                              TcrEndpoint* endpoint) override;
 
   GfErrType registerInterestAllRegions(TcrEndpoint* ep,
                                        const TcrMessage* request,
                                        TcrMessageReply* reply);
 
-  virtual void destroy(bool keepAlive = false);
+  virtual void destroy(bool keepAlive = false) override;
 
   void readyForEvents();
 
   void sendNotificationCloseMsgs();
 
-  bool checkDupAndAdd(std::shared_ptr<EventId> eventid) {
-    return m_redundancyManager->checkDupAndAdd(eventid);
-  }
+  bool checkDupAndAdd(std::shared_ptr<EventId> eventid) override;
 
-  void processMarker() {
-    // also set the static bool m_processedMarker for makePrimary messages
-    m_redundancyManager->m_globalProcessedMarker = true;
-  }
+  void processMarker() override;
 
   void netDown();
 
-  void pingServerLocal();
+  void pingServerLocal() override;
 
-  virtual void acquireRedundancyLock() {
-    m_redundancyManager->acquireRedundancyLock();
-  };
-  virtual void releaseRedundancyLock() {
-    m_redundancyManager->releaseRedundancyLock();
-  };
-  virtual ACE_Recursive_Thread_Mutex* getRedundancyLock() {
-    return &m_redundancyManager->getRedundancyLock();
-  }
+  void acquireRedundancyLock() override;
 
-  GfErrType sendRequestToPrimary(TcrMessage& request, TcrMessageReply& reply) {
-    return m_redundancyManager->sendRequestToPrimary(request, reply);
-  }
+  void releaseRedundancyLock() override;
 
-  virtual void triggerRedundancyThread() { m_redundancySema.release(); }
+  std::recursive_mutex& getRedundancyLock() override;
 
-  bool isReadyForEvent() const {
-    return m_redundancyManager->isSentReadyForEvents();
-  }
+  GfErrType sendRequestToPrimary(TcrMessage& request, TcrMessageReply& reply);
+
+  void triggerRedundancyThread() override { m_redundancySema.release(); }
+
+  bool isReadyForEvent() const;
 
  protected:
-  virtual GfErrType sendSyncRequestRegisterInterest(
+  GfErrType sendSyncRequestRegisterInterest(
       TcrMessage& request, TcrMessageReply& reply, bool attemptFailover = true,
-      ThinClientRegion* region = nullptr, TcrEndpoint* endpoint = nullptr);
+      ThinClientRegion* region = nullptr,
+      TcrEndpoint* endpoint = nullptr) override;
 
   virtual GfErrType sendSyncRequestCq(TcrMessage& request,
                                       TcrMessageReply& reply);
@@ -104,36 +101,26 @@
 
   virtual bool postFailoverAction(TcrEndpoint* endpoint);
 
-  virtual void startBackgroundThreads();
+  void startBackgroundThreads() override;
 
  private:
-  // Disallow copy constructor and assignment operator.
   ThinClientRedundancyManager* m_redundancyManager;
-  ThinClientPoolHADM(const ThinClientPoolHADM&);
-  ThinClientPoolHADM& operator=(const ThinClientPoolHADM&) = delete;
 
   TcrConnectionManager& m_theTcrConnManager;
   ACE_Semaphore m_redundancySema;
-  Task<ThinClientPoolHADM>* m_redundancyTask;
+  std::unique_ptr<Task<ThinClientPoolHADM>> m_redundancyTask;
 
-  int redundancy(volatile bool& isRunning);
-  /*
-  void stopNotificationThreads();
-  */
+  void redundancy(std::atomic<bool>& isRunning);
+
   ExpiryTaskManager::id_type m_servermonitorTaskId;
   int checkRedundancy(const ACE_Time_Value&, const void*);
 
-  virtual TcrEndpoint* createEP(const char* endpointName) {
-    return new TcrPoolEndPoint(endpointName, m_connManager.getCacheImpl(),
-                               m_connManager.m_failoverSema,
-                               m_connManager.m_cleanupSema, m_redundancySema,
-                               this);
-  }
+  TcrEndpoint* createEP(const char* endpointName) override;
 
-  void removeCallbackConnection(TcrEndpoint*);
+  void removeCallbackConnection(TcrEndpoint*) override;
 
   std::list<ThinClientRegion*> m_regions;
-  ACE_Recursive_Thread_Mutex m_regionsLock;
+  std::recursive_mutex m_regionsLock;
   void addRegion(ThinClientRegion* theTCR);
   void removeRegion(ThinClientRegion* theTCR);
   void sendNotConMesToAllregions();
diff --git a/cppcache/src/ThinClientPoolStickyDM.cpp b/cppcache/src/ThinClientPoolStickyDM.cpp
index be61f56..0f04150 100644
--- a/cppcache/src/ThinClientPoolStickyDM.cpp
+++ b/cppcache/src/ThinClientPoolStickyDM.cpp
@@ -97,7 +97,7 @@
                                            request.forTransaction());
 
   if (request.forTransaction()) {
-    TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+    auto txState = TSSTXStateWrapper::get().getTXState();
     if (*error == GF_NOERR && !cf &&
         (txState == nullptr || txState->isDirty())) {
       *error = doFailover(conn);
@@ -131,7 +131,8 @@
   }
 }
 
-void ThinClientPoolStickyDM::cleanStickyConnections(volatile bool& isRunning) {
+void ThinClientPoolStickyDM::cleanStickyConnections(
+    std::atomic<bool>& isRunning) {
   if (!isRunning) {
     return;
   }
diff --git a/cppcache/src/ThinClientPoolStickyDM.hpp b/cppcache/src/ThinClientPoolStickyDM.hpp
index b46d358..869c212 100644
--- a/cppcache/src/ThinClientPoolStickyDM.hpp
+++ b/cppcache/src/ThinClientPoolStickyDM.hpp
@@ -32,26 +32,23 @@
       : ThinClientPoolDM(name, poolAttrs, connManager) {
     m_sticky = true;
   }
-  virtual ~ThinClientPoolStickyDM() {
-    // m_manager->closeAllStickyConnections();
-    // delete m_manager; m_manager = nullptr;
-  }
-  virtual bool canItBeDeletedNoImpl(TcrConnection* conn);
+  ~ThinClientPoolStickyDM() override {}
+
+  bool canItBeDeletedNoImpl(TcrConnection* conn) override;
 
  protected:
-  virtual void cleanStickyConnections(volatile bool& isRunning);
-  virtual TcrConnection* getConnectionFromQueueW(
+  void cleanStickyConnections(std::atomic<bool>& isRunning) override;
+  TcrConnection* getConnectionFromQueueW(
       GfErrType* error, std::set<ServerLocation>&, bool isBGThread,
       TcrMessage& request, int8_t& version, bool& match, bool& connFound,
-      const std::shared_ptr<BucketServerLocation>& serverLocation = nullptr);
-  virtual void putInQueue(TcrConnection* conn, bool isBGThread,
-                          bool isTransaction = false);
-  virtual void setStickyNull(bool isBGThread);
-  virtual bool canItBeDeleted(TcrConnection* conn);
-  virtual void releaseThreadLocalConnection();
-  virtual void setThreadLocalConnection(TcrConnection* conn);
-
-  // virtual void cleanStickyConnections(volatile bool& isRunning);
+      const std::shared_ptr<BucketServerLocation>& serverLocation =
+          nullptr) override;
+  void putInQueue(TcrConnection* conn, bool isBGThread,
+                  bool isTransaction = false) override;
+  void setStickyNull(bool isBGThread) override;
+  bool canItBeDeleted(TcrConnection* conn) override;
+  void releaseThreadLocalConnection() override;
+  void setThreadLocalConnection(TcrConnection* conn) override;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/ThinClientRedundancyManager.cpp b/cppcache/src/ThinClientRedundancyManager.cpp
index c2658e0..75fe357 100644
--- a/cppcache/src/ThinClientRedundancyManager.cpp
+++ b/cppcache/src/ThinClientRedundancyManager.cpp
@@ -121,7 +121,8 @@
   // to nonfatal errors such as server not available
   GfErrType fatalError = GF_NOERR;
   bool fatal = false;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
   bool isRedundancySatisfied = false;
   int secondaryCount = 0;
   bool isPrimaryConnected = false;
@@ -667,9 +668,8 @@
     if (interval < std::chrono::milliseconds(100)) {
       interval = std::chrono::milliseconds(100);
     }
-    m_nextAckInc = ACE_Time_Value(interval);
-    m_nextAck = ACE_OS::gettimeofday();
-    m_nextAck += m_nextAckInc;
+    m_nextAckInc = interval;
+    m_nextAck = clock::now() + interval;
   }
 
   if (m_poolHADM) {
@@ -693,7 +693,8 @@
 }
 
 void ThinClientRedundancyManager::sendNotificationCloseMsgs() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   for (auto&& endpoint : m_redundantEndpoints) {
     LOGDEBUG(
@@ -723,10 +724,11 @@
     m_periodicAckTask->stopNoblock();
     m_periodicAckSema.release();
     m_periodicAckTask->wait();
-    _GEODE_SAFE_DELETE(m_periodicAckTask);
+    m_periodicAckTask = nullptr;
   }
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   for (auto&& endpoint : m_redundantEndpoints) {
     LOGDEBUG(
@@ -827,7 +829,8 @@
     TcrMessage& request, TcrMessageReply& reply, ThinClientBaseDM* theHADM) {
   LOGDEBUG("ThinClientRedundancyManager::sendSyncRequestCq msgType[%d]",
            request.getMessageType());
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   GfErrType err = GF_NOERR;
   GfErrType opErr;
@@ -872,8 +875,7 @@
 
   while (attempts--) {
     if (err != GF_NOERR || m_redundantEndpoints.empty()) {
-      auto userAttr = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                          ->getUserAttributes();
+      auto userAttr = UserAttributes::threadLocalUserAttributes;
       if (userAttr) {
         authenticatedView = userAttr->getAuthenticatedView();
       }
@@ -918,7 +920,8 @@
     ThinClientBaseDM* theHADM, ThinClientRegion* region) {
   LOGDEBUG("ThinClientRedundancyManager::sendSyncRequestRegisterInterest ");
   if (!endpoint) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+    std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+        m_redundantEndpointsLock);
 
     auto err = GF_NOERR;
     auto opErr = GF_NOERR;
@@ -980,8 +983,9 @@
   }
 }
 
-void ThinClientRedundancyManager::getAllEndpoints(
-    std::vector<TcrEndpoint*>& endpoints) {
+synchronized_map<std::unordered_map<std::string, TcrEndpoint*>,
+                 std::recursive_mutex>&
+ThinClientRedundancyManager::updateAndSelectEndpoints() {
   // 38196 Fix: For durable clients reconnect
   // 1. Get list of endpoints which have HA queue.
   // 2. Get HA endpoint with max queuesize;
@@ -994,36 +998,35 @@
   // Exception: For R =0 ( or when no EP with Max queuesize ),
   //  Old primary would be considered as new. Hence it would be at the end
 
-  ACE_Map_Manager<std::string, TcrEndpoint*, ACE_Recursive_Thread_Mutex>*
-      tempContainer;
   if (m_poolHADM) {
-    tempContainer = &m_poolHADM->m_endpoints;
     // fetch queue servers
     // send queue servers for sorting
     std::set<ServerLocation> exclEndPts;
     std::list<ServerLocation> outEndpoints;
 
     outEndpoints = selectServers(-1, exclEndPts);
-    for (std::list<ServerLocation>::iterator it = outEndpoints.begin();
-         it != outEndpoints.end(); it++) {
-      m_poolHADM->addEP(*it);
+    for (auto& it : outEndpoints) {
+      m_poolHADM->addEP(it);
     }
-  } else {
-    tempContainer = &m_theTcrConnManager->m_endpoints;
-  }
 
+    return m_poolHADM->m_endpoints;
+  } else {
+    return m_theTcrConnManager->m_endpoints;
+  }
+}
+
+void ThinClientRedundancyManager::getAllEndpoints(
+    std::vector<TcrEndpoint*>& endpoints) {
   TcrEndpoint* maxQEp = nullptr;
   TcrEndpoint* primaryEp = nullptr;
 
-  for (ACE_Map_Manager<std::string, TcrEndpoint*,
-                       ACE_Recursive_Thread_Mutex>::iterator currItr =
-           (*tempContainer).begin();
-       currItr != (*tempContainer).end(); currItr++) {
+  auto& selectedEndpoints = updateAndSelectEndpoints();
+  for (const auto& currItr : selectedEndpoints) {
     if (isDurable()) {
-      TcrEndpoint* ep = (*currItr).int_id_;
+      auto ep = currItr.second;
       int32_t queueSize = 0;
       TcrConnection* statusConn = nullptr;
-      ServerQueueStatus status =
+      auto status =
           ep->getFreshServerQueueStatus(queueSize, !m_poolHADM, statusConn);
       if (m_poolHADM && status != NON_REDUNDANT_SERVER) {
         m_poolHADM->addConnection(statusConn);
@@ -1048,13 +1051,13 @@
             "ThinClientRedundancyManager::getAllEndpoints(): sorting "
             "endpoints, found primary endpoint.");
       } else {
-        endpoints.push_back((*currItr).int_id_);
+        endpoints.push_back(currItr.second);
         LOGDEBUG(
             "ThinClientRedundancyManager::getAllEndpoints(): sorting "
             "endpoints, found nonredundant endpoint.");
       }
     } else {
-      endpoints.push_back((*currItr).int_id_);
+      endpoints.push_back(currItr.second);
     }
     //(*currItr)++;
   }
@@ -1113,7 +1116,8 @@
   GfErrType result = GF_NOTCON;
   unsigned int epCount = 0;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardEPs(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   if (m_sentReadyForEvents) {
     throw IllegalStateException("Already called readyForEvents");
@@ -1159,7 +1163,7 @@
   return 0;
 }
 
-int ThinClientRedundancyManager::periodicAck(volatile bool& isRunning) {
+void ThinClientRedundancyManager::periodicAck(std::atomic<bool>& isRunning) {
   while (isRunning) {
     m_periodicAckSema.acquire();
     if (isRunning) {
@@ -1169,7 +1173,6 @@
       }
     }
   }
-  return 0;
 }
 
 void ThinClientRedundancyManager::doPeriodicAck() {
@@ -1177,21 +1180,19 @@
       "ThinClientRedundancyManager::processEventIdMap( ): Examining eventid "
       "map.");
   // do periodic ack if HA is enabled and the time has come
-  if (m_HAenabled && (m_nextAck < ACE_OS::gettimeofday())) {
+  if (m_HAenabled && (m_nextAck < clock::now())) {
     LOGFINER("Doing periodic ack");
     m_nextAck += m_nextAckInc;
 
-    EventIdMapEntryList entries = m_eventidmap.getUnAcked();
-    uint32_t count = static_cast<uint32_t>(entries.size());
-
+    auto entries = m_eventidmap.getUnAcked();
+    auto count = entries.size();
     if (count > 0) {
       bool acked = false;
 
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guardEPs(m_redundantEndpointsLock);
+      std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+          m_redundantEndpointsLock);
 
-      std::vector<TcrEndpoint*>::iterator endpoint =
-          m_redundantEndpoints.begin();
-
+      auto endpoint = m_redundantEndpoints.begin();
       if (endpoint != m_redundantEndpoints.end()) {
         TcrMessagePeriodicAck request(
             new DataOutput(
@@ -1240,8 +1241,9 @@
 }
 
 void ThinClientRedundancyManager::startPeriodicAck() {
-  m_periodicAckTask = new Task<ThinClientRedundancyManager>(
-      this, &ThinClientRedundancyManager::periodicAck, NC_PerodicACK);
+  m_periodicAckTask = std::unique_ptr<Task<ThinClientRedundancyManager>>(
+      new Task<ThinClientRedundancyManager>(
+          this, &ThinClientRedundancyManager::periodicAck, NC_PerodicACK));
   m_periodicAckTask->start();
   const auto& props = m_theTcrConnManager->getCacheImpl()
                           ->getDistributedSystem()
@@ -1277,7 +1279,8 @@
 }
 
 void ThinClientRedundancyManager::netDown() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   if (!m_poolHADM) {
     m_nonredundantEndpoints.insert(m_nonredundantEndpoints.end(),
@@ -1288,13 +1291,15 @@
 }
 
 void ThinClientRedundancyManager::removeCallbackConnection(TcrEndpoint* ep) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
 
   ep->unregisterDM(false, nullptr, true);
 }
 GfErrType ThinClientRedundancyManager::sendRequestToPrimary(
     TcrMessage& request, TcrMessageReply& reply) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_redundantEndpointsLock);
+  std::lock_guard<decltype(m_redundantEndpointsLock)> guard(
+      m_redundantEndpointsLock);
   GfErrType err = GF_NOTCON;
   for (size_t count = 0;
        count <= m_redundantEndpoints.size() + m_nonredundantEndpoints.size();
diff --git a/cppcache/src/ThinClientRedundancyManager.hpp b/cppcache/src/ThinClientRedundancyManager.hpp
index 11cb1a8..5794e50 100644
--- a/cppcache/src/ThinClientRedundancyManager.hpp
+++ b/cppcache/src/ThinClientRedundancyManager.hpp
@@ -20,15 +20,23 @@
 #ifndef GEODE_THINCLIENTREDUNDANCYMANAGER_H_
 #define GEODE_THINCLIENTREDUNDANCYMANAGER_H_
 
+#include <atomic>
+#include <chrono>
 #include <list>
+#include <memory>
+#include <mutex>
 #include <set>
 #include <string>
 
+#include <ace/ACE.h>
+
+#include "ErrType.hpp"
 #include "EventIdMap.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "ServerLocation.hpp"
-#include "TcrEndpoint.hpp"
+#include "Task.hpp"
 #include "TcrMessage.hpp"
+#include "util/synchronized_map.hpp"
 
 namespace apache {
 namespace geode {
@@ -38,6 +46,7 @@
 class TcrHADistributionManager;
 class ThinClientRegion;
 class ThinClientPoolHADM;
+class TcrEndpoint;
 
 class ThinClientRedundancyManager {
  public:
@@ -69,19 +78,20 @@
   void startPeriodicAck();
   bool checkDupAndAdd(std::shared_ptr<EventId> eventid);
   void netDown();
-  void acquireRedundancyLock() { m_redundantEndpointsLock.acquire_read(); }
-  void releaseRedundancyLock() { m_redundantEndpointsLock.release(); }
+  void acquireRedundancyLock() { m_redundantEndpointsLock.lock(); }
+  void releaseRedundancyLock() { m_redundantEndpointsLock.unlock(); }
   bool allEndPointDiscon() { return m_IsAllEpDisCon; }
   void removeCallbackConnection(TcrEndpoint*);
 
-  ACE_Recursive_Thread_Mutex& getRedundancyLock() {
-    return m_redundantEndpointsLock;
-  }
+  std::recursive_mutex& getRedundancyLock() { return m_redundantEndpointsLock; }
 
   GfErrType sendRequestToPrimary(TcrMessage& request, TcrMessageReply& reply);
   bool isSentReadyForEvents() const { return m_sentReadyForEvents; }
 
  private:
+  using clock = std::chrono::steady_clock;
+  using time_point = clock::time_point;
+
   // for selectServers
   volatile bool m_IsAllEpDisCon;
   int m_server;
@@ -91,7 +101,7 @@
   ThinClientPoolHADM* m_poolHADM;
   std::vector<TcrEndpoint*> m_redundantEndpoints;
   std::vector<TcrEndpoint*> m_nonredundantEndpoints;
-  ACE_Recursive_Thread_Mutex m_redundantEndpointsLock;
+  std::recursive_mutex m_redundantEndpointsLock;
   TcrConnectionManager* m_theTcrConnManager;
   std::shared_ptr<CacheableStringArray> m_locators;
   std::shared_ptr<CacheableStringArray> m_servers;
@@ -110,6 +120,10 @@
   void moveEndpointToLast(std::vector<TcrEndpoint*>& epVector,
                           TcrEndpoint* targetEp);
 
+  synchronized_map<std::unordered_map<std::string, TcrEndpoint*>,
+                   std::recursive_mutex>&
+  updateAndSelectEndpoints();
+
   void getAllEndpoints(std::vector<TcrEndpoint*>& endpoints);
   // For 38196 Fix: Reorder End points.
   void insertEPInQueueSizeOrder(TcrEndpoint* ep,
@@ -122,15 +136,15 @@
 
   inline bool isDurable();
   int processEventIdMap(const ACE_Time_Value&, const void*);
-  Task<ThinClientRedundancyManager>* m_periodicAckTask;
+  std::unique_ptr<Task<ThinClientRedundancyManager>> m_periodicAckTask;
   ACE_Semaphore m_periodicAckSema;
   ExpiryTaskManager::id_type
       m_processEventIdMapTaskId;  // periodic check eventid map for notify ack
                                   // and/or expiry
-  int periodicAck(volatile bool& isRunning);
+  void periodicAck(std::atomic<bool>& isRunning);
   void doPeriodicAck();
-  ACE_Time_Value m_nextAck;     // next ack time
-  ACE_Time_Value m_nextAckInc;  // next ack time increment
+  time_point m_nextAck;                    // next ack time
+  std::chrono::milliseconds m_nextAckInc;  // next ack time increment
   volatile bool m_HAenabled;
   EventIdMap m_eventidmap;
 
diff --git a/cppcache/src/ThinClientRegion.cpp b/cppcache/src/ThinClientRegion.cpp
index ffe9a44..0b59f30 100644
--- a/cppcache/src/ThinClientRegion.cpp
+++ b/cppcache/src/ThinClientRegion.cpp
@@ -34,6 +34,7 @@
 #include "ReadWriteLock.hpp"
 #include "RegionGlobalLocks.hpp"
 #include "RemoteQuery.hpp"
+#include "TcrConnectionManager.hpp"
 #include "TcrDistributionManager.hpp"
 #include "TcrEndpoint.hpp"
 #include "ThinClientBaseDM.hpp"
@@ -51,7 +52,7 @@
 static const std::regex PREDICATE_IS_FULL_QUERY_REGEX(
     "^\\s*(?:select|import)\\b", std::regex::icase);
 
-void setTSSExceptionMessage(const char* exMsg);
+void setThreadLocalExceptionMessage(const char* exMsg);
 
 class PutAllWork : public PooledWork<GfErrType>,
                    private NonCopyable,
@@ -102,13 +103,12 @@
     m_reply = new TcrMessageReply(true, m_poolDM);
 
     // create new instanceof VCOPL
-    ACE_Recursive_Thread_Mutex responseLock;
+    std::recursive_mutex responseLock;
     m_verObjPartListPtr = std::make_shared<VersionedCacheableObjectPartList>(
         keys.get(), responseLock);
 
     if (m_poolDM->isMultiUserMode()) {
-      m_userAttribute = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                            ->getUserAttributes();
+      m_userAttribute = UserAttributes::threadLocalUserAttributes;
     }
 
     m_request->setTimeout(m_timeout);
@@ -245,13 +245,12 @@
         *keys, m_aCallbackArgument, m_poolDM);
     m_reply = new TcrMessageReply(true, m_poolDM);
     // create new instanceof VCOPL
-    ACE_Recursive_Thread_Mutex responseLock;
+    std::recursive_mutex responseLock;
     m_verObjPartListPtr = std::make_shared<VersionedCacheableObjectPartList>(
         keys.get(), responseLock);
 
     if (m_poolDM->isMultiUserMode()) {
-      m_userAttribute = TSSUserAttributesWrapper::s_geodeTSSUserAttributes
-                            ->getUserAttributes();
+      m_userAttribute = UserAttributes::threadLocalUserAttributes;
     }
 
     m_resultCollector = new ChunkedRemoveAllResponse(
@@ -349,7 +348,6 @@
     : LocalRegion(name, cacheImpl, rPtr, attributes, stats, shared),
       m_tcrdm(nullptr),
       m_notifyRelease(false),
-      m_notificationSema(1),
       m_isMetaDataRefreshed(false) {
   m_transactionEnabled = true;
   m_isDurableClnt = !cacheImpl->getDistributedSystem()
@@ -359,25 +357,6 @@
 }
 
 void ThinClientRegion::initTCR() {
-  bool subscription = false;
-  auto pool = m_cacheImpl->getPoolManager().find(getAttributes().getPoolName());
-  if (pool != nullptr) {
-    subscription = pool->getSubscriptionEnabled();
-  }
-  bool notificationEnabled =
-      getAttributes().getClientNotificationEnabled() || subscription;
-  if (notificationEnabled) {
-    if (m_cacheImpl->getDistributedSystem()
-            .getSystemProperties()
-            .isGridClient()) {
-      LOGWARN(
-          "Region %s: client subscription channel enabled for a grid "
-          "client; starting required internal subscription, cleanup and "
-          "failover threads",
-          m_fullPath.c_str());
-      m_cacheImpl->tcrConnectionManager().startFailoverAndCleanupThreads();
-    }
-  }
   try {
     m_tcrdm =
         new TcrDistributionManager(this, m_cacheImpl->tcrConnectionManager());
@@ -1234,7 +1213,7 @@
       aCallbackArgument);  // now we need to initialize later
 
   TcrMessageReply reply(true, m_tcrdm);
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   // need to check
   TcrChunkedResult* resultCollector(new ChunkedGetAllResponse(
       reply, this, keys, values, exceptions, resultKeys, updateCountMap,
@@ -1339,9 +1318,8 @@
    * method.
    *  e. insert the worker into the vector.
    */
-  std::vector<PutAllWork*> putAllWorkers;
-  auto threadPool =
-      CacheRegionHelper::getCacheImpl(&getCache())->getThreadPool();
+  std::vector<std::shared_ptr<PutAllWork>> putAllWorkers;
+  auto& threadPool = m_cacheImpl->getThreadPool();
   int locationMapIndex = 0;
   for (const auto& locationIter : *locationMap) {
     const auto& serverLocation = locationIter.first;
@@ -1361,10 +1339,10 @@
       }
     }
 
-    auto worker = new PutAllWork(tcrdm, serverLocation, region,
-                                 true /*attemptFailover*/, false /*isBGThread*/,
-                                 filteredMap, keys, timeout, aCallbackArgument);
-    threadPool->perform(worker);
+    auto worker = std::make_shared<PutAllWork>(
+        tcrdm, serverLocation, region, true /*attemptFailover*/,
+        false /*isBGThread*/, filteredMap, keys, timeout, aCallbackArgument);
+    threadPool.perform(worker);
     putAllWorkers.push_back(worker);
     locationMapIndex++;
   }
@@ -1428,7 +1406,6 @@
     }
     */
 
-    delete worker;
     cnt++;
   }
   /**
@@ -1439,7 +1416,7 @@
    * versions. C. ToDO:: what if the value in the resultMap is of type
    * PutAllPartialResultServerException
    */
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   auto result = std::make_shared<PutAllPartialResult>(
       static_cast<int>(map.size()), responseLock);
   LOGDEBUG(
@@ -1608,7 +1585,7 @@
   request.setTimeout(timeout);
   reply.setTimeout(timeout);
 
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   versionedObjPartList =
       std::make_shared<VersionedCacheableObjectPartList>(this, responseLock);
   // need to check
@@ -1665,7 +1642,7 @@
   LOGDEBUG("ThinClientRegion::putAllNoThrow_remote");
 
   auto poolDM = dynamic_cast<ThinClientPoolDM*>(m_tcrdm);
-  auto txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  auto txState = TSSTXStateWrapper::get().getTXState();
 
   if (poolDM != nullptr) {
     if (poolDM->getPRSingleHopEnabled() &&
@@ -1719,9 +1696,8 @@
    * method.
    *  e. insert the worker into the vector.
    */
-  std::vector<RemoveAllWork*> removeAllWorkers;
-  auto* threadPool =
-      CacheRegionHelper::getCacheImpl(&getCache())->getThreadPool();
+  std::vector<std::shared_ptr<RemoveAllWork>> removeAllWorkers;
+  auto& threadPool = m_cacheImpl->getThreadPool();
   int locationMapIndex = 0;
   for (const auto& locationIter : *locationMap) {
     const auto& serverLocation = locationIter.first;
@@ -1729,10 +1705,10 @@
       LOGDEBUG("serverLocation is nullptr");
     }
     const auto& mappedkeys = locationIter.second;
-    auto worker = new RemoveAllWork(
+    auto worker = std::make_shared<RemoveAllWork>(
         tcrdm, serverLocation, region, true /*attemptFailover*/,
         false /*isBGThread*/, mappedkeys, aCallbackArgument);
-    threadPool->perform(worker);
+    threadPool.perform(worker);
     removeAllWorkers.push_back(worker);
     locationMapIndex++;
   }
@@ -1783,7 +1759,6 @@
         "worker->getResultCollector()->getList()->getVersionedTagsize() = %d ",
         worker->getResultCollector()->getList()->getVersionedTagsize());
 
-    delete worker;
     cnt++;
   }
   /**
@@ -1794,7 +1769,7 @@
    * versions. C. ToDO:: what if the value in the resultMap is of type
    * PutAllPartialResultServerException
    */
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   auto result = std::make_shared<PutAllPartialResult>(
       static_cast<int>(keys.size()), responseLock);
   LOGDEBUG(
@@ -1943,7 +1918,7 @@
                               this, keys, aCallbackArgument, m_tcrdm);
   TcrMessageReply reply(true, m_tcrdm);
 
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   versionedObjPartList =
       std::make_shared<VersionedCacheableObjectPartList>(this, responseLock);
   // need to check
@@ -1992,7 +1967,7 @@
   LOGDEBUG("ThinClientRegion::removeAllNoThrow_remote");
 
   ThinClientPoolDM* poolDM = dynamic_cast<ThinClientPoolDM*>(m_tcrdm);
-  TXState* txState = TSSTXStateWrapper::s_geodeTSSTXState->getTXState();
+  auto txState = TSSTXStateWrapper::get().getTXState();
 
   if (poolDM != nullptr) {
     if (poolDM->getPRSingleHopEnabled() &&
@@ -2261,7 +2236,7 @@
   CHECK_DESTROY_PENDING_NOTHROW(TryReadGuard);
   GfErrType err = GF_NOERR;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
   if (keys.empty()) {
     return err;
   }
@@ -2281,7 +2256,7 @@
       new DataOutput(m_cacheImpl->createDataOutput()), this, keys, isDurable,
       getAttributes().getCachingEnabled(), receiveValues, interestPolicy,
       m_tcrdm);
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   TcrChunkedResult* resultCollector = nullptr;
   if (interestPolicy.ordinal == InterestResultPolicy::KEYS_VALUES.ordinal) {
     auto values = std::make_shared<HashMapOfCacheable>();
@@ -2332,7 +2307,7 @@
   RegionGlobalLocks acquireLocksFailover(this);
   CHECK_DESTROY_PENDING_NOTHROW(TryReadGuard);
   GfErrType err = GF_NOERR;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
   TcrMessageReply reply(true, m_tcrdm);
   if (keys.empty()) {
     return err;
@@ -2368,7 +2343,7 @@
   RegionGlobalLocks acquireLocksRedundancy(this, false);
   RegionGlobalLocks acquireLocksFailover(this);
   GfErrType err = GF_NOERR;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
   TcrMessageReply reply(true, m_tcrdm);
   if (keys.empty()) {
     return err;
@@ -2420,7 +2395,7 @@
   GfErrType err = GF_NOERR;
 
   bool allKeys = (regex == ".*");
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
 
   if (attemptFailover) {
     if ((isDurable &&
@@ -2459,7 +2434,7 @@
       new DataOutput(m_cacheImpl->createDataOutput()), m_fullPath,
       regex.c_str(), interestPolicy, isDurable,
       getAttributes().getCachingEnabled(), receiveValues, m_tcrdm);
-  ACE_Recursive_Thread_Mutex responseLock;
+  std::recursive_mutex responseLock;
   if (reply == nullptr) {
     TcrMessageReply replyLocal(true, m_tcrdm);
     auto values = std::make_shared<HashMapOfCacheable>();
@@ -2551,7 +2526,7 @@
 
 GfErrType ThinClientRegion::findRegex(const std::string& regex) {
   GfErrType err = GF_NOERR;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
 
   if (m_interestListRegex.find(regex) == m_interestListRegex.end() &&
       m_durableInterestListRegex.find(regex) ==
@@ -2567,7 +2542,7 @@
 }
 
 void ThinClientRegion::clearRegex(const std::string& regex) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(m_keysLock);
   m_interestListRegex.erase(regex);
   m_durableInterestListRegex.erase(regex);
   m_interestListRegexForUpdatesAsInvalidates.erase(regex);
@@ -2642,11 +2617,11 @@
 
 std::vector<std::shared_ptr<CacheableKey>> ThinClientRegion::getInterestList()
     const {
-  ThinClientRegion* nthis = const_cast<ThinClientRegion*>(this);
+  auto nthis = const_cast<ThinClientRegion*>(this);
   RegionGlobalLocks acquireLocksRedundancy(nthis, false);
   RegionGlobalLocks acquireLocksFailover(nthis);
   CHECK_DESTROY_PENDING(TryReadGuard, getInterestList);
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(nthis->m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(nthis->m_keysLock);
 
   std::vector<std::shared_ptr<CacheableKey>> vlist;
 
@@ -2665,11 +2640,11 @@
 }
 std::vector<std::shared_ptr<CacheableString>>
 ThinClientRegion::getInterestListRegex() const {
-  ThinClientRegion* nthis = const_cast<ThinClientRegion*>(this);
+  auto nthis = const_cast<ThinClientRegion*>(this);
   RegionGlobalLocks acquireLocksRedundancy(nthis, false);
   RegionGlobalLocks acquireLocksFailover(nthis);
   CHECK_DESTROY_PENDING(TryReadGuard, getInterestListRegex);
-  ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(nthis->m_keysLock);
+  std::lock_guard<decltype(m_keysLock)> keysGuard(nthis->m_keysLock);
 
   std::vector<std::shared_ptr<CacheableString>> vlist;
 
@@ -2769,7 +2744,7 @@
 GfErrType ThinClientRegion::handleServerException(const char* func,
                                                   const char* exceptionMsg) {
   GfErrType error = GF_NOERR;
-  setTSSExceptionMessage(exceptionMsg);
+  setThreadLocalExceptionMessage(exceptionMsg);
   if (strstr(exceptionMsg,
              "org.apache.geode.security.NotAuthorizedException") != nullptr) {
     error = GF_NOT_AUTHORIZED_EXCEPTION;
@@ -2818,6 +2793,7 @@
 }
 
 void ThinClientRegion::receiveNotification(TcrMessage* msg) {
+  std::unique_lock<std::mutex> lock(m_notificationMutex, std::defer_lock);
   {
     TryReadGuard guard(m_rwLock, m_destroyPending);
     if (m_destroyPending) {
@@ -2826,7 +2802,7 @@
       }
       return;
     }
-    m_notificationSema.acquire();
+    lock.lock();
   }
 
   if (msg->getMessageType() == TcrMessage::CLIENT_MARKER) {
@@ -2835,7 +2811,7 @@
     clientNotificationHandler(*msg);
   }
 
-  m_notificationSema.release();
+  lock.unlock();
   if (TcrMessage::getAllEPDisMess() != msg) _GEODE_SAFE_DELETE(msg);
 }
 
@@ -2938,8 +2914,10 @@
   if (m_released) {
     return;
   }
+
+  std::unique_lock<std::mutex> lock(m_notificationMutex, std::defer_lock);
   if (!m_notifyRelease) {
-    m_notificationSema.acquire();
+    lock.lock();
   }
 
   destroyDM(invokeCallbacks);
@@ -3165,11 +3143,10 @@
     std::shared_ptr<CacheableHashSet>& failedNodes,
     std::chrono::milliseconds timeout, bool allBuckets) {
   bool reExecute = false;
-  auto resultCollectorLock = std::make_shared<ACE_Recursive_Thread_Mutex>();
-  const auto& userAttr =
-      TSSUserAttributesWrapper::s_geodeTSSUserAttributes->getUserAttributes();
+  auto resultCollectorLock = std::make_shared<std::recursive_mutex>();
+  const auto& userAttr = UserAttributes::threadLocalUserAttributes;
   std::vector<std::shared_ptr<OnRegionFunctionExecution>> feWorkers;
-  auto* threadPool =
+  auto& threadPool =
       CacheRegionHelper::getCacheImpl(&getCache())->getThreadPool();
 
   for (const auto& locationIter : *locationMap) {
@@ -3179,14 +3156,13 @@
         func, this, args, routingObj, getResult, timeout,
         dynamic_cast<ThinClientPoolDM*>(m_tcrdm), resultCollectorLock, rc,
         userAttr, false, serverLocation, allBuckets);
-    threadPool->perform(worker.get());
+    threadPool.perform(worker);
     feWorkers.push_back(worker);
   }
 
   GfErrType abortError = GF_NOERR;
 
-  for (auto iter = std::begin(feWorkers); iter != std::end(feWorkers);) {
-    auto worker = *iter;
+  for (auto worker : feWorkers) {
     auto err = worker->getResult();
     auto currentReply = worker->getReply();
 
@@ -3209,7 +3185,8 @@
         }
         worker->getResultCollector()->reset();
         {
-          ACE_Guard<ACE_Recursive_Thread_Mutex> guard(*resultCollectorLock);
+          std::lock_guard<decltype(*resultCollectorLock)> guard(
+              *resultCollectorLock);
           rc->clearResults();
         }
         std::shared_ptr<CacheableHashSet> failedNodeIds(
@@ -3235,7 +3212,8 @@
         }
         worker->getResultCollector()->reset();
         {
-          ACE_Guard<ACE_Recursive_Thread_Mutex> guard(*resultCollectorLock);
+          std::lock_guard<decltype(*resultCollectorLock)> guard(
+              *resultCollectorLock);
           rc->clearResults();
         }
       } else {
@@ -3250,8 +3228,6 @@
         }
       }
     }
-
-    iter = feWorkers.erase(iter);
   }
 
   if (abortError != GF_NOERR) {
@@ -3283,10 +3259,15 @@
                                   reply.getException());
       break;
     }
+    case TcrMessage::REQUEST_DATA_ERROR: {
+      LOGERROR("Error message from server: " + reply.getValue()->toString());
+      throw FunctionExecutionException(reply.getValue()->toString());
+    }
     default: {
       LOGERROR("Unknown message type %d while getting function attributes.",
                reply.getMessageType());
       err = GF_MSG;
+      break;
     }
   }
   return err;
@@ -3712,7 +3693,8 @@
       result = value;
     }
     if (m_resultCollectorLock) {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guard(*m_resultCollectorLock);
+      std::lock_guard<decltype(*m_resultCollectorLock)> guard(
+          *m_resultCollectorLock);
       m_rc->addResult(result);
     } else {
       m_rc->addResult(result);
@@ -3806,7 +3788,7 @@
 
   if (chunkType == TcrMessageHelper::ChunkObjectType::OBJECT) {
     LOGDEBUG("ChunkedPutAllResponse::handleChunk object");
-    ACE_Recursive_Thread_Mutex responseLock;
+    std::recursive_mutex responseLock;
     auto vcObjPart = std::make_shared<VersionedCacheableObjectPartList>(
         dynamic_cast<ThinClientRegion*>(m_region.get()),
         m_msg.getChunkedResultHandler()->getEndpointMemId(), responseLock);
@@ -3864,7 +3846,7 @@
 
   if (chunkType == TcrMessageHelper::ChunkObjectType::OBJECT) {
     LOGDEBUG("ChunkedRemoveAllResponse::handleChunk object");
-    ACE_Recursive_Thread_Mutex responseLock;
+    std::recursive_mutex responseLock;
     auto vcObjPart = std::make_shared<VersionedCacheableObjectPartList>(
         dynamic_cast<ThinClientRegion*>(m_region.get()),
         m_msg.getChunkedResultHandler()->getEndpointMemId(), responseLock);
@@ -3912,7 +3894,7 @@
   if (!input.readBoolean()) {
     // we're currently always expecting an object
     char exMsg[256];
-    ACE_OS::snprintf(
+    std::snprintf(
         exMsg, 255,
         "ChunkedDurableCQListResponse::handleChunk: part is not object");
     throw MessageException(exMsg);
diff --git a/cppcache/src/ThinClientRegion.hpp b/cppcache/src/ThinClientRegion.hpp
index b039ee5..a7ec893 100644
--- a/cppcache/src/ThinClientRegion.hpp
+++ b/cppcache/src/ThinClientRegion.hpp
@@ -20,8 +20,10 @@
 #ifndef GEODE_THINCLIENTREGION_H_
 #define GEODE_THINCLIENTREGION_H_
 
+#include <mutex>
 #include <unordered_map>
 
+#include <ace/RW_Thread_Mutex.h>
 #include <ace/Task.h>
 
 #include <geode/ResultCollector.hpp>
@@ -33,17 +35,14 @@
 #include "Queue.hpp"
 #include "RegionGlobalLocks.hpp"
 #include "TcrChunkedContext.hpp"
-#include "TcrEndpoint.hpp"
 #include "TcrMessage.hpp"
-/**
- * @file
- */
 
 namespace apache {
 namespace geode {
 namespace client {
 
 class ThinClientBaseDM;
+class TcrEndpoint;
 
 /**
  * @class ThinClientRegion ThinClientRegion.hpp
@@ -52,7 +51,6 @@
  * region. It will inherit from DistributedRegion and overload some methods
  *
  */
-
 class APACHE_GEODE_EXPORT ThinClientRegion : public LocalRegion {
  public:
   /**
@@ -285,7 +283,7 @@
   bool isDurableClient() { return m_isDurableClnt; }
   /** @brief Protected fields. */
   ThinClientBaseDM* m_tcrdm;
-  ACE_Recursive_Thread_Mutex m_keysLock;
+  std::recursive_mutex m_keysLock;
   mutable ACE_RW_Thread_Mutex m_rwDestroyLock;
   std::unordered_map<std::shared_ptr<CacheableKey>, InterestResultPolicy>
       m_interestList;
@@ -304,7 +302,7 @@
       m_durableInterestListRegexForUpdatesAsInvalidates;
 
   bool m_notifyRelease;
-  ACE_Semaphore m_notificationSema;
+  std::mutex m_notificationMutex;
 
   bool m_isDurableClnt;
 
@@ -470,7 +468,7 @@
   // std::shared_ptr<CacheableVector>  m_functionExecutionResults;
   bool m_getResult;
   std::shared_ptr<ResultCollector> m_rc;
-  std::shared_ptr<ACE_Recursive_Thread_Mutex> m_resultCollectorLock;
+  std::shared_ptr<std::recursive_mutex> m_resultCollectorLock;
 
   // disabled
   ChunkedFunctionExecutionResponse(const ChunkedFunctionExecutionResponse&);
@@ -484,7 +482,7 @@
 
   inline ChunkedFunctionExecutionResponse(
       TcrMessage& msg, bool getResult, std::shared_ptr<ResultCollector> rc,
-      const std::shared_ptr<ACE_Recursive_Thread_Mutex>& resultCollectorLock)
+      const std::shared_ptr<std::recursive_mutex>& resultCollectorLock)
       : TcrChunkedResult(),
         m_msg(msg),
         m_getResult(getResult),
@@ -526,7 +524,7 @@
   int32_t m_destroyTracker;
   bool m_addToLocalCache;
   uint32_t m_keysOffset;
-  ACE_Recursive_Thread_Mutex& m_responseLock;
+  std::recursive_mutex& m_responseLock;
   // disabled
   ChunkedGetAllResponse(const ChunkedGetAllResponse&);
   ChunkedGetAllResponse& operator=(const ChunkedGetAllResponse&);
@@ -540,7 +538,7 @@
       const std::shared_ptr<std::vector<std::shared_ptr<CacheableKey>>>&
           resultKeys,
       MapOfUpdateCounters& trackerMap, int32_t destroyTracker,
-      bool addToLocalCache, ACE_Recursive_Thread_Mutex& responseLock)
+      bool addToLocalCache, std::recursive_mutex& responseLock)
       : TcrChunkedResult(),
         m_msg(msg),
         m_region(region),
@@ -567,7 +565,7 @@
     return m_resultKeys;
   }
   MapOfUpdateCounters& getUpdateCounters() { return m_trackerMap; }
-  ACE_Recursive_Thread_Mutex& getResponseLock() { return m_responseLock; }
+  std::recursive_mutex& getResponseLock() { return m_responseLock; }
 };
 
 /**
@@ -577,7 +575,7 @@
  private:
   TcrMessage& m_msg;
   const std::shared_ptr<Region> m_region;
-  ACE_Recursive_Thread_Mutex& m_responseLock;
+  std::recursive_mutex& m_responseLock;
   std::shared_ptr<VersionedCacheableObjectPartList> m_list;
   // disabled
   ChunkedPutAllResponse(const ChunkedPutAllResponse&);
@@ -586,7 +584,7 @@
  public:
   inline ChunkedPutAllResponse(
       const std::shared_ptr<Region>& region, TcrMessage& msg,
-      ACE_Recursive_Thread_Mutex& responseLock,
+      std::recursive_mutex& responseLock,
       std::shared_ptr<VersionedCacheableObjectPartList>& list)
       : TcrChunkedResult(),
         m_msg(msg),
@@ -599,7 +597,7 @@
                            const CacheImpl* cacheImpl);
   virtual void reset();
   std::shared_ptr<VersionedCacheableObjectPartList> getList() { return m_list; }
-  ACE_Recursive_Thread_Mutex& getResponseLock() { return m_responseLock; }
+  std::recursive_mutex& getResponseLock() { return m_responseLock; }
 };
 
 /**
@@ -609,7 +607,7 @@
  private:
   TcrMessage& m_msg;
   const std::shared_ptr<Region> m_region;
-  ACE_Recursive_Thread_Mutex& m_responseLock;
+  std::recursive_mutex& m_responseLock;
   std::shared_ptr<VersionedCacheableObjectPartList> m_list;
   // disabled
   ChunkedRemoveAllResponse(const ChunkedRemoveAllResponse&);
@@ -618,7 +616,7 @@
  public:
   inline ChunkedRemoveAllResponse(
       const std::shared_ptr<Region>& region, TcrMessage& msg,
-      ACE_Recursive_Thread_Mutex& responseLock,
+      std::recursive_mutex& responseLock,
       std::shared_ptr<VersionedCacheableObjectPartList>& list)
       : TcrChunkedResult(),
         m_msg(msg),
@@ -631,7 +629,7 @@
                            const CacheImpl* cacheImpl);
   virtual void reset();
   std::shared_ptr<VersionedCacheableObjectPartList> getList() { return m_list; }
-  ACE_Recursive_Thread_Mutex& getResponseLock() { return m_responseLock; }
+  std::recursive_mutex& getResponseLock() { return m_responseLock; }
 };
 
 /**
diff --git a/cppcache/src/ThinClientStickyManager.cpp b/cppcache/src/ThinClientStickyManager.cpp
index debc020..8474641 100644
--- a/cppcache/src/ThinClientStickyManager.cpp
+++ b/cppcache/src/ThinClientStickyManager.cpp
@@ -25,7 +25,6 @@
     std::set<ServerLocation>& excludeServers, bool forTransaction) {
   bool maxConnLimit = false;
   bool connFound = false;
-  // ACE_Guard<ACE_Recursive_Thread_Mutex> guard( m_stickyLock );
   conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
 
   if (!conn) {
@@ -58,7 +57,7 @@
 }
 
 void ThinClientStickyManager::addStickyConnection(TcrConnection* conn) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+  std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
   TcrConnection* oldConn =
       (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
   if (oldConn) {
@@ -86,9 +85,8 @@
 
 void ThinClientStickyManager::setStickyConnection(TcrConnection* conn,
                                                   bool forTransaction) {
-  // ACE_Guard<ACE_Recursive_Thread_Mutex> guard( m_stickyLock );
   if (!conn) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+    std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
     (*TssConnectionWrapper::s_geodeTSSConn)
         ->setConnection(nullptr, m_dm->shared_from_this());
   } else {
@@ -96,7 +94,7 @@
         (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
     if (currentConn != conn)  // otherwsie no need to set it again
     {
-      ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+      std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
       (*TssConnectionWrapper::s_geodeTSSConn)
           ->setConnection(conn, m_dm->shared_from_this());
       conn->setAndGetBeingUsed(
@@ -120,7 +118,7 @@
 void ThinClientStickyManager::cleanStaleStickyConnection() {
   LOGDEBUG("Cleaning sticky connections");
   std::set<ServerLocation> excludeServers;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+  std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
   std::find_if(m_stickyConnList.begin(), m_stickyConnList.end(),
                ThinClientStickyManager::isNULL);
   while (1) {
@@ -159,7 +157,7 @@
 
 void ThinClientStickyManager::closeAllStickyConnections() {
   LOGDEBUG("ThinClientStickyManager::closeAllStickyConnections()");
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+  std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
   for (std::set<TcrConnection**>::iterator it = m_stickyConnList.begin();
        it != m_stickyConnList.end(); it++) {
     TcrConnection** tempConn = *it;
@@ -173,10 +171,10 @@
 bool ThinClientStickyManager::canThisConnBeDeleted(TcrConnection* conn) {
   bool canBeDeleted = false;
   LOGDEBUG("ThinClientStickyManager::canThisConnBeDeleted()");
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+  std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
   if (m_dm->canItBeDeletedNoImpl(conn)) return true;
   TcrEndpoint* endPt = conn->getEndpointObject();
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guardQueue(
+  std::lock_guard<decltype(endPt->getQueueHostedMutex())> guardQueue(
       endPt->getQueueHostedMutex());
   if (endPt->isQueueHosted()) {
     for (std::set<TcrConnection**>::iterator it = m_stickyConnList.begin();
@@ -194,7 +192,7 @@
   TcrConnection* conn =
       (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
   if (conn) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
+    std::lock_guard<decltype(m_stickyLock)> keysGuard(m_stickyLock);
     std::set<TcrConnection**>::iterator it = m_stickyConnList.find(
         (*TssConnectionWrapper::s_geodeTSSConn)->getConnDoublePtr());
     LOGDEBUG("ThinClientStickyManager::releaseThreadLocalConnection()");
diff --git a/cppcache/src/ThinClientStickyManager.hpp b/cppcache/src/ThinClientStickyManager.hpp
index cd25998..dbb2fa7 100644
--- a/cppcache/src/ThinClientStickyManager.hpp
+++ b/cppcache/src/ThinClientStickyManager.hpp
@@ -21,19 +21,22 @@
  */
 
 #include <algorithm>
+#include <mutex>
 #include <set>
 #include <vector>
 
-#include <ace/Recursive_Thread_Mutex.h>
-
+#include "ErrType.hpp"
 #include "TssConnectionWrapper.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
+
 class ThinClientPoolDM;
 class ServerLocation;
 class TcrConnection;
 class TcrEndpoint;
+
 class ThinClientStickyManager {
  public:
   explicit ThinClientStickyManager(ThinClientPoolDM* poolDM) : m_dm(poolDM) {}
@@ -56,8 +59,9 @@
   static bool isNULL(TcrConnection** conn);
   ThinClientPoolDM* m_dm;
   std::set<TcrConnection**> m_stickyConnList;
-  ACE_Recursive_Thread_Mutex m_stickyLock;
+  std::recursive_mutex m_stickyLock;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/ThreadPool.cpp b/cppcache/src/ThreadPool.cpp
index 2e21142..f9212d9 100644
--- a/cppcache/src/ThreadPool.cpp
+++ b/cppcache/src/ThreadPool.cpp
@@ -17,136 +17,79 @@
 
 #include "ThreadPool.hpp"
 
-#include <geode/SystemProperties.hpp>
-
-#include "CacheImpl.hpp"
-#include "DistributedSystem.hpp"
 #include "DistributedSystemImpl.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
 
-ThreadPoolWorker::ThreadPoolWorker(IThreadPool* manager)
-    : manager_(manager), queue_(msg_queue()), shutdown_(0) {
-#if defined(_MACOSX)
-  threadId_ = nullptr;
-#else
-  threadId_ = 0;
-#endif
-}
+const char* ThreadPool::NC_Pool_Thread = "NC Pool Thread";
 
-ThreadPoolWorker::~ThreadPoolWorker() { shutDown(); }
+ThreadPool::ThreadPool(size_t threadPoolSize)
+    : shutdown_(false), appDomainContext_(createAppDomainContext()) {
+  workers_.reserve(threadPoolSize);
 
-int ThreadPoolWorker::perform(ACE_Method_Request* req) {
-  ACE_TRACE(ACE_TEXT("Worker::perform"));
-  return this->queue_.enqueue(req);
-}
+  std::function<void()> executeWork = [this] {
+    DistributedSystemImpl::setThreadName(NC_Pool_Thread);
+    while (true) {
+      std::unique_lock<decltype(queueMutex_)> lock(queueMutex_);
+      queueCondition_.wait(lock,
+                           [this] { return shutdown_ || !queue_.empty(); });
 
-int ThreadPoolWorker::svc(void) {
-  threadId_ = ACE_Thread::self();
-  while (1) {
-    ACE_Method_Request* request = this->queue_.dequeue();
-    if (request == nullptr) {
-      shutDown();
-      break;
+      if (shutdown_) {
+        break;
+      }
+
+      auto work = queue_.front();
+      queue_.pop_front();
+
+      lock.unlock();
+
+      try {
+        work->call();
+      } catch (...) {
+        // ignore
+      }
     }
+  };
 
-    // Invoke the request
-    request->call();
-
-    // Return to work.
-    this->manager_->returnToWork(this);
-  }
-  return 0;
-}
-
-int ThreadPoolWorker::shutDown(void) {
-  if (shutdown_ != 1) {
-    queue_.queue()->close();
-    wait();
-    shutdown_ = 1;
+  if (appDomainContext_) {
+    executeWork = [executeWork, this] { appDomainContext_->run(executeWork); };
   }
 
-  return shutdown_;
-}
-
-ACE_thread_t ThreadPoolWorker::threadId(void) { return threadId_; }
-
-ThreadPool::ThreadPool(uint32_t threadPoolSize)
-    : poolSize_(threadPoolSize),
-      shutdown_(0),
-      workersLock_(),
-      workersCond_(workersLock_) {
-  activate();
+  for (size_t i = 0; i < threadPoolSize; i++) {
+    workers_.emplace_back(executeWork);
+  }
 }
 
 ThreadPool::~ThreadPool() { shutDown(); }
 
-int ThreadPool::perform(ACE_Method_Request* req) {
-  return this->queue_.enqueue(req);
-}
-
-const char* ThreadPool::NC_Pool_Thread = "NC Pool Thread";
-int ThreadPool::svc(void) {
-  DistributedSystemImpl::setThreadName(NC_Pool_Thread);
-  // Create pool when you get in the first time.
-  createWorkerPool();
-  while (!done()) {
-    // Get the next message
-    ACE_Method_Request* request = this->queue_.dequeue();
-    if (request == nullptr) {
-      shutDown();
-      break;
+void ThreadPool::perform(std::shared_ptr<Callable> req) {
+  {
+    std::lock_guard<decltype(queueMutex_)> lock(queueMutex_);
+    queue_.push_back(std::move(req));
+    if (queue_.size() > 1) {
+      return;
     }
-    // Choose a worker.
-    ThreadPoolWorker* worker = chooseWorker();
-    // Ask the worker to do the job.
-    worker->perform(request);
-  }
-  return 0;
-}
-
-int ThreadPool::shutDown(void) {
-  if (shutdown_ != 1) {
-    queue_.queue()->close();
-    wait();
-    shutdown_ = 1;
   }
 
-  return shutdown_;
+  queueCondition_.notify_all();
 }
 
-int ThreadPool::returnToWork(ThreadPoolWorker* worker) {
-  ACE_GUARD_RETURN(ACE_Thread_Mutex, workerMon, this->workersLock_, -1);
-  this->workers_.enqueue_tail(worker);
-  this->workersCond_.signal();
-  return 0;
-}
-
-ThreadPoolWorker* ThreadPool::chooseWorker(void) {
-  ACE_GUARD_RETURN(ACE_Thread_Mutex, workerMon, this->workersLock_, nullptr);
-  while (this->workers_.is_empty()) workersCond_.wait();
-  ThreadPoolWorker* worker;
-  this->workers_.dequeue_head(worker);
-  return worker;
-}
-
-int ThreadPool::createWorkerPool(void) {
-  ACE_GUARD_RETURN(ACE_Thread_Mutex, worker_mon, this->workersLock_, -1);
-  for (int i = 0; i < poolSize_; i++) {
-    ThreadPoolWorker* worker;
-    ACE_NEW_RETURN(worker, ThreadPoolWorker(this), -1);
-    this->workers_.enqueue_tail(worker);
-    worker->activate();
+void ThreadPool::shutDown(void) {
+  {
+    std::lock_guard<decltype(queueMutex_)> lock(queueMutex_);
+    if (shutdown_) {
+      return;
+    }
+    shutdown_ = true;
   }
-  return 0;
-}
 
-int ThreadPool::done(void) { return (shutdown_ == 1); }
+  queueCondition_.notify_all();
 
-ACE_thread_t ThreadPool::threadId(ThreadPoolWorker* worker) {
-  return worker->threadId();
+  for (auto& worker : workers_) {
+    worker.join();
+  }
 }
 
 }  // namespace client
diff --git a/cppcache/src/ThreadPool.hpp b/cppcache/src/ThreadPool.hpp
index 77f7754..d72f12a 100644
--- a/cppcache/src/ThreadPool.hpp
+++ b/cppcache/src/ThreadPool.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_THREADPOOL_H_
-#define GEODE_THREADPOOL_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,29 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * ThreadPool.hpp
- *
- *  Created on: 16-Mar-2010
- *      Author: ankurs
- */
 
-#include <ace/Method_Request.h>
-#include <ace/Task.h>
-//#include <ace/Future.h>
+#pragma once
+
+#ifndef GEODE_THREADPOOL_H_
+#define GEODE_THREADPOOL_H_
+
+#include <atomic>
 #include <condition_variable>
+#include <deque>
 #include <mutex>
+#include <thread>
+#include <vector>
 
-#include <ace/Activation_Queue.h>
-#include <ace/Condition_T.h>
-#include <ace/Guard_T.h>
-#include <ace/Singleton.h>
+#include "AppDomainContext.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
 
+class Callable {
+ public:
+  virtual ~Callable() noexcept = default;
+  virtual void call() = 0;
+};
+
 template <class T>
-class PooledWork : public ACE_Method_Request {
+class PooledWork : public Callable {
  private:
   T m_retVal;
   std::recursive_mutex m_mutex;
@@ -51,9 +50,9 @@
  public:
   PooledWork() : m_mutex(), m_cond(), m_done(false) {}
 
-  virtual ~PooledWork() {}
+  ~PooledWork() override {}
 
-  virtual int call(void) {
+  void call() override {
     T res = execute();
 
     std::lock_guard<decltype(m_mutex)> lock(m_mutex);
@@ -61,8 +60,6 @@
     m_retVal = res;
     m_done = true;
     m_cond.notify_all();
-
-    return 0;
   }
 
   T getResult(void) {
@@ -79,73 +76,25 @@
   virtual T execute(void) = 0;
 };
 
-template <typename S, typename R = int>
-class PooledWorkFP : public PooledWork<R> {
+class ThreadPool {
  public:
-  typedef R (S::*OPERATION)(void);
-  PooledWorkFP(S* op_handler, OPERATION op)
-      : op_handler_(op_handler), m_op(op) {}
-  virtual ~PooledWorkFP() {}
+  explicit ThreadPool(size_t threadPoolSize);
+  ~ThreadPool();
 
- protected:
-  virtual R execute(void) { return (this->op_handler_->*m_op)(); }
+  void perform(std::shared_ptr<Callable> req);
+
+  void shutDown(void);
 
  private:
-  S* op_handler_;
-  OPERATION m_op;
-};
-
-class ThreadPoolWorker;
-
-class IThreadPool {
- public:
-  virtual int returnToWork(ThreadPoolWorker* worker) = 0;
-  virtual ~IThreadPool() {}
-};
-
-class ThreadPoolWorker : public ACE_Task<ACE_MT_SYNCH> {
- public:
-  explicit ThreadPoolWorker(IThreadPool* manager);
-  virtual ~ThreadPoolWorker();
-  int perform(ACE_Method_Request* req);
-  int shutDown(void);
-
-  virtual int svc(void);
-  ACE_thread_t threadId(void);
-
- private:
-  IThreadPool* manager_;
-  ACE_thread_t threadId_;
-  ACE_Activation_Queue queue_;
-  int shutdown_;
-};
-
-class ThreadPool : public ACE_Task_Base, IThreadPool {
-  friend class ACE_Singleton<ThreadPool, ACE_Recursive_Thread_Mutex>;
-
- public:
-  explicit ThreadPool(uint32_t threadPoolSize);
-  virtual ~ThreadPool();
-  int perform(ACE_Method_Request* req);
-  int svc(void);
-  int shutDown(void);
-  virtual int returnToWork(ThreadPoolWorker* worker);
-
- private:
-  ThreadPoolWorker* chooseWorker(void);
-  int createWorkerPool(void);
-  int done(void);
-  ACE_thread_t threadId(ThreadPoolWorker* worker);
-
- private:
-  int poolSize_;
-  int shutdown_;
-  ACE_Thread_Mutex workersLock_;
-  ACE_Condition<ACE_Thread_Mutex> workersCond_;
-  ACE_Unbounded_Queue<ThreadPoolWorker*> workers_;
-  ACE_Activation_Queue queue_;
+  bool shutdown_;
+  std::vector<std::thread> workers_;
+  std::deque<std::shared_ptr<Callable>> queue_;
+  std::mutex queueMutex_;
+  std::condition_variable queueCondition_;
   static const char* NC_Pool_Thread;
+  AppDomainContext* appDomainContext_;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TimeoutTimer.hpp b/cppcache/src/TimeoutTimer.hpp
deleted file mode 100644
index 0925026..0000000
--- a/cppcache/src/TimeoutTimer.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#pragma once
-
-#ifndef GEODE_TIMEOUTTIMER_H_
-#define GEODE_TIMEOUTTIMER_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Condition_T.h>
-#include <ace/Guard_T.h>
-#include <ace/OS_NS_sys_time.h>
-#include <ace/Time_Value.h>
-
-#include <geode/internal/geode_globals.hpp>
-
-namespace apache {
-namespace geode {
-namespace client {
-
-class APACHE_GEODE_EXPORT TimeoutTimer {
- private:
-  ACE_Recursive_Thread_Mutex m_mutex;
-  ACE_Condition<ACE_Recursive_Thread_Mutex> m_cond;
-  volatile bool m_reset;
-
- public:
-  TimeoutTimer() : m_mutex(), m_cond(m_mutex), m_reset(false) {}
-
-  /**
-   * Return only after seconds have passed without receiving a reset.
-   */
-  void untilTimeout(int seconds) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_mutex);
-
-    ACE_OS::last_error(0);
-    while ((ACE_OS::last_error() != ETIME) || m_reset) {
-      m_reset = false;
-      ACE_Time_Value stopTime = ACE_OS::gettimeofday();
-      stopTime += seconds;
-      ACE_OS::last_error(0);
-      m_cond.wait(&stopTime);
-    }
-  }
-
-  /**
-   * Reset the timeout interval so that it restarts now.
-   */
-  void reset() {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_mutex);
-    // m_cond.signal();
-    m_reset = true;
-  }
-};
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_TIMEOUTTIMER_H_
diff --git a/cppcache/src/TombstoneExpiryHandler.cpp b/cppcache/src/TombstoneExpiryHandler.cpp
index 6a7acc4..72e9f7a 100644
--- a/cppcache/src/TombstoneExpiryHandler.cpp
+++ b/cppcache/src/TombstoneExpiryHandler.cpp
@@ -14,18 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "TombstoneExpiryHandler.hpp"
 
+#include <ace/Reactor.h>
+#include <ace/Timer_Heap.h>
+#include <ace/Timer_Heap_T.h>
+#include <ace/Timer_Queue.h>
+#include <ace/Timer_Queue_Adapters.h>
+#include <ace/svc_export.h>
+
 #include "CacheImpl.hpp"
 #include "ExpiryTaskManager.hpp"
 #include "MapEntry.hpp"
 #include "RegionInternal.hpp"
-#include "ace/Reactor.h"
-#include "ace/Timer_Heap.h"
-#include "ace/Timer_Heap_T.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Timer_Queue_Adapters.h"
-#include "ace/svc_export.h"
 
 namespace apache {
 namespace geode {
@@ -39,31 +41,33 @@
       m_cacheImpl(cacheImpl),
       m_tombstoneList(tombstoneList) {}
 
-int TombstoneExpiryHandler::handle_timeout(const ACE_Time_Value& current_time,
-                                           const void*) {
+int TombstoneExpiryHandler::handle_timeout(const ACE_Time_Value&, const void*) {
   std::shared_ptr<CacheableKey> key;
   m_entryPtr->getEntry()->getKeyI(key);
   auto creationTime = m_entryPtr->getTombstoneCreationTime();
-  auto curr_time = static_cast<int64_t>(current_time.get_msec());
+  auto curr_time = TombstoneEntry::clock::now();
   auto expiryTaskId = m_entryPtr->getExpiryTaskId();
-  auto sec = curr_time - creationTime - m_duration.count();
+  auto sec = curr_time - creationTime - m_duration;
   try {
+    using apache::geode::internal::chrono::duration::to_string;
     LOGDEBUG(
         "Entered entry expiry task handler for tombstone of key [%s]: "
-        "%lld,%lld,%d,%lld",
-        Utils::nullSafeToString(key).c_str(), curr_time, creationTime,
-        m_duration.count(), sec);
-    if (sec >= 0) {
+        "%s,%s,%s,%s",
+        Utils::nullSafeToString(key).c_str(),
+        to_string(curr_time.time_since_epoch()).c_str(),
+        to_string(creationTime.time_since_epoch()).c_str(),
+        to_string(m_duration).c_str(), to_string(sec).c_str());
+    if (sec >= std::chrono::seconds::zero()) {
       DoTheExpirationAction(key);
     } else {
       // reset the task after
       // (lastAccessTime + entryExpiryDuration - curr_time) in seconds
       LOGDEBUG(
-          "Resetting expiry task %d secs later for key "
+          "Resetting expiry task %s later for key "
           "[%s]",
-          -sec / 1000 + 1, Utils::nullSafeToString(key).c_str());
+          to_string(-sec).c_str(), Utils::nullSafeToString(key).c_str());
       m_cacheImpl->getExpiryTaskManager().resetTask(
-          m_entryPtr->getExpiryTaskId(), uint32_t(-sec / 1000 + 1));
+          m_entryPtr->getExpiryTaskId(), -sec);
       return 0;
     }
   } catch (...) {
diff --git a/cppcache/src/TombstoneList.cpp b/cppcache/src/TombstoneList.cpp
index a3eb9c3..211d95d 100644
--- a/cppcache/src/TombstoneList.cpp
+++ b/cppcache/src/TombstoneList.cpp
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "TombstoneList.hpp"
 
 #include <unordered_map>
@@ -46,9 +47,8 @@
   auto duration = m_cacheImpl->getDistributedSystem()
                       .getSystemProperties()
                       .tombstoneTimeout();
-  ACE_Time_Value currTime(ACE_OS::gettimeofday());
-  auto tombstoneEntryPtr = std::make_shared<TombstoneEntry>(
-      nullptr, static_cast<int64_t>(currTime.get_msec()));
+
+  auto tombstoneEntryPtr = std::make_shared<TombstoneEntry>(nullptr);
   *handler = new TombstoneExpiryHandler(tombstoneEntryPtr, this, duration,
                                         m_cacheImpl);
   tombstoneEntryPtr->setHandler(*handler);
@@ -61,11 +61,8 @@
                         TombstoneExpiryHandler* handler,
                         ExpiryTaskManager::id_type taskid) {
   // This function is not guarded as all functions of this class are called from
-  // MapSegment
-  // read TombstoneTImeout from systemProperties.
-  ACE_Time_Value currTime(ACE_OS::gettimeofday());
-  auto tombstoneEntryPtr = std::make_shared<TombstoneEntry>(
-      entry, static_cast<int64_t>(currTime.get_msec()));
+  // MapSegment read TombstoneTImeout from systemProperties.
+  auto tombstoneEntryPtr = std::make_shared<TombstoneEntry>(entry);
   handler->setTombstoneEntry(tombstoneEntryPtr);
   tombstoneEntryPtr->setHandler(handler);
   std::shared_ptr<CacheableKey> key;
diff --git a/cppcache/src/TombstoneList.hpp b/cppcache/src/TombstoneList.hpp
index 7feed98..99b8fe2 100644
--- a/cppcache/src/TombstoneList.hpp
+++ b/cppcache/src/TombstoneList.hpp
@@ -20,13 +20,11 @@
 #ifndef GEODE_TOMBSTONELIST_H_
 #define GEODE_TOMBSTONELIST_H_
 
+#include <chrono>
 #include <list>
 #include <memory>
 #include <unordered_map>
 
-#include <ace/Guard_T.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/CacheableBuiltins.hpp>
 #include <geode/internal/functional.hpp>
 
@@ -35,19 +33,23 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 class MapSegment;
 class TombstoneExpiryHandler;
+
 class TombstoneEntry {
  public:
-  TombstoneEntry(const std::shared_ptr<MapEntryImpl>& entry,
-                 int64_t tombstoneCreationTime)
+  using clock = std::chrono::steady_clock;
+  using time_point = clock::time_point;
+
+  explicit TombstoneEntry(const std::shared_ptr<MapEntryImpl>& entry)
       : m_entry(entry),
-        m_tombstoneCreationTime(tombstoneCreationTime),
+        m_tombstoneCreationTime(TombstoneEntry::clock::now()),
         m_expiryTaskId(0),
         m_handler(nullptr) {}
   virtual ~TombstoneEntry() {}
   std::shared_ptr<MapEntryImpl> getEntry() { return m_entry; }
-  int64_t getTombstoneCreationTime() { return m_tombstoneCreationTime; }
+  time_point getTombstoneCreationTime() { return m_tombstoneCreationTime; }
   ExpiryTaskManager::id_type getExpiryTaskId() { return m_expiryTaskId; }
   void setExpiryTaskId(ExpiryTaskManager::id_type expiryTaskId) {
     m_expiryTaskId = expiryTaskId;
@@ -57,7 +59,7 @@
 
  private:
   std::shared_ptr<MapEntryImpl> m_entry;
-  int64_t m_tombstoneCreationTime;
+  time_point m_tombstoneCreationTime;
   ExpiryTaskManager::id_type m_expiryTaskId;
   TombstoneExpiryHandler* m_handler;
 };
@@ -94,11 +96,11 @@
       dereference_equal_to<std::shared_ptr<CacheableKey>>>
       TombstoneMap;
   TombstoneMap m_tombstoneMap;
-  ACE_Recursive_Thread_Mutex m_queueLock;
   MapSegment* m_mapSegment;
   CacheImpl* m_cacheImpl;
   friend class TombstoneExpiryHandler;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TransactionSuspender.cpp b/cppcache/src/TransactionSuspender.cpp
index 3f7cd23..1319da3 100644
--- a/cppcache/src/TransactionSuspender.cpp
+++ b/cppcache/src/TransactionSuspender.cpp
@@ -14,12 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * TransactionSuspender.cpp
- *
- *  Created on: 16-Feb-2011
- *      Author: ankurs
- */
 
 #include "TransactionSuspender.hpp"
 
@@ -30,14 +24,14 @@
 namespace client {
 
 TransactionSuspender::TransactionSuspender() {
-  TSSTXStateWrapper* txStateWrapper = TSSTXStateWrapper::s_geodeTSSTXState;
-  m_TXState = txStateWrapper->getTXState();
-  txStateWrapper->setTXState(nullptr);
+  m_TXState = TSSTXStateWrapper::get().getTXState();
+  TSSTXStateWrapper::get().setTXState(nullptr);
 }
 
 TransactionSuspender::~TransactionSuspender() {
-  TSSTXStateWrapper::s_geodeTSSTXState->setTXState(m_TXState);
+  TSSTXStateWrapper::get().setTXState(m_TXState);
 }
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/TransactionSuspender.hpp b/cppcache/src/TransactionSuspender.hpp
index 0a6f2a4..cf7b436 100644
--- a/cppcache/src/TransactionSuspender.hpp
+++ b/cppcache/src/TransactionSuspender.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TRANSACTIONSUSPENDER_H_
-#define GEODE_TRANSACTIONSUSPENDER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,12 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * TransactionSuspender.hpp
- *
- *  Created on: 16-Feb-2011
- *      Author: ankurs
- */
+
+#pragma once
+
+#ifndef GEODE_TRANSACTIONSUSPENDER_H_
+#define GEODE_TRANSACTIONSUSPENDER_H_
 
 #include "TXState.hpp"
 
diff --git a/cppcache/src/TssConnectionWrapper.hpp b/cppcache/src/TssConnectionWrapper.hpp
index 9d1a47d..ee958b7 100644
--- a/cppcache/src/TssConnectionWrapper.hpp
+++ b/cppcache/src/TssConnectionWrapper.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TSSCONNECTIONWRAPPER_H_
-#define GEODE_TSSCONNECTIONWRAPPER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,6 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#pragma once
+
+#ifndef GEODE_TSSCONNECTIONWRAPPER_H_
+#define GEODE_TSSCONNECTIONWRAPPER_H_
+
 #include <map>
 #include <string>
 
@@ -26,12 +27,13 @@
 
 #include <geode/Pool.hpp>
 
-#include "TcrEndpoint.hpp"
-
 namespace apache {
 namespace geode {
 namespace client {
+
+class TcrEndpoint;
 class TcrConnection;
+
 typedef std::map<std::string, TcrConnection*> EpNameVsConnection;
 
 class PoolWrapper {
@@ -76,6 +78,7 @@
   void releaseSHConnections(std::shared_ptr<Pool> p);
   TcrConnection* getAnyConnection(const char* poolname);
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/UserAttributes.cpp b/cppcache/src/UserAttributes.cpp
index bcae70a..50b2549 100644
--- a/cppcache/src/UserAttributes.cpp
+++ b/cppcache/src/UserAttributes.cpp
@@ -34,12 +34,10 @@
 bool UserAttributes::isCacheClosed() { return m_authenticatedView->isClosed(); }
 
 UserAttributes::~UserAttributes() {
-  std::map<std::string, UserConnectionAttributes*>::iterator it;
-
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_listLock);
-  for (it = m_connectionAttr.begin(); it != m_connectionAttr.end(); it++) {
-    UserConnectionAttributes* uca = (*it).second;
-    if (uca != nullptr) {
+  std::lock_guard<decltype(m_listLock)> guard(m_listLock);
+  for (auto& it : m_connectionAttr) {
+    auto uca = it.second;
+    if (uca) {
       _GEODE_SAFE_DELETE(uca);
     }
   }
@@ -47,19 +45,6 @@
 
 UserConnectionAttributes* UserAttributes::getConnectionAttribute() {
   LOGDEBUG("UserConnectionAttributes* getConnectionAttribute().");
-  if (m_connectionAttr.size() == 0) return nullptr;
-
-  //  std::map<std::string, UserConnectionAttributes*>::iterator it;
-
-  // ACE_Guard< ACE_Recursive_Thread_Mutex > guard( m_listLock );
-  /*for( it = m_connectionAttr.begin(); it != m_connectionAttr.end(); it++ )
-  {
-    UserConnectionAttributes* uca = &((*it).second);
-    if (uca->isAuthenticated() && uca->getEndpoint()->connected())
-      return uca;
-    else
-      uca->setUnAuthenticated();
-  }*/
   return nullptr;
 }
 
@@ -71,9 +56,9 @@
   // TODO: chk before returing whether endpoint is up or not
   // std::map<std::string, UserConnectionAttributes>::iterator it;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_listLock);
-  UserConnectionAttributes* uca = m_connectionAttr[endpoint->name()];
-  if (uca != nullptr) {
+  std::lock_guard<decltype(m_listLock)> guard(m_listLock);
+  auto uca = m_connectionAttr[endpoint->name()];
+  if (uca) {
     m_connectionAttr.erase(endpoint->name());
     _GEODE_SAFE_DELETE(uca);
   }
@@ -91,15 +76,7 @@
   LOGDEBUG("UserConnectionAttributes* getConnectionAttribute with EP.");
   if (m_connectionAttr.size() == 0) return nullptr;
 
-  // std::map<std::string, UserConnectionAttributes>::iterator it;
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_listLock);
-  /*for( it = m_connectionAttr.begin(); it != m_connectionAttr.end(); it++ )
-  {
-    UserConnectionAttributes* uca = &((*it).second);
-    if (uca->isAuthenticated() && (uca->getEndpoint() == ep))
-      return uca;
-  }*/
-
+  std::lock_guard<decltype(m_listLock)> guard(m_listLock);
   return m_connectionAttr[ep->name()];
 }
 
@@ -108,9 +85,9 @@
       "UserAttributes::isEndpointAuthenticated: (TcrEndpoint* ep) with EP.");
   if (m_connectionAttr.size() == 0) return false;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_listLock);
-  UserConnectionAttributes* uca = m_connectionAttr[ep->name()];
-  if (uca != nullptr && uca->isAuthenticated() && (uca->getEndpoint() == ep)) {
+  std::lock_guard<decltype(m_listLock)> guard(m_listLock);
+  auto uca = m_connectionAttr[ep->name()];
+  if (uca && uca->isAuthenticated() && (uca->getEndpoint() == ep)) {
     return true;
   }
   return false;
@@ -130,8 +107,8 @@
   return m_authenticatedView;
 }
 
-ACE_TSS<TSSUserAttributesWrapper>
-    TSSUserAttributesWrapper::s_geodeTSSUserAttributes;
+thread_local std::shared_ptr<UserAttributes>
+    UserAttributes::threadLocalUserAttributes;
 
 GuardUserAttributes::GuardUserAttributes(AuthenticatedView* authenticatedView) {
   setAuthenticatedView(authenticatedView);
@@ -142,8 +119,8 @@
   m_authenticatedView = authenticatedView;
   LOGDEBUG("GuardUserAttributes::GuardUserAttributes:");
   if (m_authenticatedView != nullptr && !authenticatedView->isClosed()) {
-    TSSUserAttributesWrapper::s_geodeTSSUserAttributes->setUserAttributes(
-        authenticatedView->m_userAttributes);
+    UserAttributes::threadLocalUserAttributes =
+        authenticatedView->m_userAttributes;
   } else {
     throw CacheClosedException("User Cache has been closed");
   }
@@ -153,8 +130,7 @@
 
 GuardUserAttributes::~GuardUserAttributes() {
   if (m_authenticatedView != nullptr) {
-    TSSUserAttributesWrapper::s_geodeTSSUserAttributes->setUserAttributes(
-        nullptr);
+    UserAttributes::threadLocalUserAttributes = nullptr;
   }
 }
 
diff --git a/cppcache/src/UserAttributes.hpp b/cppcache/src/UserAttributes.hpp
index da03bda..a75bd43 100644
--- a/cppcache/src/UserAttributes.hpp
+++ b/cppcache/src/UserAttributes.hpp
@@ -21,10 +21,9 @@
 #define GEODE_USERATTRIBUTES_H_
 
 #include <map>
+#include <mutex>
 #include <string>
 
-#include <ace/TSS_T.h>
-
 #include <geode/Properties.hpp>
 #include <geode/internal/geode_globals.hpp>
 
@@ -33,8 +32,10 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 class AuthenticatedView;
 class ThinClientPoolDM;
+
 class UserConnectionAttributes {
  public:
   UserConnectionAttributes(TcrEndpoint* endpoint, uint64_t id) {
@@ -71,7 +72,7 @@
   // UserConnectionAttributes & operator =(const UserConnectionAttributes &);
 };
 
-class APACHE_GEODE_EXPORT UserAttributes {
+class UserAttributes {
   // TODO: need to add lock here so that user should not be authenticated at two
   // servers
  public:
@@ -88,11 +89,9 @@
 
   void setConnectionAttributes(TcrEndpoint* endpoint, uint64_t id) {
     m_isUserAuthenticated = true;
-    UserConnectionAttributes* ucb = new UserConnectionAttributes(endpoint, id);
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_listLock);
-    // m_connectionAttr.push_back(ucb);
-    std::string fullName(endpoint->name().c_str());
-    m_connectionAttr[fullName] = ucb;
+    auto ucb = new UserConnectionAttributes(endpoint, id);
+    std::lock_guard<decltype(m_listLock)> guard(m_listLock);
+    m_connectionAttr[endpoint->name()] = ucb;
   }
 
   void unAuthenticateEP(TcrEndpoint* endpoint);
@@ -109,11 +108,12 @@
 
   bool isEndpointAuthenticated(TcrEndpoint* ep);
 
+  static thread_local std::shared_ptr<UserAttributes> threadLocalUserAttributes;
+
  private:
   std::map<std::string, UserConnectionAttributes*> m_connectionAttr;
   std::shared_ptr<Properties> m_credentials;
-  // ThinClientPoolDM m_pool;
-  ACE_Recursive_Thread_Mutex m_listLock;
+  std::recursive_mutex m_listLock;
   bool m_isUserAuthenticated;
   AuthenticatedView* m_authenticatedView;
   std::shared_ptr<Pool> m_pool;
@@ -123,24 +123,6 @@
   UserAttributes& operator=(const UserAttributes&);
 };
 
-class TSSUserAttributesWrapper {
- private:
-  std::shared_ptr<UserAttributes> m_userAttribute;
-  TSSUserAttributesWrapper& operator=(const TSSUserAttributesWrapper&);
-  TSSUserAttributesWrapper(const TSSUserAttributesWrapper&);
-
- public:
-  static ACE_TSS<TSSUserAttributesWrapper> s_geodeTSSUserAttributes;
-  std::shared_ptr<UserAttributes> getUserAttributes() {
-    return m_userAttribute;
-  }
-  void setUserAttributes(std::shared_ptr<UserAttributes> userAttr) {
-    m_userAttribute = userAttr;
-  }
-  TSSUserAttributesWrapper() : m_userAttribute(nullptr) {}
-  ~TSSUserAttributesWrapper() {}
-};
-
 class GuardUserAttributes {
  public:
   GuardUserAttributes();
@@ -154,6 +136,7 @@
  private:
   AuthenticatedView* m_authenticatedView;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/Utils.cpp b/cppcache/src/Utils.cpp
index b816529..f8fa0ec 100644
--- a/cppcache/src/Utils.cpp
+++ b/cppcache/src/Utils.cpp
@@ -19,34 +19,25 @@
 
 #include <chrono>
 #include <cstdio>
+#include <cstdlib>
 #include <iomanip>
 #include <sstream>
 
 #include <ace/INET_Addr.h>
 #include <ace/OS.h>
-#include <ace/Recursive_Thread_Mutex.h>
 
 namespace apache {
 namespace geode {
 namespace client {
 
 int32_t Utils::getLastError() { return ACE_OS::last_error(); }
+
 std::string Utils::getEnv(const char* varName) {
-#ifdef _WIN32
-  DWORD dwRet;
-  char varValue[8192];
-  dwRet = ::GetEnvironmentVariable(varName, varValue, 8192);
-  if (dwRet == 0 && (::GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
-    return "";
+  std::string env;
+  if (const auto varValue = std::getenv(varName)) {
+    env = varValue;
   }
-  return varValue;
-#else
-  char* varValue = ACE_OS::getenv(varName);
-  if (varValue == nullptr) {
-    return "";
-  }
-  return varValue;
-#endif
+  return env;
 }
 
 void Utils::parseEndpointString(const char* endpoints, std::string& host,
@@ -107,7 +98,7 @@
     struct hostent* host;
     host = ACE_OS::gethostbyname(hostName);
     if (host) {
-      ACE_OS::snprintf(fullName, 256, "%s:%d", host->h_name, port);
+      std::snprintf(fullName, 256, "%s:%d", host->h_name, port);
       return fullName;
     }
   } else {
@@ -115,7 +106,7 @@
     if (pos != std::string::npos) {
       ACE_INET_Addr addr(endpoints);
       addr.get_host_name(hostName, 256);
-      ACE_OS::snprintf(fullName, 256, "%s:%d", hostName, port);
+      std::snprintf(fullName, 256, "%s:%d", hostName, port);
       return fullName;
     }
   }
@@ -173,32 +164,6 @@
   return "";
 }
 
-int32_t Utils::logWideString(char* buf, size_t maxLen, const wchar_t* wStr) {
-  if (wStr != nullptr) {
-    mbstate_t state;
-    ACE_OS::memset(&state, 0, sizeof(mbstate_t));
-    const char* bufStart = buf;
-    do {
-      if (maxLen < static_cast<size_t>(MB_CUR_MAX)) {
-        break;
-      }
-      size_t numChars = wcrtomb(buf, *wStr, &state);
-      if (numChars == static_cast<size_t>(-1)) {
-        // write short when conversion cannot be done
-        numChars = ACE_OS::snprintf(buf, maxLen, "<%u>", *wStr);
-      }
-      buf += numChars;
-      if (numChars >= maxLen) {
-        break;
-      }
-      maxLen -= numChars;
-    } while (*wStr++ != L'\0');
-    return static_cast<int32_t>(buf - bufStart);
-  } else {
-    return ACE_OS::snprintf(buf, maxLen, "null");
-  }
-}
-
 int64_t Utils::startStatOpTime() {
   return std::chrono::duration_cast<std::chrono::nanoseconds>(
              std::chrono::steady_clock::now().time_since_epoch())
diff --git a/cppcache/src/Utils.hpp b/cppcache/src/Utils.hpp
index 32b6ead..b3577c1 100644
--- a/cppcache/src/Utils.hpp
+++ b/cppcache/src/Utils.hpp
@@ -98,8 +98,6 @@
     return std::string(typeIdName);
   }
 
-  static int logWideString(char* buf, size_t maxLen, const wchar_t* wStr);
-
   /**
    * The only operations that is well defined on the result is "asChar".
    */
diff --git a/cppcache/src/VersionStamp.cpp b/cppcache/src/VersionStamp.cpp
index 9d1004a..ef1c3e9 100644
--- a/cppcache/src/VersionStamp.cpp
+++ b/cppcache/src/VersionStamp.cpp
@@ -187,7 +187,9 @@
         "delta requires full value due to version mismatch. key=%s tagVersion "
         "%lld stampVersion %lld ",
         keystr.c_str(), tagVersion, stampVersion);
-    if (poolDM) poolDM->updateNotificationStats(false, 0);
+    if (poolDM) {
+      poolDM->updateNotificationStats(false, std::chrono::nanoseconds(0));
+    }
     return GF_INVALID_DELTA;
 
   } else {
@@ -199,7 +201,9 @@
           "MemberId of the version stamp could not be found. Requesting full "
           "delta value. key=%s",
           keystr.c_str());
-      if (poolDM) poolDM->updateNotificationStats(false, 0);
+      if (poolDM) {
+        poolDM->updateNotificationStats(false, std::chrono::nanoseconds(0));
+      }
       return GF_INVALID_DELTA;
     }
 
@@ -209,7 +213,9 @@
           "Previous MemberId of the version tag could not be found. Requesting "
           "full delta value. key=%s",
           keystr.c_str());
-      if (poolDM) poolDM->updateNotificationStats(false, 0);
+      if (poolDM) {
+        poolDM->updateNotificationStats(false, std::chrono::nanoseconds(0));
+      }
       return GF_INVALID_DELTA;
     }
 
@@ -220,7 +226,9 @@
           keystr.c_str(), tagID->getHashKey().c_str(),
           stampID->getHashKey().c_str());
 
-      if (poolDM) poolDM->updateNotificationStats(false, 0);
+      if (poolDM) {
+        poolDM->updateNotificationStats(false, std::chrono::nanoseconds(0));
+      }
       return GF_INVALID_DELTA;
     }
     return GF_NOERR;
diff --git a/cppcache/src/VersionedCacheableObjectPartList.cpp b/cppcache/src/VersionedCacheableObjectPartList.cpp
index 3df5504..15b8ea3 100644
--- a/cppcache/src/VersionedCacheableObjectPartList.cpp
+++ b/cppcache/src/VersionedCacheableObjectPartList.cpp
@@ -87,7 +87,7 @@
 }
 
 void VersionedCacheableObjectPartList::fromData(DataInput& input) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_responseLock);
+  std::lock_guard<decltype(m_responseLock)> guard(m_responseLock);
   LOGDEBUG("VersionedCacheableObjectPartList::fromData");
   uint8_t flags = input.read();
   m_hasKeys = (flags & 0x01) == 0x01;
diff --git a/cppcache/src/VersionedCacheableObjectPartList.hpp b/cppcache/src/VersionedCacheableObjectPartList.hpp
index 4c9e7e4..68b3846 100644
--- a/cppcache/src/VersionedCacheableObjectPartList.hpp
+++ b/cppcache/src/VersionedCacheableObjectPartList.hpp
@@ -20,17 +20,13 @@
 #ifndef GEODE_VERSIONEDCACHEABLEOBJECTPARTLIST_H_
 #define GEODE_VERSIONEDCACHEABLEOBJECTPARTLIST_H_
 
+#include <mutex>
 #include <vector>
 
-#include <ace/Task.h>
-
 #include "CacheableObjectPartList.hpp"
 #include "VersionTag.hpp"
 #include "util/Log.hpp"
 
-/** @file
- */
-
 namespace apache {
 namespace geode {
 namespace client {
@@ -57,7 +53,7 @@
   std::vector<uint8_t> m_byteArray;
   uint16_t m_endpointMemId;
   std::shared_ptr<std::vector<std::shared_ptr<CacheableKey>>> m_tempKeys;
-  ACE_Recursive_Thread_Mutex& m_responseLock;
+  std::recursive_mutex& m_responseLock;
 
   static const uint8_t FLAG_NULL_TAG;
   static const uint8_t FLAG_FULL_TAG;
@@ -71,13 +67,6 @@
       const VersionedCacheableObjectPartList& other);
   VersionedCacheableObjectPartList(
       const VersionedCacheableObjectPartList& other);
-  /*inline VersionedCacheableObjectPartList() : m_responseLock()
-  {
-        m_regionIsVersioned = false;
-        m_serializeValues = false;
-        m_endpointMemId = 0;
-        _GEODE_NEW(m_tempKeys, std::vector<std::shared_ptr<CacheableKey>> );
-  }*/
 
  public:
   VersionedCacheableObjectPartList(
@@ -88,7 +77,7 @@
           resultKeys,
       ThinClientRegion* region, MapOfUpdateCounters* trackerMap,
       int32_t destroyTracker, bool addToLocalCache, uint16_t m_dsmemId,
-      ACE_Recursive_Thread_Mutex& responseLock)
+      std::recursive_mutex& responseLock)
       : CacheableObjectPartList(keys, keysOffset, values, exceptions,
                                 resultKeys, region, trackerMap, destroyTracker,
                                 addToLocalCache),
@@ -104,7 +93,7 @@
 
   VersionedCacheableObjectPartList(
       std::vector<std::shared_ptr<CacheableKey>>* keys, int32_t totalMapSize,
-      ACE_Recursive_Thread_Mutex& responseLock)
+      std::recursive_mutex& responseLock)
       : m_tempKeys(keys), m_responseLock(responseLock) {
     m_regionIsVersioned = false;
     m_serializeValues = false;
@@ -116,7 +105,7 @@
   }
 
   VersionedCacheableObjectPartList(ThinClientRegion* region, uint16_t dsmemId,
-                                   ACE_Recursive_Thread_Mutex& responseLock)
+                                   std::recursive_mutex& responseLock)
       : CacheableObjectPartList(region),
         m_endpointMemId(dsmemId),
         m_responseLock(responseLock) {
@@ -129,7 +118,7 @@
 
   VersionedCacheableObjectPartList(
       std::vector<std::shared_ptr<CacheableKey>>* keys,
-      ACE_Recursive_Thread_Mutex& responseLock)
+      std::recursive_mutex& responseLock)
       : m_tempKeys(keys), m_responseLock(responseLock) {
     m_regionIsVersioned = false;
     m_serializeValues = false;
@@ -141,7 +130,7 @@
   VersionedCacheableObjectPartList(
       ThinClientRegion* region,
       std::vector<std::shared_ptr<CacheableKey>>* keys,
-      ACE_Recursive_Thread_Mutex& responseLock)
+      std::recursive_mutex& responseLock)
       : CacheableObjectPartList(region),
         m_tempKeys(keys),
         m_responseLock(responseLock) {
@@ -153,7 +142,7 @@
   }
 
   VersionedCacheableObjectPartList(ThinClientRegion* region,
-                                   ACE_Recursive_Thread_Mutex& responseLock)
+                                   std::recursive_mutex& responseLock)
       : CacheableObjectPartList(region), m_responseLock(responseLock) {
     m_regionIsVersioned = false;
     m_serializeValues = false;
@@ -183,8 +172,8 @@
     return m_tempKeys;
   }
 
-  inline VersionedCacheableObjectPartList(
-      uint16_t endpointMemId, ACE_Recursive_Thread_Mutex& responseLock)
+  inline VersionedCacheableObjectPartList(uint16_t endpointMemId,
+                                          std::recursive_mutex& responseLock)
       : m_tempKeys(
             std::make_shared<std::vector<std::shared_ptr<CacheableKey>>>()),
         m_responseLock(responseLock) {
@@ -196,8 +185,6 @@
   }
 
   void addAll(std::shared_ptr<VersionedCacheableObjectPartList> other) {
-    // LOGDEBUG("DEBUG:: COPL.addAll called");
-    // ACE_Guard< ACE_Recursive_Thread_Mutex > guard( this->m_responseLock );
     if (other->m_tempKeys != nullptr) {
       if (this->m_tempKeys == nullptr) {
         this->m_tempKeys =
diff --git a/cppcache/src/config.h.in b/cppcache/src/config.h.in
index 7444cc3..c2a283f 100644
--- a/cppcache/src/config.h.in
+++ b/cppcache/src/config.h.in
@@ -22,6 +22,13 @@
 
 #cmakedefine HAVE_SYS_MOUNT_H
 
+#cmakedefine CMAKE_USE_PTHREADS_INIT
+#if defined(CMAKE_USE_PTHREADS_INIT)
+#cmakedefine HAVE_PTHREAD_H
+#cmakedefine HAVE_PTHREAD_HX
+#cmakedefine HAVE_pthread_setname_np
+#endif
+
 #cmakedefine HAVE_SIGSTKFLT
 #cmakedefine HAVE_ACE_Select_Reactor
 
diff --git a/cppcache/src/dllmain.cpp b/cppcache/src/dllmain.cpp
index 0ad9d12..54a97d5 100644
--- a/cppcache/src/dllmain.cpp
+++ b/cppcache/src/dllmain.cpp
@@ -19,8 +19,6 @@
 #include <cstdlib>
 #include <string>
 
-#include <ace/TSS_T.h>
-
 #include <geode/Exception.hpp>
 
 #include "CppCacheLibrary.hpp"
diff --git a/cppcache/src/internal/duration.cpp b/cppcache/src/internal/chrono/duration.cpp
similarity index 100%
rename from cppcache/src/internal/duration.cpp
rename to cppcache/src/internal/chrono/duration.cpp
diff --git a/cppcache/src/statistics/AtomicStatisticsImpl.cpp b/cppcache/src/statistics/AtomicStatisticsImpl.cpp
index 8ad053e..3618844 100644
--- a/cppcache/src/statistics/AtomicStatisticsImpl.cpp
+++ b/cppcache/src/statistics/AtomicStatisticsImpl.cpp
@@ -19,8 +19,6 @@
 
 #include <atomic>
 
-#include <ace/OS_NS_stdio.h>
-
 #include <geode/internal/geode_globals.hpp>
 
 #include "../Assert.hpp"
@@ -140,7 +138,7 @@
 void AtomicStatisticsImpl::_setInt(int32_t offset, int32_t value) {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "setInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -152,7 +150,7 @@
   if (offset >= statsType->getLongStatCount()) {
     char s[128] = {'\0'};
 
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "setLong:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -164,7 +162,7 @@
 void AtomicStatisticsImpl::_setDouble(int32_t offset, double value) {
   if (offset >= statsType->getDoubleStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128,
         "setDouble:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
@@ -177,7 +175,7 @@
 int32_t AtomicStatisticsImpl::_getInt(int32_t offset) const {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "getInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -189,7 +187,7 @@
 int64_t AtomicStatisticsImpl::_getLong(int32_t offset) const {
   if (offset >= statsType->getLongStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "getLong:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -200,7 +198,7 @@
 double AtomicStatisticsImpl::_getDouble(int32_t offset) const {
   if (offset >= statsType->getDoubleStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128,
         "getDouble:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
@@ -243,7 +241,7 @@
 int32_t AtomicStatisticsImpl::_incInt(int32_t offset, int32_t delta) {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "incInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -254,24 +252,9 @@
 
 int64_t AtomicStatisticsImpl::_incLong(int32_t offset, int64_t delta) {
   if (offset >= statsType->getLongStatCount()) {
-    char s[128] = {'\0'};
-    /* adongre  - Coverity II
-     * CID 29273: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
-    // sprintf(s, "incLong:The id (%d) of the Statistic Descriptor is not valid
-    // ", offset);
-
-    ACE_OS::snprintf(
-        s, 128, "incLong:The id (%d) of the Statistic Descriptor is not valid ",
-        offset);
-    throw IllegalArgumentException(s);
+    throw IllegalArgumentException(
+        "incLong:The id " + std::to_string(offset) +
+        " of the Statistic Descriptor is not valid.");
   }
 
   return (longStorage[offset] += delta);
@@ -279,12 +262,9 @@
 
 double AtomicStatisticsImpl::_incDouble(int32_t offset, double delta) {
   if (offset >= statsType->getDoubleStatCount()) {
-    char s[128] = {'\0'};
-    ACE_OS::snprintf(
-        s, 128,
-        "incDouble:The id (%d) of the Statistic Descriptor is not valid ",
-        offset);
-    throw IllegalArgumentException(s);
+    throw IllegalArgumentException(
+        "incDouble:The id " + std::to_string(offset) +
+        " of the Statistic Descriptor is not valid.");
   }
 
   double expected = doubleStorage[offset];
diff --git a/cppcache/src/statistics/GeodeStatisticsFactory.cpp b/cppcache/src/statistics/GeodeStatisticsFactory.cpp
index db19ec3..834d61d 100644
--- a/cppcache/src/statistics/GeodeStatisticsFactory.cpp
+++ b/cppcache/src/statistics/GeodeStatisticsFactory.cpp
@@ -1,4 +1,3 @@
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,10 +19,7 @@
 
 #include <string>
 
-#include <ace/Guard_T.h>
-#include <ace/OS.h>
-#include <ace/Recursive_Thread_Mutex.h>
-#include <ace/Thread_Mutex.h>
+#include <boost/process/environment.hpp>
 
 #include <geode/Exception.hpp>
 #include <geode/internal/geode_globals.hpp>
@@ -31,6 +27,7 @@
 #include "../util/Log.hpp"
 #include "AtomicStatisticsImpl.hpp"
 #include "OsStatisticsImpl.hpp"
+#include "StatisticDescriptorImpl.hpp"
 
 namespace apache {
 namespace geode {
@@ -43,7 +40,7 @@
 
 GeodeStatisticsFactory::GeodeStatisticsFactory(StatisticsManager* statMngr) {
   m_name = "GeodeStatisticsFactory";
-  m_id = ACE_OS::getpid();
+  m_id = boost::this_process::get_id();
   m_statsListUniqueId = 1;
 
   m_statMngr = statMngr;
@@ -54,17 +51,14 @@
     m_statMngr = nullptr;
 
     // Clean Map : Delete all the pointers of StatisticsType from the map.
-    if (statsTypeMap.total_size() == 0) return;
+    std::lock_guard<decltype(statsTypeMap)::mutex_type> lock(
+        statsTypeMap.mutex());
+    if (statsTypeMap.empty()) return;
 
-    ACE_Map_Manager<std::string, StatisticsTypeImpl*,
-                    ACE_Recursive_Thread_Mutex>::iterator iterFind =
-        statsTypeMap.begin();
-    while (iterFind != statsTypeMap.end()) {
-      delete (*iterFind).int_id_;
-      (*iterFind).int_id_ = nullptr;
-      iterFind++;
+    for (auto& entry : statsTypeMap) {
+      delete entry.second;
     }
-    statsTypeMap.unbind_all();
+    statsTypeMap.clear();
 
   } catch (const Exception& ex) {
     Log::warningCatch("~GeodeStatisticsFactory swallowing Geode exception", ex);
@@ -107,7 +101,8 @@
 
   int64_t myUniqueId;
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListUniqueIdLock);
+    std::lock_guard<decltype(m_statsListUniqueIdLock)> guard(
+        m_statsListUniqueIdLock);
     myUniqueId = m_statsListUniqueId++;
   }
 
@@ -137,7 +132,8 @@
   int64_t myUniqueId;
 
   {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListUniqueIdLock);
+    std::lock_guard<decltype(m_statsListUniqueIdLock)> guard(
+        m_statsListUniqueIdLock);
     myUniqueId = m_statsListUniqueId++;
   }
 
@@ -156,20 +152,17 @@
 
 StatisticsTypeImpl* GeodeStatisticsFactory::addType(StatisticsTypeImpl* st) {
   const auto& name = st->getName();
-  int status;
   try {
-    StatisticsTypeImpl* st1;
-    status = statsTypeMap.rebind(name, st, st1);
+    auto status = statsTypeMap.emplace(name, st);
+    if (!status.second) {
+      throw IllegalArgumentException(
+          "GeodeStatisticsFactory::addType: failed to add new type " + name);
+    }
   } catch (const std::exception& ex) {
     throw IllegalArgumentException(ex.what());
   } catch (...) {
     throw IllegalArgumentException("addType: unknown exception");
   }
-  if (status == 1) {
-  } else if (status == -1) {
-    throw IllegalArgumentException(
-        "GeodeStatisticsFactory::addType: failed to add new type " + name);
-  }
   return st;
 }
 
@@ -179,8 +172,7 @@
 StatisticsType* GeodeStatisticsFactory::createType(
     const std::string& name, const std::string& description,
     StatisticDescriptor** stats, int32_t statsLength) {
-  StatisticsTypeImpl* st =
-      new StatisticsTypeImpl(name, description, stats, statsLength);
+  auto st = new StatisticsTypeImpl(name, description, stats, statsLength);
 
   if (st != nullptr) {
     st = addType(st);
@@ -193,15 +185,13 @@
 
 StatisticsType* GeodeStatisticsFactory::findType(
     const std::string& name) const {
-  StatisticsTypeImpl* st = nullptr;
-  int status = statsTypeMap.find(name, st);
-  if (status == -1) {
+  auto&& lock = statsTypeMap.make_lock();
+  const auto& entry = statsTypeMap.find(name);
+  if (entry == statsTypeMap.end()) {
     std::string s = "There is no statistic named \"" + name + "\"";
-    // LOGWARN(s.c_str());
-    // throw IllegalArgumentException(s.c_str());
     return nullptr;
   } else {
-    return st;
+    return entry->second;
   }
 }
 
diff --git a/cppcache/src/statistics/GeodeStatisticsFactory.hpp b/cppcache/src/statistics/GeodeStatisticsFactory.hpp
index 790bede..4d6ed46 100644
--- a/cppcache/src/statistics/GeodeStatisticsFactory.hpp
+++ b/cppcache/src/statistics/GeodeStatisticsFactory.hpp
@@ -20,14 +20,14 @@
 #ifndef GEODE_STATISTICS_GEODESTATISTICSFACTORY_H_
 #define GEODE_STATISTICS_GEODESTATISTICSFACTORY_H_
 
+#include <mutex>
+#include <unordered_map>
 #include <vector>
 
-#include <ace/Map_Manager.h>
-#include <ace/Recursive_Thread_Mutex.h>
-
 #include <geode/ExceptionTypes.hpp>
 #include <geode/internal/geode_globals.hpp>
 
+#include "../util/synchronized_map.hpp"
 #include "StatisticsFactory.hpp"
 #include "StatisticsManager.hpp"
 #include "StatisticsTypeImpl.hpp"
@@ -56,10 +56,12 @@
   int64_t m_statsListUniqueId;  // Creates a unique id for each stats object in
                                 // the list
 
-  ACE_Recursive_Thread_Mutex m_statsListUniqueIdLock;
+  std::recursive_mutex m_statsListUniqueIdLock;
 
   /* Maps a stat name to its StatisticDescriptor*/
-  ACE_Map_Manager<std::string, StatisticsTypeImpl*, ACE_Recursive_Thread_Mutex>
+  apache::geode::client::synchronized_map<
+      std::unordered_map<std::string, StatisticsTypeImpl*>,
+      std::recursive_mutex>
       statsTypeMap;
 
   StatisticsTypeImpl* addType(StatisticsTypeImpl* t);
diff --git a/cppcache/src/statistics/HostStatSampler.cpp b/cppcache/src/statistics/HostStatSampler.cpp
index 74fb443..1fc5b8e 100644
--- a/cppcache/src/statistics/HostStatSampler.cpp
+++ b/cppcache/src/statistics/HostStatSampler.cpp
@@ -29,8 +29,7 @@
 #include <ace/INET_Addr.h>
 #include <ace/OS_NS_sys_stat.h>
 #include <ace/OS_NS_sys_utsname.h>
-#include <ace/Task.h>
-#include <ace/Thread_Mutex.h>
+#include <boost/process/environment.hpp>
 
 #include <geode/SystemProperties.hpp>
 #include <geode/internal/geode_globals.hpp>
@@ -39,6 +38,7 @@
 #include "../ClientHealthStats.hpp"
 #include "../ClientProxyMembershipID.hpp"
 #include "../DistributedSystem.hpp"
+#include "../TcrConnectionManager.hpp"
 #include "../util/Log.hpp"
 #include "GeodeStatisticsFactory.hpp"
 #include "StatArchiveWriter.hpp"
@@ -81,7 +81,7 @@
     size_t fileHyphenPos = tempname.find_last_of('-');
     if (fileHyphenPos != std::string::npos) {
       std::string buff1 = tempname.substr(0, fileHyphenPos);
-      if (ACE_OS::strstr(filebasename.c_str(), buff1.c_str()) == nullptr) {
+      if (filebasename.find(buff1) == std::string::npos) {
         return 0;
       }
       if (fileHyphenPos != actualHyphenPos) return 0;
@@ -108,7 +108,7 @@
   } else if (strlen((*d1)->d_name) > strlen((*d2)->d_name)) {
     return 1;
   }
-  int diff = ACE_OS::strcmp((*d1)->d_name, (*d2)->d_name);
+  int diff = std::strcmp((*d1)->d_name, (*d2)->d_name);
   if (diff < 0) {
     return -1;
   } else if (diff > 0) {
@@ -146,7 +146,7 @@
   m_archiver = nullptr;
   m_samplerStats = new StatSamplerStats(statMngr->getStatisticsFactory());
   m_startTime = system_clock::now();
-  m_pid = ACE_OS::getpid();
+  m_pid = boost::this_process::get_id();
   m_statMngr = statMngr;
   m_archiveFileName = filePath;
   globals::g_statFile = filePath;
@@ -190,28 +190,15 @@
 
 #ifdef _WIN32
     // replace all '\' with '/' to make everything easier..
-    size_t len = globals::g_statFile.length() + 1;
-    char* slashtmp = new char[len];
-    ACE_OS::strncpy(slashtmp, globals::g_statFile.c_str(), len);
-    for (size_t i = 0; i < globals::g_statFile.length(); i++) {
-      if (slashtmp[i] == '/') {
-        slashtmp[i] = '\\';
-      }
-    }
-    globals::g_statFile = slashtmp;
-    delete[] slashtmp;
-    slashtmp = nullptr;
+    std::replace(globals::g_statFile.begin(), globals::g_statFile.end(), '\\',
+                 '/');
 #endif
 
     std::string dirname = ACE::dirname(globals::g_statFile.c_str());
-    // struct dirent **resultArray;
-    // int entries_count = ACE_OS::scandir(dirname.c_str(), &resultArray,
-    // selector, comparator);
     ACE_Dirent_Selector sds;
     int status = sds.open(dirname.c_str(), selector, comparator);
     if (status != -1) {
       for (int i = 0; i < sds.length(); i++) {
-        // std::string strname = ACE::basename(resultArray[i]->d_name);
         std::string strname = ACE::basename(sds[i]->d_name);
         size_t fileExtPos = strname.find_last_of('.', strname.length());
         if (fileExtPos != std::string::npos) {
@@ -220,34 +207,21 @@
           if (fileHyphenPos != std::string::npos) {
             std::string buff =
                 tempname.substr(fileHyphenPos + 1, tempname.length());
-            rollIndex = ACE_OS::atoi(buff.c_str()) + 1;
+            rollIndex = std::stoi(buff) + 1;
           }
         }
       }
       sds.close();
     }
-    /*for(int i = 0; i < entries_count; i++) {
-      ACE_OS::free ( resultArray[i] );
-    }
-    if (entries_count >= 0) {
-      ACE_OS::free( resultArray );
-      resultArray = nullptr;
-    }*/
 
     FILE* existingFile = fopen(globals::g_statFileWithExt.c_str(), "r");
     if (existingFile != nullptr && statFileLimit > 0) {
       fclose(existingFile);
-      /* adongre
-       * CID 28820: Resource leak (RESOURCE_LEAK)
-       */
       existingFile = nullptr;
       changeArchive(globals::g_statFileWithExt);
     } else {
       writeGfs();
     }
-    /* adongre
-     * CID 28820: Resource leak (RESOURCE_LEAK)
-     */
     if (existingFile != nullptr) {
       fclose(existingFile);
       existingFile = nullptr;
@@ -271,15 +245,15 @@
 std::string HostStatSampler::createArchiveFileName() {
   if (!m_isStatDiskSpaceEnabled) {
     char buff[1024] = {0};
-    int32_t pid = ACE_OS::getpid();
-    int32_t len = static_cast<int32_t>(m_archiveFileName.length());
-    size_t fileExtPos = m_archiveFileName.find_last_of('.', len);
+    auto pid = boost::this_process::get_id();
+    auto len = m_archiveFileName.length();
+    auto fileExtPos = m_archiveFileName.find_last_of('.', len);
     if (fileExtPos == std::string::npos) {
-      ACE_OS::snprintf(buff, 1024, "%s-%d.gfs", m_archiveFileName.c_str(), pid);
+      std::snprintf(buff, 1024, "%s-%d.gfs", m_archiveFileName.c_str(), pid);
     } else {
       std::string tmp;
       tmp = m_archiveFileName.substr(0, fileExtPos);
-      ACE_OS::snprintf(buff, 1024, "%s-%d.gfs", tmp.c_str(), pid);
+      std::snprintf(buff, 1024, "%s-%d.gfs", tmp.c_str(), pid);
     }
     m_archiveFileName = buff;
     return m_archiveFileName;
@@ -309,7 +283,8 @@
 }
 
 bool HostStatSampler::statisticsExists(const int64_t id) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statMngr->getListMutex());
+  std::lock_guard<decltype(m_statMngr->getListMutex())> guard(
+      m_statMngr->getListMutex());
   std::vector<Statistics*>& statsList = m_statMngr->getStatsList();
   std::vector<Statistics*>::iterator i;
   for (i = statsList.begin(); i != statsList.end(); ++i) {
@@ -321,7 +296,8 @@
 }
 
 Statistics* HostStatSampler::findStatistics(const int64_t id) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statMngr->getListMutex());
+  std::lock_guard<decltype(m_statMngr->getListMutex())> guard(
+      m_statMngr->getListMutex());
   std::vector<Statistics*>& statsList = m_statMngr->getStatsList();
   std::vector<Statistics*>::iterator i;
   for (i = statsList.begin(); i != statsList.end(); ++i) {
@@ -332,7 +308,7 @@
   return nullptr;
 }
 
-ACE_Recursive_Thread_Mutex& HostStatSampler::getStatListMutex() {
+std::recursive_mutex& HostStatSampler::getStatListMutex() {
   return m_statMngr->getListMutex();
 }
 
@@ -461,13 +437,13 @@
   while (!gotNewFileName) {
     char newfilename[1000] = {0};
     if (i < 10) {
-      ACE_OS::snprintf(newfilename, 1000, "%s%c%s-%d.%s", statsdirname.c_str(),
-                       ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(), i,
-                       extName.c_str());
+      std::snprintf(newfilename, 1000, "%s%c%s-%d.%s", statsdirname.c_str(),
+                    ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(), i,
+                    extName.c_str());
     } else {
-      ACE_OS::snprintf(newfilename, 1000, "%s%c%s-%d.%s", statsdirname.c_str(),
-                       ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(), i,
-                       extName.c_str());
+      std::snprintf(newfilename, 1000, "%s%c%s-%d.%s", statsdirname.c_str(),
+                    ACE_DIRECTORY_SEPARATOR_CHAR, fnameBeforeExt.c_str(), i,
+                    extName.c_str());
     }
     FILE* fp = fopen(newfilename, "r");
 
@@ -503,18 +479,14 @@
 void HostStatSampler::checkListeners() {}
 
 void HostStatSampler::start() {
-  if (!m_running) {
-    m_running = true;
-    this->activate();
+  if (!m_running.exchange(true)) {
+    m_thread = std::thread(&HostStatSampler::svc, this);
   }
 }
 
 void HostStatSampler::stop() {
   m_stopRequested = true;
-  this->wait();
-  // while (m_running) {
-  //  ACE_OS::sleep(100);
-  //}
+  m_thread.join();
 }
 
 bool HostStatSampler::isRunning() { return m_running; }
@@ -557,7 +529,7 @@
             }
           }
         }
-        static int numCPU = ACE_OS::num_processors();
+        static auto numCPU = std::thread::hardware_concurrency();
         auto obj = client::ClientHealthStats::create(
             gets, puts, misses, numListeners, numThreads, cpuTime, numCPU);
         if (clientId.empty()) {
@@ -589,7 +561,7 @@
 }
 
 void HostStatSampler::forceSample() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> samplingGuard(m_samplingLock);
+  std::lock_guard<decltype(m_samplingLock)> guard(m_samplingLock);
 
   if (m_archiver) {
     sampleSpecialStats();
@@ -599,7 +571,7 @@
 }
 
 void HostStatSampler::doSample(std::string& archivefilename) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> samplingGuard(m_samplingLock);
+  std::lock_guard<decltype(m_samplingLock)> guard(m_samplingLock);
 
   sampleSpecialStats();
   checkListeners();
@@ -641,29 +613,19 @@
   globals::g_spaceUsed = 0;
   char fullpath[512] = {0};
   std::string dirname = ACE::dirname(globals::g_statFile.c_str());
-  // struct dirent **resultArray;
-  // int entries_count = ACE_OS::scandir(dirname.c_str(), &resultArray,
-  // selector, comparator);
   ACE_stat statBuf = {};
   ACE_Dirent_Selector sds;
   int status = sds.open(dirname.c_str(), selector, comparator);
   if (status != -1) {
     for (int i = 1; i < sds.length(); i++) {
-      ACE_OS::snprintf(fullpath, 512, "%s%c%s", dirname.c_str(),
-                       ACE_DIRECTORY_SEPARATOR_CHAR, sds[i]->d_name);
+      std::snprintf(fullpath, 512, "%s%c%s", dirname.c_str(),
+                    ACE_DIRECTORY_SEPARATOR_CHAR, sds[i]->d_name);
       ACE_OS::stat(fullpath, &statBuf);
       globals::g_fileInfoPair = std::make_pair(fullpath, statBuf.st_size);
       fileInfo.push_back(globals::g_fileInfoPair);
       globals::g_spaceUsed += fileInfo[i - 1].second;
     }
     globals::g_spaceUsed += m_archiver->bytesWritten();
-    /*for(int i = 0; i < entries_count; i++) {
-    ACE_OS::free ( resultArray[i] );
-    }
-    if (entries_count >= 0) {
-    ACE_OS::free( resultArray );
-    resultArray = nullptr;
-    }*/
     sds.close();
   }
   int fileIndex = 0;
@@ -680,7 +642,7 @@
   }
 }
 
-int32_t HostStatSampler::svc(void) {
+void HostStatSampler::svc(void) {
   client::DistributedSystemImpl::setThreadName(NC_HSS_Thread);
   try {
     initSpecialStats();
@@ -697,7 +659,7 @@
     while (!m_stopRequested) {
       try {
         if (gotexception) {
-          ACE_OS::sleep(1);
+          std::this_thread::sleep_for(std::chrono::seconds(1));
 
           waitTime++;
           if (waitTime < 60) {  // sleep for minute and then try to recreate
@@ -752,7 +714,6 @@
        closeSpecialStats();
    }*/
   m_running = false;
-  return 0;
 }
 }  // namespace statistics
 }  // namespace geode
diff --git a/cppcache/src/statistics/HostStatSampler.hpp b/cppcache/src/statistics/HostStatSampler.hpp
index 0d110f9..3091e91 100644
--- a/cppcache/src/statistics/HostStatSampler.hpp
+++ b/cppcache/src/statistics/HostStatSampler.hpp
@@ -20,12 +20,14 @@
 #ifndef GEODE_STATISTICS_HOSTSTATSAMPLER_H_
 #define GEODE_STATISTICS_HOSTSTATSAMPLER_H_
 
+#include <atomic>
 #include <chrono>
 #include <memory>
+#include <mutex>
 #include <string>
+#include <thread>
 #include <vector>
 
-#include <ace/Recursive_Thread_Mutex.h>
 #include <ace/Task.h>
 
 #include <geode/ExceptionTypes.hpp>
@@ -39,8 +41,6 @@
 #include "StatisticsManager.hpp"
 #include "StatisticsType.hpp"
 
-/** @file
- */
 #ifndef GEMFIRE_MAX_STATS_FILE_LIMIT
 #define GEMFIRE_MAX_STATS_FILE_LIMIT (1024 * 1024 * 1024)
 #endif
@@ -48,6 +48,7 @@
 #ifndef GEMFIRE_MAX_STAT_DISK_LIMIT
 #define GEMFIRE_MAX_STAT_DISK_LIMIT (1024LL * 1024LL * 1024LL * 1024LL)
 #endif
+
 namespace apache {
 namespace geode {
 namespace statistics {
@@ -64,9 +65,7 @@
  * HostStatSampler implements a thread which will monitor, sample and archive
  * statistics. It only has the common functionalities which any sampler needs.
  */
-class APACHE_GEODE_EXPORT HostStatSampler : public ACE_Task_Base,
-                                            private NonCopyable,
-                                            private NonAssignable {
+class HostStatSampler : private NonCopyable, private NonAssignable {
  public:
   /*
    * Constructor:
@@ -122,7 +121,7 @@
   /**
    * Gets list mutex for synchronization
    */
-  ACE_Recursive_Thread_Mutex& getStatListMutex();
+  std::recursive_mutex& getStatListMutex();
   /**
    * Returns a vector of ptrs to all the current statistic resource instances.
    */
@@ -180,7 +179,7 @@
   /**
    * The function executed by the thread
    */
-  int32_t svc(void);
+  void svc(void);
 
   /**
    * Method to know whether the sampling thread is running or not.
@@ -190,12 +189,12 @@
   ~HostStatSampler();
 
  private:
-  ACE_Recursive_Thread_Mutex m_samplingLock;
+  std::recursive_mutex m_samplingLock;
   bool m_adminError;
-  // Related to ACE Thread.
-  bool m_running;
-  bool m_stopRequested;
-  volatile bool m_isStatDiskSpaceEnabled;
+  std::thread m_thread;
+  std::atomic<bool> m_running;
+  std::atomic<bool> m_stopRequested;
+  std::atomic<bool> m_isStatDiskSpaceEnabled;
   std::unique_ptr<StatArchiveWriter> m_archiver;
   StatSamplerStats* m_samplerStats;
   const char* m_durableClientId;
@@ -247,6 +246,7 @@
 
   static const char* NC_HSS_Thread;
 };
+
 }  // namespace statistics
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/statistics/OsStatisticsImpl.cpp b/cppcache/src/statistics/OsStatisticsImpl.cpp
index 90c770b..2afbc22 100644
--- a/cppcache/src/statistics/OsStatisticsImpl.cpp
+++ b/cppcache/src/statistics/OsStatisticsImpl.cpp
@@ -20,7 +20,6 @@
 #include "../util/Log.hpp"
 #include "StatisticDescriptorImpl.hpp"
 #include "StatisticsTypeImpl.hpp"
-#include "ace/OS.h"
 
 namespace apache {
 namespace geode {
@@ -164,7 +163,7 @@
 void OsStatisticsImpl::_setInt(int32_t offset, int32_t value) {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "setInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -175,19 +174,7 @@
 void OsStatisticsImpl::_setLong(int32_t offset, int64_t value) {
   if (offset >= statsType->getLongStatCount()) {
     char s[128] = {'\0'};
-    /* adongre  - Coverity II
-     * CID 29275: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
-    // sprintf(s, "setLong:The id (%d) of the Statistic Descriptor is not valid
-    // ", offset);
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "setLong:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -198,7 +185,7 @@
 void OsStatisticsImpl::_setDouble(int32_t offset, double value) {
   if (offset >= statsType->getDoubleStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128,
         "setDouble:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
@@ -212,7 +199,7 @@
 int32_t OsStatisticsImpl::_getInt(int32_t offset) const {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "getInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -224,7 +211,7 @@
 int64_t OsStatisticsImpl::_getLong(int32_t offset) const {
   if (offset >= statsType->getLongStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "getLong:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -236,7 +223,7 @@
 double OsStatisticsImpl::_getDouble(int32_t offset) const {
   if (offset >= statsType->getDoubleStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128,
         "getDouble:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
@@ -274,7 +261,7 @@
 int32_t OsStatisticsImpl::_incInt(int32_t offset, int32_t delta) {
   if (offset >= statsType->getIntStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "incInt:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -287,20 +274,7 @@
 int64_t OsStatisticsImpl::_incLong(int32_t offset, int64_t delta) {
   if (offset >= statsType->getLongStatCount()) {
     char s[128] = {'\0'};
-    /* adongre  - Coverity II
-     * CID 29274: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
-    // sprintf(s, "incLong:The id (%d) of the Statistic Descriptor is not valid
-    // ", offset);
-
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128, "incLong:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
     throw IllegalArgumentException(s);
@@ -312,7 +286,7 @@
 double OsStatisticsImpl::_incDouble(int32_t offset, double delta) {
   if (offset >= statsType->getDoubleStatCount()) {
     char s[128] = {'\0'};
-    ACE_OS::snprintf(
+    std::snprintf(
         s, 128,
         "incDouble:The id (%d) of the Statistic Descriptor is not valid ",
         offset);
diff --git a/cppcache/src/statistics/PoolStatsSampler.cpp b/cppcache/src/statistics/PoolStatsSampler.cpp
index f205c71..b7d13fe 100644
--- a/cppcache/src/statistics/PoolStatsSampler.cpp
+++ b/cppcache/src/statistics/PoolStatsSampler.cpp
@@ -17,9 +17,7 @@
 
 #include "PoolStatsSampler.hpp"
 
-#include <chrono>
 #include <string>
-#include <thread>
 
 #include "../CacheImpl.hpp"
 #include "../ClientHealthStats.hpp"
@@ -40,18 +38,16 @@
 
 PoolStatsSampler::PoolStatsSampler(milliseconds sampleRate, CacheImpl* cache,
                                    ThinClientPoolDM* distMan)
-    : m_sampleRate(sampleRate),
+    : m_running(false),
+      m_stopRequested(false),
+      m_sampleRate(sampleRate),
+      m_adminRegion(AdminRegion::create(cache, distMan)),
       m_distMan(distMan),
       m_statisticsFactory(
-          cache->getStatisticsManager().getStatisticsFactory()) {
-  m_running = false;
-  m_stopRequested = false;
-  m_adminRegion = AdminRegion::create(cache, distMan);
-}
+          cache->getStatisticsManager().getStatisticsFactory()) {}
 
-int32_t PoolStatsSampler::svc() {
+void PoolStatsSampler::svc() {
   client::DistributedSystemImpl::setThreadName(NC_PSS_Thread);
-  // ACE_Guard < ACE_Recursive_Thread_Mutex > _guard( m_lock );
   while (!m_stopRequested) {
     auto sampleStart = high_resolution_clock::now();
     putStatsInAdminRegion();
@@ -65,21 +61,19 @@
       sleepDuration -= wakeInterval;
     }
   }
-  return 0;
 }
 
 void PoolStatsSampler::start() {
-  if (!m_running) {
-    m_running = true;
-    this->activate();
+  if (!m_running.exchange(true)) {
+    m_thread = std::thread(&PoolStatsSampler::svc, this);
   }
 }
 
 void PoolStatsSampler::stop() {
-  // ACE_Guard < ACE_Recursive_Thread_Mutex > _guard( m_lock );
   m_stopRequested = true;
-  this->wait();
+  m_thread.join();
 }
+
 bool PoolStatsSampler::isRunning() { return m_running; }
 
 void PoolStatsSampler::putStatsInAdminRegion() {
@@ -106,7 +100,7 @@
           }
         }
       }
-      static int numCPU = ACE_OS::num_processors();
+      static auto numCPU = std::thread::hardware_concurrency();
       auto obj = client::ClientHealthStats::create(
           gets, puts, misses, numListeners, numThreads, cpuTime, numCPU);
       const auto memId = m_distMan->getMembershipId();
diff --git a/cppcache/src/statistics/PoolStatsSampler.hpp b/cppcache/src/statistics/PoolStatsSampler.hpp
index c04505b..687c47d 100644
--- a/cppcache/src/statistics/PoolStatsSampler.hpp
+++ b/cppcache/src/statistics/PoolStatsSampler.hpp
@@ -20,12 +20,13 @@
 #ifndef GEODE_STATISTICS_POOLSTATSSAMPLER_H_
 #define GEODE_STATISTICS_POOLSTATSSAMPLER_H_
 
-#include <ace/Task.h>
+#include <atomic>
+#include <chrono>
+#include <memory>
+#include <thread>
 
 #include <geode/internal/geode_globals.hpp>
 
-#include "GeodeStatisticsFactory.hpp"
-
 namespace apache {
 namespace geode {
 
@@ -45,29 +46,30 @@
 using client::ThinClientPoolDM;
 
 class StatisticsManager;
+class GeodeStatisticsFactory;
 
-class APACHE_GEODE_EXPORT PoolStatsSampler : public ACE_Task_Base {
+class PoolStatsSampler {
  public:
   PoolStatsSampler() = delete;
   PoolStatsSampler(std::chrono::milliseconds sampleRate, CacheImpl* cache,
                    ThinClientPoolDM* distMan);
   PoolStatsSampler& operator=(const PoolStatsSampler&) = delete;
   PoolStatsSampler(const PoolStatsSampler& PoolStatsSampler) = delete;
-  ~PoolStatsSampler() noexcept override {}
+  ~PoolStatsSampler() noexcept {}
 
   void start();
   void stop();
-  int32_t svc(void) override;
+  void svc(void);
   bool isRunning();
 
  private:
   void putStatsInAdminRegion();
-  volatile bool m_running;
-  volatile bool m_stopRequested;
+  std::thread m_thread;
+  std::atomic<bool> m_running;
+  std::atomic<bool> m_stopRequested;
   std::chrono::milliseconds m_sampleRate;
   std::shared_ptr<AdminRegion> m_adminRegion;
   ThinClientPoolDM* m_distMan;
-  ACE_Recursive_Thread_Mutex m_lock;
   static const char* NC_PSS_Thread;
   GeodeStatisticsFactory* m_statisticsFactory;
 };
diff --git a/cppcache/src/statistics/StatArchiveWriter.cpp b/cppcache/src/statistics/StatArchiveWriter.cpp
index 1369871..a216c06 100644
--- a/cppcache/src/statistics/StatArchiveWriter.cpp
+++ b/cppcache/src/statistics/StatArchiveWriter.cpp
@@ -17,6 +17,9 @@
 
 #include "StatArchiveWriter.hpp"
 
+#include <chrono>
+#include <ctime>
+
 #include <ace/ACE.h>
 #include <ace/OS_NS_sys_time.h>
 #include <ace/OS_NS_sys_utsname.h>
@@ -27,7 +30,9 @@
 #include <geode/internal/geode_globals.hpp>
 
 #include "../CacheImpl.hpp"
+#include "../util/chrono/time_point.hpp"
 #include "GeodeStatisticsFactory.hpp"
+#include "HostStatSampler.hpp"
 
 namespace apache {
 namespace geode {
@@ -347,11 +352,10 @@
   tzOffset = tzOffset * -1 * 1000;
   this->dataBuffer->writeInt(tzOffset);
 
-  struct tm *tm_val;
-  time_t clock = ACE_OS::time();
-  tm_val = ACE_OS::localtime(&clock);
+  auto now = std::chrono::system_clock::now();
+  auto tm_val = apache::geode::util::chrono::localtime(now);
   char buf[512] = {0};
-  ACE_OS::strftime(buf, sizeof(buf), "%Z", tm_val);
+  std::strftime(buf, sizeof(buf), "%Z", &tm_val);
   std::string tzId(buf);
   this->dataBuffer->writeUTF(tzId);
 
@@ -396,7 +400,8 @@
 int64_t StatArchiveWriter::getSampleSize() { return m_samplesize; }
 
 void StatArchiveWriter::sample(const steady_clock::time_point &timeStamp) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(sampler->getStatListMutex());
+  std::lock_guard<decltype(sampler->getStatListMutex())> guard(
+      sampler->getStatListMutex());
   m_samplesize = dataBuffer->getBytesWritten();
 
   sampleResources();
@@ -502,7 +507,8 @@
 }
 
 void StatArchiveWriter::resampleResources() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(sampler->getStatListMutex());
+  std::lock_guard<decltype(sampler->getStatListMutex())> guard(
+      sampler->getStatListMutex());
   std::vector<Statistics *> &statsList = sampler->getStatistics();
   std::vector<Statistics *>::iterator statlistIter = statsList.begin();
   while (statlistIter != statsList.end()) {
diff --git a/cppcache/src/statistics/StatArchiveWriter.hpp b/cppcache/src/statistics/StatArchiveWriter.hpp
index 3055fb0..4f8c2a3 100644
--- a/cppcache/src/statistics/StatArchiveWriter.hpp
+++ b/cppcache/src/statistics/StatArchiveWriter.hpp
@@ -32,7 +32,6 @@
 #include "../NonCopyable.hpp"
 #include "../SerializationRegistry.hpp"
 #include "../util/Log.hpp"
-#include "HostStatSampler.hpp"
 #include "StatisticDescriptor.hpp"
 #include "StatisticDescriptorImpl.hpp"
 #include "Statistics.hpp"
@@ -65,6 +64,8 @@
 namespace geode {
 namespace statistics {
 
+class HostStatSampler;
+
 using apache::geode::client::CacheImpl;
 using apache::geode::client::DataOutput;
 using apache::geode::client::NonAssignable;
diff --git a/cppcache/src/statistics/StatisticsManager.cpp b/cppcache/src/statistics/StatisticsManager.cpp
index 06a7cc2..1f07ed1 100644
--- a/cppcache/src/statistics/StatisticsManager.cpp
+++ b/cppcache/src/statistics/StatisticsManager.cpp
@@ -19,17 +19,13 @@
 
 #include <string>
 
-#include <ace/Guard_T.h>
-#include <ace/OS.h>
-#include <ace/Thread_Mutex.h>
-#include <ace/Time_Value.h>
-
 #include <geode/Exception.hpp>
 #include <geode/internal/geode_globals.hpp>
 
 #include "../util/Log.hpp"
 #include "AtomicStatisticsImpl.hpp"
 #include "GeodeStatisticsFactory.hpp"
+#include "HostStatSampler.hpp"
 #include "OsStatisticsImpl.hpp"
 
 namespace apache {
@@ -51,13 +47,14 @@
       std::unique_ptr<GeodeStatisticsFactory>(new GeodeStatisticsFactory(this));
 
   try {
-    if (m_sampler == nullptr && enabled) {
-      m_sampler = new HostStatSampler(filePath, m_sampleIntervalMs, this, cache,
-                                      statFileLimit, statDiskSpaceLimit);
+    if (enabled) {
+      m_sampler = std::unique_ptr<HostStatSampler>(
+          new HostStatSampler(filePath, m_sampleIntervalMs, this, cache,
+                              statFileLimit, statDiskSpaceLimit));
       m_sampler->start();
     }
   } catch (...) {
-    delete m_sampler;
+    m_sampler = nullptr;
     throw;
   }
 }
@@ -73,7 +70,7 @@
 
     // List should be empty if close() is called on each Stats object
     // If this is not done, delete all the pointers
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+    std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
     int32_t count = static_cast<int32_t>(m_statsList.size());
     if (count > 0) {
       LOGFINEST("~StatisticsManager has found %d leftover statistics:", count);
@@ -109,21 +106,20 @@
   }
 }
 
-ACE_Recursive_Thread_Mutex& StatisticsManager::getListMutex() {
+std::recursive_mutex& StatisticsManager::getListMutex() {
   return m_statsListLock;
 }
 
 void StatisticsManager::closeSampler() {
-  if (m_sampler != nullptr) {
+  if (m_sampler) {
     m_sampler->stop();
-    delete m_sampler;
     m_sampler = nullptr;
   }
 }
 
 void StatisticsManager::addStatisticsToList(Statistics* stat) {
   if (stat) {
-    ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+    std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
     m_statsList.push_back(stat);
 
     /* Add to m_newlyAddedStatsList also so that a fresh traversal not needed
@@ -135,7 +131,7 @@
 }
 
 int32_t StatisticsManager::getStatListModCount() {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
   return static_cast<int32_t>(m_statsList.size());
 }
 
@@ -149,7 +145,7 @@
 
 Statistics* StatisticsManager::findFirstStatisticsByType(
     const StatisticsType* type) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
   std::vector<Statistics*>::iterator start = m_statsList.begin();
   while (start != m_statsList.end()) {
     if (!((*start)->isClosed()) && ((*start)->getType() == type)) {
@@ -164,7 +160,7 @@
     StatisticsType* type) {
   std::vector<Statistics*> hits;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
 
   std::vector<Statistics*>::iterator start = m_statsList.begin();
   while (start != m_statsList.end()) {
@@ -180,7 +176,7 @@
     char* textId) {
   std::vector<Statistics*> hits;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
 
   std::vector<Statistics*>::iterator start = m_statsList.begin();
   while (start != m_statsList.end()) {
@@ -196,7 +192,7 @@
     int64_t numericId) {
   std::vector<Statistics*> hits;
 
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
 
   std::vector<Statistics*>::iterator start = m_statsList.begin();
   while (start != m_statsList.end()) {
@@ -209,7 +205,7 @@
 }
 
 Statistics* StatisticsManager::findStatisticsByUniqueId(int64_t uniqueId) {
-  ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_statsListLock);
+  std::lock_guard<decltype(m_statsListLock)> guard(m_statsListLock);
 
   std::vector<Statistics*>::iterator start = m_statsList.begin();
   while (start != m_statsList.end()) {
diff --git a/cppcache/src/statistics/StatisticsManager.hpp b/cppcache/src/statistics/StatisticsManager.hpp
index 84ccd99..b91968d 100644
--- a/cppcache/src/statistics/StatisticsManager.hpp
+++ b/cppcache/src/statistics/StatisticsManager.hpp
@@ -21,6 +21,7 @@
 #define GEODE_STATISTICS_STATISTICSMANAGER_H_
 
 #include <memory>
+#include <mutex>
 #include <vector>
 
 #include <geode/ExceptionTypes.hpp>
@@ -28,7 +29,6 @@
 
 #include "../AdminRegion.hpp"
 #include "GeodeStatisticsFactory.hpp"
-#include "HostStatSampler.hpp"
 #include "Statistics.hpp"
 #include "StatisticsTypeImpl.hpp"
 
@@ -39,6 +39,7 @@
 using apache::geode::client::AdminRegion;
 
 class GeodeStatisticsFactory;
+class HostStatSampler;
 
 /**
  * Head Application Manager for Statistics Module.
@@ -50,7 +51,7 @@
   std::chrono::milliseconds m_sampleIntervalMs;
 
   // Statistics sampler
-  HostStatSampler* m_sampler;
+  std::unique_ptr<HostStatSampler> m_sampler;
 
   // Vector containing all the Stats objects
   std::vector<Statistics*> m_statsList;
@@ -59,7 +60,7 @@
   std::vector<Statistics*> m_newlyAddedStatsList;
 
   // Mutex to lock the list of Stats
-  ACE_Recursive_Thread_Mutex m_statsListLock;
+  std::recursive_mutex m_statsListLock;
 
   std::shared_ptr<AdminRegion> m_adminRegion;
 
@@ -91,7 +92,7 @@
 
   std::vector<Statistics*>& getNewlyAddedStatsList();
 
-  ACE_Recursive_Thread_Mutex& getListMutex();
+  std::recursive_mutex& getListMutex();
 
   /** Return the first instance that matches the type, or nullptr */
   Statistics* findFirstStatisticsByType(const StatisticsType* type);
diff --git a/cppcache/src/statistics/StatisticsTypeImpl.cpp b/cppcache/src/statistics/StatisticsTypeImpl.cpp
index 0a65577..200cdde 100644
--- a/cppcache/src/statistics/StatisticsTypeImpl.cpp
+++ b/cppcache/src/statistics/StatisticsTypeImpl.cpp
@@ -19,8 +19,6 @@
 
 #include <string>
 
-#include <ace/OS.h>
-
 #include "../util/Log.hpp"
 #include "StatisticDescriptorImpl.hpp"
 
@@ -44,15 +42,10 @@
     throw NullPointerException(s);
   }
   if (statsLengthArg > MAX_DESCRIPTORS_PER_TYPE) {
-    char buffer[100];
-    ACE_OS::snprintf(buffer, 100, "%d", statsLengthArg);
-    std::string temp(buffer);
-    std::string s = "The requested descriptor count " + temp +
-                    " exceeds the maximum which is ";
-    ACE_OS::snprintf(buffer, 100, "%d", MAX_DESCRIPTORS_PER_TYPE);
-    std::string buf(buffer);
-    s += buf + ".";
-    throw IllegalArgumentException(s.c_str());
+    throw IllegalArgumentException(
+        "The requested descriptor count " + std::to_string(statsLengthArg) +
+        " exceeds the maximum which is " +
+        std::to_string(MAX_DESCRIPTORS_PER_TYPE) + ".");
   }
   this->name = nameArg;
   this->description = descriptionArg;
@@ -65,14 +58,6 @@
     // Concrete class required to set the ids only.
     StatisticDescriptorImpl* sd =
         dynamic_cast<StatisticDescriptorImpl*>(stats[i]);
-    /* adongre
-     * CID 28694: Dereference after null check (FORWARD_NULL)Comparing "sd" to
-     * null implies that "sd" might be null.
-     *
-     * FIX : Do not check null from the dynamic_cast
-     *       catch the exception thrown by the dynamic_cast
-     */
-
     if (sd != nullptr) {
       if (sd->getTypeCode() == INT_TYPE) {
         sd->setId(intCount);
@@ -87,9 +72,8 @@
       std::string str = stats[i]->getName();
       StatisticsDescMap::iterator iterFind = statsDescMap.find(str);
       if (iterFind != statsDescMap.end()) {
-        std::string s = "Duplicate StatisticDescriptor named ";
-        s += sd->getName();
-        throw IllegalArgumentException(s.c_str());
+        throw IllegalArgumentException("Duplicate StatisticDescriptor named " +
+                                       sd->getName());
       } else {
         // statsDescMap.insert(make_pair(stats[i]->getName(), stats[i]));
         statsDescMap.insert(
@@ -111,10 +95,8 @@
     }
     // same pointers are also stored in this map.
     // So, Set the pointers to null.
-    StatisticsDescMap::iterator iterFind = statsDescMap.begin();
-    while (iterFind != statsDescMap.end()) {
-      (*iterFind).second = nullptr;
-      iterFind++;
+    for (auto& it : statsDescMap) {
+      it.second = nullptr;
     }
   } catch (...) {
   }
@@ -141,7 +123,7 @@
     std::string s = "There is no statistic named " + nameArg +
                     " in this statistics instance ";
     LOGWARN("StatisticsTypeImpl::nameToDescriptor %s", s.c_str());
-    throw IllegalArgumentException(s.c_str());
+    throw IllegalArgumentException(s);
   } else {
     return iterFind->second;
   }
diff --git a/cppcache/src/util/Log.hpp b/cppcache/src/util/Log.hpp
index 7c80fcd..740a13d 100644
--- a/cppcache/src/util/Log.hpp
+++ b/cppcache/src/util/Log.hpp
@@ -157,13 +157,6 @@
   static void setLogLevel(LogLevel level) { s_logLevel = level; }
 
   /**
-   * @return the name of the current log file.
-   * NOTE: This function is for debugging only, as it is not completely
-   * thread-safe!
-   */
-  static const char* logFileName();
-
-  /**
    * Initializes logging facility with given level and filenames.
    * This method is called automatically within @ref DistributedSystem::connect
    * with the log-file, log-level, and log-file-size system properties used as
@@ -260,6 +253,10 @@
     if (errorEnabled()) put(LogLevel::Error, msg);
   }
 
+  static void error(const std::string& msg) {
+    if (errorEnabled()) put(LogLevel::Error, msg.c_str());
+  }
+
   /**
    * Logs both a message and thrown exception.
    * The message level is "error".
diff --git a/cppcache/src/util/chrono/time_point.hpp b/cppcache/src/util/chrono/time_point.hpp
new file mode 100644
index 0000000..5614598
--- /dev/null
+++ b/cppcache/src/util/chrono/time_point.hpp
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#ifndef GEODE_UTIL_CHRONO_TIME_POINT_H_
+#define GEODE_UTIL_CHRONO_TIME_POINT_H_
+
+#include <iomanip>
+#include <sstream>
+
+#include "time_point.hpp"
+
+namespace apache {
+namespace geode {
+namespace util {
+namespace chrono {
+
+/**
+ * Wrapper around platform specific thread safe localtime functions.
+ * @param time to get local time for
+ * @return local time
+ */
+inline std::tm localtime(const time_t& time) {
+  std::tm localtime;
+#if defined(_WIN32)
+  localtime_s(&localtime, &time);
+#else
+  localtime_r(&time, &localtime);
+#endif
+  return localtime;
+}
+
+/**
+ * Wrapper around platform specific thread safe localtime functions.
+ * @param time to get local time for
+ * @return local time
+ */
+inline std::tm localtime(
+    const std::chrono::system_clock::time_point& time_point) {
+  return localtime(std::chrono::system_clock::to_time_t(time_point));
+}
+
+/**
+ * Produces string representation for given time.
+ * @param time to get string for
+ * @return string representation of given time
+ */
+inline std::string to_string(const time_t& time) {
+  std::stringstream stringstream;
+  const auto local = localtime(time);
+
+#if defined(_WIN32)
+  /*
+  Windows does not allow for time_t to be negative (in the past). Any negative
+  time_t will result in a tm with negative values. Converting this to a string
+  will result in an assertion failure. The original string converstion would
+  then result in something like -1/-1/1998. Rather than return a formatted but
+  invalid time we should return a string indicating and invalid time failed to
+  convert.
+
+  TODO: replace with C++20 std::chrono::format or other date library
+  */
+  if (-1 == local.tm_hour) {
+    return "invalid time";
+  }
+#endif
+
+  stringstream << std::put_time(&local, "%c %Z");
+  return stringstream.str();
+}
+
+/**
+ * Produces string representation for given time_point.
+ * @param time_point to get string for
+ * @return string representation of given time_point
+ */
+inline std::string to_string(
+    const std::chrono::system_clock::time_point& time_point) {
+  return to_string(std::chrono::system_clock::to_time_t(time_point));
+}
+
+}  // namespace chrono
+}  // namespace util
+}  // namespace geode
+}  // namespace apache
+
+#endif /* GEODE_UTIL_CHRONO_TIME_POINT_H_ */
diff --git a/cppcache/src/util/queue.hpp b/cppcache/src/util/queue.hpp
new file mode 100644
index 0000000..3e0092a
--- /dev/null
+++ b/cppcache/src/util/queue.hpp
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#ifndef NATIVECLIENT_UTIL_QUEUE_H
+#define NATIVECLIENT_UTIL_QUEUE_H
+
+namespace apache {
+namespace geode {
+namespace client {
+namespace queue {
+
+/**
+ * Coalesce the contents of a Queue structure based on the given value. Will
+ * remove all values at the front of the queue that equal value.
+ *
+ * @tparam Queue type to coalesce
+ * @tparam Type of value to coalesce
+ * @param queue to coalesce
+ * @param value to coalesce
+ */
+template <class Queue, class Type>
+inline void coalesce(Queue& queue, const Type& value) {
+  while (!queue.empty()) {
+    const auto& next = queue.front();
+    if (next == value) {
+      queue.pop_front();
+    } else {
+      break;
+    }
+  }
+}
+
+}  // namespace queue
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
+
+#endif  // NATIVECLIENT_UTIL_QUEUE_H
diff --git a/cppcache/src/util/string.hpp b/cppcache/src/util/string.hpp
index 76869cc..f0b8d12 100644
--- a/cppcache/src/util/string.hpp
+++ b/cppcache/src/util/string.hpp
@@ -20,6 +20,7 @@
 #ifndef GEODE_UTIL_STRING_H_
 #define GEODE_UTIL_STRING_H_
 
+#include <cctype>
 #include <codecvt>
 #include <locale>
 #include <string>
@@ -41,7 +42,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto int16String =
       std::wstring_convert<std::codecvt_utf8_utf16<int16_t>, int16_t>{}
@@ -58,7 +59,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto data = reinterpret_cast<const int32_t*>(ucs4.data());
   auto bytes =
@@ -82,7 +83,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto data = reinterpret_cast<const int32_t*>(ucs4);
   auto bytes =
@@ -106,7 +107,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto data = reinterpret_cast<const char*>(utf16.data());
   auto tmp =
@@ -129,7 +130,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto data = reinterpret_cast<const int16_t*>(utf16.data());
   return std::wstring_convert<std::codecvt_utf8_utf16<int16_t>, int16_t>{}
@@ -144,7 +145,7 @@
 #if defined(_MSC_VER) && _MSC_VER >= 1900
   /*
    * Workaround for missing std:codecvt identifier.
-   * https://connect.microsoft.com/VisualStudio/feedback/details/1403302
+   * https://stackoverflow.com/questions/32055357/visual-studio-c-2015-stdcodecvt-with-char16-t-or-char32-t
    */
   auto data = reinterpret_cast<const int32_t*>(ucs4.data());
   return std::wstring_convert<std::codecvt_utf8<int32_t>, int32_t>{}.to_bytes(
@@ -155,6 +156,16 @@
 #endif
 }
 
+inline bool equal_ignore_case(const std::string& str1,
+                              const std::string& str2) {
+  return ((str1.size() == str2.size()) &&
+          std::equal(str1.begin(), str1.end(), str2.begin(),
+                     [](const char& c1, const char& c2) {
+                       return (c1 == c2 ||
+                               std::toupper(c1) == std::toupper(c2));
+                     }));
+}
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/util/synchronized_map.hpp b/cppcache/src/util/synchronized_map.hpp
new file mode 100644
index 0000000..c3677e9
--- /dev/null
+++ b/cppcache/src/util/synchronized_map.hpp
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#ifndef GEODE_UTIL_SYNCHRONIZED_MAP_H_
+#define GEODE_UTIL_SYNCHRONIZED_MAP_H_
+
+#include <mutex>
+#include <utility>
+
+namespace apache {
+namespace geode {
+namespace client {
+
+/**
+ * Wrapper around std::map, std::unordered_map and other map like
+ * implementations.
+ *
+ * This is a very incomplete implementation. Add methods as needed.
+ *
+ * @tparam Map type to wrap.
+ * @tparam Mutex type to synchronize with. Defaults to std::recursive_mutex
+ */
+template <class Map, class Mutex = std::recursive_mutex>
+class synchronized_map {
+ private:
+  Map map_;
+  mutable Mutex mutex_;
+
+ public:
+  typedef Mutex mutex_type;
+  typedef Map map_type;
+  typedef typename Map::key_type key_type;
+  typedef typename Map::mapped_type mapped_type;
+  typedef typename Map::allocator_type allocator_type;
+  typedef typename Map::value_type value_type;
+  typedef typename Map::reference reference;
+  typedef typename Map::const_reference const_reference;
+  typedef typename Map::iterator iterator;
+  typedef typename Map::const_iterator const_iterator;
+  typedef typename Map::difference_type difference_type;
+  typedef typename Map::size_type size_type;
+
+  inline mutex_type& mutex() const noexcept { return mutex_; }
+
+  inline map_type& map() noexcept { return map_; }
+  inline const map_type& map() const noexcept { return map_; }
+
+  /**
+   * Allocates a Lock object around the Mutex and locks the Mutex.
+   *
+   * Example:
+   * \code{.cpp}
+   * auto&& guard = exampleMap.make_lock();
+   * \endcode
+   *
+   * Equivalent to:
+   * \code{.cpp}
+   * std::lock_guard<decltype(exampleMap)::mutex_type> guard(exampleMap.mutex);
+   * \endcode
+   *
+   * @tparam Lock type to allocate. Defaults to std::lock_guard.
+   * @return allocated Lock object with lock taken.
+   * @throws Any exception throws by Mutex::lock()
+   */
+  template <template <class...> class Lock = std::lock_guard>
+  inline Lock<Mutex> make_lock() const {
+    mutex_.lock();
+    return {mutex_, std::adopt_lock};
+  }
+
+  /**
+   * Allocates a Lock object around the Mutex passing any args to the Lock
+   * constructor.
+   *
+   * Example:
+   * \code{.cpp}
+   * auto&& guard = exampleMap.make_lock<std::unique_lock>(std::defer_lock);
+   * \endcode
+   *
+   * Equivalent to:
+   * \code{.cpp}
+   * std::unique_lock<decltype(exampleMap)::mutex_type> guard(exampleMap.mutex,
+   * std::defer_lock); \endcode
+   *
+   * @tparam Lock type to allocate. Defaults to std::lock_guard.
+   * @tparam Args types passed to Lock constructor.
+   * @param args values passed to Lock constructor.
+   * @return allocated Lock object.
+   * @throws Any exception throws by Lock constructors.
+   */
+  template <template <class...> class Lock = std::lock_guard, class... Args>
+  inline Lock<Mutex> make_lock(Args&&... args) const {
+    return {mutex_, std::forward<Args>(args)...};
+  }
+
+  template <class... Args>
+  inline std::pair<typename Map::iterator, bool> emplace(Args&&... args) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return map_.emplace(std::forward<Args>(args)...);
+  }
+
+  inline size_type erase(const key_type& key) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return map_.erase(key);
+  }
+
+  inline bool empty() const noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    return map_.empty();
+  }
+
+  inline size_type size() const noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    return map_.size();
+  }
+
+  inline void clear() noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    map_.clear();
+  }
+
+  inline iterator find(const key_type& key) {
+    //    std::lock_guard<Mutex> lock(mutex_);
+    return map_.find(key);
+  }
+
+  inline const_iterator find(const key_type& key) const {
+    //    std::lock_guard<Mutex> lock(mutex_);
+    return map_.find(key);
+  }
+
+  inline iterator begin() noexcept { return map_.begin(); }
+  inline iterator end() noexcept { return map_.end(); }
+  inline const_iterator begin() const noexcept { return map_.begin(); }
+  inline const_iterator end() const noexcept { return map_.end(); }
+  inline const_iterator cbegin() const noexcept { return map_.begin(); }
+  inline const_iterator cend() const noexcept { return map_.end(); }
+
+  template <class InputIterator>
+  inline void insert(InputIterator first, InputIterator last) {
+    std::lock_guard<Mutex> lock(mutex_);
+    map_.insert(first, last);
+  }
+};
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
+
+#endif  // GEODE_UTIL_SYNCHRONIZED_MAP_H_
diff --git a/cppcache/src/util/synchronized_set.hpp b/cppcache/src/util/synchronized_set.hpp
new file mode 100644
index 0000000..4029fb0
--- /dev/null
+++ b/cppcache/src/util/synchronized_set.hpp
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#ifndef GEODE_UTIL_SYNCHRONIZED_SET_H_
+#define GEODE_UTIL_SYNCHRONIZED_SET_H_
+
+#include <mutex>
+#include <utility>
+
+namespace apache {
+namespace geode {
+namespace client {
+
+/**
+ * Wrapper around std::set, std::unordered_set and other set like
+ * implementations.
+ *
+ * This is a very incomplete implementation. Add methods as needed.
+ *
+ * @tparam Set type to wrap.
+ * @tparam Mutex type to synchronize with. Defaults to std::recursive_mutex
+ */
+template <class Set, class Mutex = std::recursive_mutex>
+class synchronized_set {
+ private:
+  Set set_;
+  mutable Mutex mutex_;
+
+ public:
+  typedef Mutex mutex_type;
+  typedef Set set_type;
+  typedef typename Set::key_type key_type;
+  typedef typename Set::allocator_type allocator_type;
+  typedef typename Set::value_type value_type;
+  typedef typename Set::reference reference;
+  typedef typename Set::const_reference const_reference;
+  typedef typename Set::iterator iterator;
+  typedef typename Set::const_iterator const_iterator;
+  typedef typename Set::difference_type difference_type;
+  typedef typename Set::size_type size_type;
+
+  inline mutex_type& mutex() const noexcept { return mutex_; }
+
+  inline set_type& set() noexcept { return set_; }
+  inline const set_type& set() const noexcept { return set_; }
+
+  /**
+   * Allocates a Lock object around the Mutex and locks the Mutex.
+   *
+   * Example:
+   * \code{.cpp}
+   * auto&& guard = exampleSet.make_lock();
+   * \endcode
+   *
+   * Equivalent to:
+   * \code{.cpp}
+   * std::lock_guard<decltype(exampleSet)::mutex_type> guard(exampleSet.mutex);
+   * \endcode
+   *
+   * @tparam Lock type to allocate. Defaults to std::lock_guard.
+   * @return allocated Lock object with lock taken.
+   * @throws Any exception throws by Mutex::lock()
+   */
+  template <template <class...> class Lock = std::lock_guard>
+  inline Lock<Mutex> make_lock() const {
+    mutex_.lock();
+    return {mutex_, std::adopt_lock};
+  }
+
+  /**
+   * Allocates a Lock object around the Mutex passing any args to the Lock
+   * constructor.
+   *
+   * Example:
+   * \code{.cpp}
+   * auto&& guard = exampleSet.make_lock<std::unique_lock>(std::defer_lock);
+   * \endcode
+   *
+   * Equivalent to:
+   * \code{.cpp}
+   * std::unique_lock<decltype(exampleSet)::mutex_type> guard(exampleSet.mutex,
+   * std::defer_lock); \endcode
+   *
+   * @tparam Lock type to allocate. Defaults to std::lock_guard.
+   * @tparam Args types passed to Lock constructor.
+   * @param args values passed to Lock constructor.
+   * @return allocated Lock object.
+   * @throws Any exception throws by Lock constructors.
+   */
+  template <template <class...> class Lock = std::lock_guard, class... Args>
+  inline Lock<Mutex> make_lock(Args&&... args) const {
+    return {mutex_, std::forward<Args>(args)...};
+  }
+
+  template <class... Args>
+  inline std::pair<typename Set::iterator, bool> emplace(Args&&... args) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.emplace(std::forward<Args>(args)...);
+  }
+
+  inline size_type erase(const key_type& key) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.erase(key);
+  }
+
+  inline bool empty() const noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.empty();
+  }
+
+  inline size_type size() const noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.size();
+  }
+
+  inline void clear() noexcept {
+    std::lock_guard<Mutex> lock(mutex_);
+    set_.clear();
+  }
+
+  inline iterator find(const key_type& key) {
+    //    std::lock_guard<Mutex> lock(mutex_);
+    return set_.find(key);
+  }
+
+  inline const_iterator find(const key_type& key) const {
+    //    std::lock_guard<Mutex> lock(mutex_);
+    return set_.find(key);
+  }
+
+  inline iterator begin() noexcept { return set_.begin(); }
+  inline iterator end() noexcept { return set_.end(); }
+  inline const_iterator begin() const noexcept { return set_.begin(); }
+  inline const_iterator end() const noexcept { return set_.end(); }
+  inline const_iterator cbegin() const noexcept { return set_.begin(); }
+  inline const_iterator cend() const noexcept { return set_.end(); }
+
+  template <class InputIterator>
+  inline void insert(InputIterator first, InputIterator last) {
+    std::lock_guard<Mutex> lock(mutex_);
+    set_.insert(first, last);
+  }
+
+  inline std::pair<iterator, bool> insert(value_type&& value) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.insert(std::move(value));
+  }
+
+  inline std::pair<iterator, bool> insert(const value_type& value) {
+    std::lock_guard<Mutex> lock(mutex_);
+    return set_.insert(value);
+  }
+};
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
+
+#endif  // GEODE_UTIL_SYNCHRONIZED_SET_H_
diff --git a/cppcache/static/CMakeLists.txt b/cppcache/static/CMakeLists.txt
index b387871..9b8d663 100644
--- a/cppcache/static/CMakeLists.txt
+++ b/cppcache/static/CMakeLists.txt
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.4)
 project(apache-geode-static LANGUAGES CXX)
 
 add_library(apache-geode-static STATIC ${SOURCES_ALL})
@@ -33,6 +32,19 @@
 
 add_dependencies(client-libraries apache-geode-static)
 
+set_target_properties(apache-geode-static PROPERTIES
+  FOLDER cpp
+)
+
+if (MSVC)
+  cmake_minimum_required(VERSION 3.13)
+  set_target_properties(apache-geode-static PROPERTIES
+    INTERPROCEDURAL_OPTIMIZATION_RELEASE FALSE
+    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO FALSE
+  )
+endif()
+
+set_target_properties(apache-geode-static PROPERTIES INTERPROCEDURAL_OPTIMIZATION FALSE)
 
 # BEGIN Visual Studio organization
 source_group("Header Files" REGULAR_EXPRESSION "\.(hpp|inl)$")
@@ -50,7 +62,6 @@
   endif()
 
   set_target_properties(apache-geode-static PROPERTIES
-    FOLDER cpp
     COTIRE_ENABLE_PRECOMPILED_HEADER TRUE
     COTIRE_ADD_UNITY_BUILD TRUE
     COTIRE_PREFIX_HEADER_IGNORE_PATH "${_COTIRE_PREFIX_HEADER_IGNORE_PATH}"
@@ -59,9 +70,6 @@
   set_source_files_properties(cppcache/version.h PROPERTIES GENERATED TRUE)
 
   cotire(apache-geode-static)
-else()
-  set_target_properties(apache-geode-static PROPERTIES
-    FOLDER cpp)
 endif()
 
 add_clangformat(apache-geode-static)
diff --git a/cppcache/test/CMakeLists.txt b/cppcache/test/CMakeLists.txt
index 9cb1e22..e9c2c9e 100644
--- a/cppcache/test/CMakeLists.txt
+++ b/cppcache/test/CMakeLists.txt
@@ -16,8 +16,6 @@
 cmake_minimum_required( VERSION 3.10 )
 project(apache-geode_unittests LANGUAGES CXX)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
-
 add_executable(apache-geode_unittests
   AutoDeleteTest.cpp
   ByteArray.cpp
@@ -42,8 +40,16 @@
   RegionAttributesFactoryTest.cpp
   SerializableCreateTests.cpp
   StructSetTest.cpp
-  TcrMessage_unittest.cpp
-)
+  TcrMessageTest.cpp
+  CacheableDateTest.cpp
+  util/synchronized_mapTest.cpp
+  util/synchronized_setTest.cpp
+  util/JavaModifiedUtf8Tests.cpp
+  util/functionalTests.cpp
+  util/chrono/durationTest.cpp
+  LocalRegionTest.cpp
+  util/queueTest.cpp
+  ThreadPoolTest.cpp)
 
 target_compile_definitions(apache-geode_unittests
   PUBLIC
@@ -57,9 +63,10 @@
 target_link_libraries(apache-geode_unittests
   PRIVATE
     apache-geode-static
-    GTest::GTest
-    GTest::Main
+    GTest::gtest
+    GTest::gtest_main
     Boost::boost
+    Boost::thread
     _WarningsAsError
     _CppCodeCoverage
 )
diff --git a/cppcache/test/CacheableDateTest.cpp b/cppcache/test/CacheableDateTest.cpp
new file mode 100644
index 0000000..a22774e
--- /dev/null
+++ b/cppcache/test/CacheableDateTest.cpp
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <chrono>
+#include <ctime>
+#include <iomanip>
+#include <sstream>
+
+#include <gtest/gtest.h>
+
+#include <geode/CacheableDate.hpp>
+
+using apache::geode::client::CacheableDate;
+
+TEST(CacheableDateTest, constructFrom_time_t_WithDefault) {
+  const CacheableDate cacheableDate;
+
+  EXPECT_EQ(0, cacheableDate.milliseconds());
+  EXPECT_EQ(0, static_cast<time_t>(cacheableDate));
+}
+
+TEST(CacheableDateTest, constructFrom_time_t) {
+  time_t time = 0;
+  std::time(&time);
+  CacheableDate cacheableDate(time);
+
+  EXPECT_EQ(time * 1000, cacheableDate.milliseconds());
+  EXPECT_EQ(time, static_cast<time_t>(cacheableDate));
+}
+
+TEST(CacheableDateTest, constructFrom_time_point) {
+  const auto timePoint = CacheableDate::clock::now();
+  const CacheableDate cacheableDate(timePoint);
+
+  const auto millisecondsSinceEpoch =
+      std::chrono::duration_cast<std::chrono::milliseconds>(
+          timePoint.time_since_epoch());
+  EXPECT_EQ(millisecondsSinceEpoch.count(), cacheableDate.milliseconds());
+  EXPECT_EQ(
+      millisecondsSinceEpoch,
+      static_cast<CacheableDate::time_point>(cacheableDate).time_since_epoch());
+
+  const auto duration = static_cast<CacheableDate::duration>(cacheableDate);
+  EXPECT_EQ(millisecondsSinceEpoch, duration);
+
+  const auto time = CacheableDate::clock::to_time_t(timePoint);
+  EXPECT_EQ(time, static_cast<time_t>(cacheableDate));
+}
+
+TEST(CacheableDateTest, constructFrom_duration) {
+  const auto duration = CacheableDate::duration(1000);
+  const CacheableDate cacheableDate(duration);
+
+  EXPECT_EQ(duration.count(), cacheableDate.milliseconds());
+
+  auto timePoint = static_cast<CacheableDate::time_point>(cacheableDate);
+  EXPECT_EQ(duration, timePoint.time_since_epoch());
+
+  EXPECT_EQ(duration, static_cast<CacheableDate::duration>(cacheableDate));
+
+  const auto time = CacheableDate::clock::to_time_t(timePoint);
+  EXPECT_EQ(time, static_cast<time_t>(cacheableDate));
+}
+
+TEST(CacheableDateTest, toString) {
+  // output from CacheableString::toString is local and timezone dependent.
+  const time_t time = 0;
+  const auto localtime = std::localtime(&time);
+  std::stringstream stringstream;
+  stringstream << std::put_time(localtime, "%c %Z");
+  const auto expectedString = stringstream.str();
+
+  const CacheableDate cacheableDate;
+
+  auto string = cacheableDate.toString();
+  EXPECT_EQ(expectedString, string);
+}
+
+TEST(CacheableDateTest, toStringWithFutureDate) {
+  // output from CacheableString::toString is local and timezone dependent.
+  const time_t time = 2147512508;
+  const auto localtime = std::localtime(&time);
+  std::stringstream stringstream;
+  stringstream << std::put_time(localtime, "%c %Z");
+  const auto expectedString = stringstream.str();
+
+  const CacheableDate cacheableDate(time);
+
+  auto string = cacheableDate.toString();
+  EXPECT_EQ(expectedString, string);
+}
+
+TEST(CacheableDateTest, toStringWithPastDate) {
+  // output from CacheableString::toString is local and timezone dependent.
+  const auto past =
+      std::chrono::system_clock::from_time_t(0) - std::chrono::hours(100);
+  const time_t time = std::chrono::system_clock::to_time_t(past);
+  const auto localtime = std::localtime(&time);
+#if defined(_WIN32)
+  const auto expectedString = std::string("invalid time");
+#else
+  std::stringstream stringstream;
+  stringstream << std::put_time(localtime, "%c %Z");
+  const auto expectedString = stringstream.str();
+#endif
+
+  const CacheableDate cacheableDate(time);
+
+  auto string = cacheableDate.toString();
+  EXPECT_EQ(expectedString, string);
+}
diff --git a/cppcache/test/ClientProxyMembershipIDFactoryTest.cpp b/cppcache/test/ClientProxyMembershipIDFactoryTest.cpp
index afaeda2..a1fc61f 100644
--- a/cppcache/test/ClientProxyMembershipIDFactoryTest.cpp
+++ b/cppcache/test/ClientProxyMembershipIDFactoryTest.cpp
@@ -15,17 +15,20 @@
  * limitations under the License.
  */
 
-#include <ClientProxyMembershipIDFactory.hpp>
 #include <regex>
 
+#include <boost/endian/conversion.hpp>
+
 #include <gtest/gtest.h>
 
+#include "ClientProxyMembershipIDFactory.hpp"
+
 using apache::geode::client::ClientProxyMembershipIDFactory;
 
 TEST(ClientProxyMembershipIDFactoryTest, testCreate) {
   ClientProxyMembershipIDFactory factory("myDs");
 
-  auto hostAddr = htonl(1);
+  auto hostAddr = boost::endian::native_to_big(1);
   auto id = factory.create("myHost", hostAddr, 2, "myClientID",
                            std::chrono::seconds(3));
   ASSERT_NE(nullptr, id);
diff --git a/cppcache/test/DataOutputTest.cpp b/cppcache/test/DataOutputTest.cpp
index 1936d98..f3017d5 100644
--- a/cppcache/test/DataOutputTest.cpp
+++ b/cppcache/test/DataOutputTest.cpp
@@ -20,8 +20,6 @@
 #include <limits>
 #include <random>
 
-#include <boost/endian/conversion.hpp>
-
 #include <gtest/gtest.h>
 
 #include <geode/CacheFactory.hpp>
diff --git a/cppcache/test/LocalRegionTest.cpp b/cppcache/test/LocalRegionTest.cpp
new file mode 100644
index 0000000..4e7765e
--- /dev/null
+++ b/cppcache/test/LocalRegionTest.cpp
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include <geode/AuthenticatedView.hpp>
+#include <geode/Cache.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+using apache::geode::client::CacheClosedException;
+using apache::geode::client::CacheFactory;
+using apache::geode::client::RegionAttributesFactory;
+using apache::geode::client::RegionShortcut;
+
+/**
+ * Cache should close and throw exceptions on methods called after close.
+ */
+TEST(LocalRegionTest, subRegions) {
+  auto cache = CacheFactory{}.set("log-level", "none").create();
+
+  auto rootRegions = cache.rootRegions();
+  EXPECT_TRUE(rootRegions.empty());
+
+  auto rootRegion1 =
+      cache.createRegionFactory(RegionShortcut::LOCAL).create("rootRegion1");
+  EXPECT_NE(nullptr, rootRegion1);
+
+  auto subRegion11 = rootRegion1->createSubregion(
+      "subRegion11", RegionAttributesFactory().create());
+  EXPECT_NE(nullptr, subRegion11);
+
+  auto subRegion12 = rootRegion1->createSubregion(
+      "subRegion12", RegionAttributesFactory().create());
+  EXPECT_NE(nullptr, subRegion12);
+
+  auto subRegions1 = rootRegion1->subregions(true);
+  EXPECT_EQ(2, subRegions1.size());
+
+  auto rootRegion2 =
+      cache.createRegionFactory(RegionShortcut::LOCAL).create("rootRegion2");
+  EXPECT_NE(nullptr, rootRegion2);
+
+  auto subRegion21 = rootRegion2->createSubregion(
+      "subRegion21", RegionAttributesFactory().create());
+  EXPECT_NE(nullptr, subRegion21);
+
+  auto subRegion211 = subRegion21->createSubregion(
+      "subRegion211", RegionAttributesFactory().create());
+  EXPECT_NE(nullptr, subRegion211);
+
+  auto subRegions2 = rootRegion2->subregions(true);
+  EXPECT_EQ(2, subRegions2.size());
+
+  auto subRegions2NonRecursive = rootRegion2->subregions(false);
+  EXPECT_EQ(1, subRegions2NonRecursive.size());
+
+  auto rootRegion3 =
+      cache.createRegionFactory(RegionShortcut::LOCAL).create("rootRegion3");
+  EXPECT_NE(nullptr, rootRegion3);
+
+  auto subRegions3 = rootRegion3->subregions(true);
+  EXPECT_EQ(0, subRegions3.size());
+}
diff --git a/cppcache/test/TcrMessage_unittest.cpp b/cppcache/test/TcrMessageTest.cpp
similarity index 97%
rename from cppcache/test/TcrMessage_unittest.cpp
rename to cppcache/test/TcrMessageTest.cpp
index c6c2293..93d26a9 100644
--- a/cppcache/test/TcrMessage_unittest.cpp
+++ b/cppcache/test/TcrMessageTest.cpp
@@ -95,7 +95,7 @@
   EXPECT_MESSAGE_EQ(
       "0000000B0000003800000003\\h{8}"
       "000000001300494E56414C49445F524547494F4E5F4E414D450000001200030000000000"
-      "0000010300000000000000\\h{2}0000000400000003E8",
+      "00000103\\h{16}0000000400000003E8",
       message);
 }
 
@@ -114,11 +114,11 @@
   EXPECT_MESSAGE_EQ(
       "000000240000003800000003\\h{8}"
       "000000001300494E56414C49445F524547494F4E5F4E414D450000001200030000000000"
-      "0000010300000000000000\\h{2}0000000400000003E8",
+      "00000103\\h{16}0000000400000003E8",
       message);
 }
 
-TEST_F(TcrMessageTest, testQueryConstructorMessageDataCotent) {
+TEST_F(TcrMessageTest, testQueryConstructorMessageDataContent) {
   using apache::geode::client::TcrMessageCloseCQ;
 
   std::chrono::milliseconds messageResponseTimeout{1000};
@@ -131,7 +131,7 @@
 
   EXPECT_MESSAGE_EQ(
       "0000002D0000003100000003FFFFFFFF000000000C006D79526567696F6E4E616D650000"
-      "0012000300000000000000010300000000000000\\h{2}0000000400000003E8",
+      "00120003000000000000000103\\h{16}0000000400000003E8",
       message);
 }
 
@@ -148,7 +148,7 @@
 
   EXPECT_MESSAGE_EQ(
       "000000220000003000000003FFFFFFFF000000000B0061526567696F6E4E616D65000000"
-      "12000300000000000000010300000000000000\\h{2}0000000400000003E8",
+      "120003000000000000000103\\h{16}0000000400000003E8",
       message);
 }
 
@@ -165,7 +165,7 @@
 
   EXPECT_MESSAGE_EQ(
       "0000002C0000003000000003FFFFFFFF000000000B0061526567696F6E4E616D65000000"
-      "12000300000000000000010300000000000000\\h{2}0000000400000003E8",
+      "120003000000000000000103\\h{16}0000000400000003E8",
       message);
 }
 
@@ -182,7 +182,7 @@
 
   EXPECT_MESSAGE_EQ(
       "0000002D0000003000000003FFFFFFFF000000000B0061526567696F6E4E616D65000000"
-      "12000300000000000000010300000000000000\\h{2}0000000400000003E8",
+      "120003000000000000000103\\h{16}0000000400000003E8",
       message);
 }
 
@@ -271,7 +271,7 @@
   EXPECT_MESSAGE_EQ(
       "000000090000004800000005FFFFFFFF000000001300494E56414C49445F524547494F4E"
       "5F4E414D4500000008015700056D796B6579000000010129000000010129000000120003"
-      "000000000000000103000000000000000\\h{1}",
+      "000000000000000103\\h{16}",
       message);
 }
 
@@ -290,8 +290,8 @@
 
   EXPECT_MESSAGE_EQ(
       "000000530000003C00000003FFFFFFFF000000001300494E56414C49445F524547494F4E"
-      "5F4E414D4500000008015700056D796B6579000000120003000000000000000103000000"
-      "000000000\\h{1}",
+      "5F4E414D4500000008015700056D796B6579000000120003000000000000000103\\h{"
+      "16}",
       message);
 }
 
@@ -313,8 +313,8 @@
   EXPECT_MESSAGE_EQ(
       "000000070000005A00000007FFFFFFFF000000000C006D79526567696F6E4E616D650000"
       "0001012900000004000000000000000008015700056D796B657900000002013500000000"
-      "0A015700076D7976616C7565000000120003000000000000000103000000000000000\\h"
-      "{1}",
+      "0A015700076D7976616C7565000000120003000000000000000103\\h"
+      "{16}",
       message);
 }
 
diff --git a/cppcache/test/ThreadPoolTest.cpp b/cppcache/test/ThreadPoolTest.cpp
new file mode 100644
index 0000000..f62bf61
--- /dev/null
+++ b/cppcache/test/ThreadPoolTest.cpp
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <atomic>
+#include <chrono>
+#include <condition_variable>
+#include <deque>
+#include <mutex>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include "ThreadPool.hpp"
+
+using apache::geode::client::Callable;
+using apache::geode::client::ThreadPool;
+
+class TestCallable : public Callable {
+ public:
+  TestCallable() : called_(0) {}
+
+  void call() {
+    std::lock_guard<decltype(mutex_)> lock(mutex_);
+    called_++;
+    condition_.notify_all();
+  }
+
+  size_t called_;
+  std::mutex mutex_;
+  std::condition_variable condition_;
+};
+
+TEST(ThreadPoolTest, callableIsCalled) {
+  ThreadPool threadPool(1);
+
+  auto c = std::make_shared<TestCallable>();
+  threadPool.perform(c);
+  std::unique_lock<decltype(c->mutex_)> lock(c->mutex_);
+  c->condition_.wait(lock, [&] { return c->called_ > 0; });
+
+  ASSERT_EQ(1, c->called_);
+}
diff --git a/cppcache/test/util/JavaModifiedUtf8Tests.cpp b/cppcache/test/util/JavaModifiedUtf8Tests.cpp
index 9f37ccc..7f6bda0 100644
--- a/cppcache/test/util/JavaModifiedUtf8Tests.cpp
+++ b/cppcache/test/util/JavaModifiedUtf8Tests.cpp
@@ -16,14 +16,14 @@
  */
 
 #include <string>
+#include <util/JavaModifiedUtf8.hpp>
 
 #include <gtest/gtest.h>
 
-#include <util/JavaModifiedUtf8.hpp>
-
 #include "../ByteArray.hpp"
 
-using namespace apache::geode::client::internal;
+using apache::geode::client::ByteArray;
+using apache::geode::client::internal::JavaModifiedUtf8;
 
 TEST(JavaModifiedUtf8Tests, EncodedLengthFromUtf8) {
   EXPECT_EQ(27, JavaModifiedUtf8::encodedLength("You had me at meat tornado!"));
diff --git a/cppcache/test/util/TestableRecursiveMutex.hpp b/cppcache/test/util/TestableRecursiveMutex.hpp
new file mode 100644
index 0000000..8db755c
--- /dev/null
+++ b/cppcache/test/util/TestableRecursiveMutex.hpp
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <atomic>
+#include <mutex>
+
+class TestableRecursiveMutex {
+ public:
+  std::recursive_mutex mutex_;
+  std::atomic<int32_t> recursive_depth_;
+  std::atomic<int32_t> lock_count_;
+  std::atomic<int32_t> unlock_count_;
+  std::atomic<int32_t> try_lock_count_;
+
+  TestableRecursiveMutex() noexcept
+      : recursive_depth_(0),
+        lock_count_(0),
+        unlock_count_(0),
+        try_lock_count_(0) {}
+
+  void lock() {
+    mutex_.lock();
+    ++recursive_depth_;
+    ++lock_count_;
+  }
+
+  void unlock() {
+    mutex_.unlock();
+    --recursive_depth_;
+    ++unlock_count_;
+  }
+
+  bool try_lock() {
+    bool locked = false;
+    if ((locked = mutex_.try_lock())) {
+      ++recursive_depth_;
+    }
+
+    ++try_lock_count_;
+    return locked;
+  }
+
+  void resetCounters() {
+    recursive_depth_ = 0;
+    lock_count_ = 0;
+    unlock_count_ = 0;
+    try_lock_count_ = 0;
+  }
+};
diff --git a/cppcache/test/util/chrono/durationTest.cpp b/cppcache/test/util/chrono/durationTest.cpp
index 262d212..b436bf7 100644
--- a/cppcache/test/util/chrono/durationTest.cpp
+++ b/cppcache/test/util/chrono/durationTest.cpp
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 
-#include <chrono>
 #include <algorithm>
+#include <chrono>
 
 #include <gtest/gtest.h>
 
@@ -24,8 +24,10 @@
 
 #include "util/chrono/duration_bounds.hpp"
 
-using namespace apache::geode::internal::chrono::duration;
-using namespace apache::geode::util::chrono::duration;
+using apache::geode::internal::chrono::duration::_ceil;
+using apache::geode::internal::chrono::duration::from_string;
+using apache::geode::internal::chrono::duration::to_string;
+using apache::geode::util::chrono::duration::assert_bounds;
 
 TEST(util_chrono_durationTest, ceil) {
   EXPECT_EQ(std::chrono::seconds(1),
diff --git a/cppcache/test/util/functionalTests.cpp b/cppcache/test/util/functionalTests.cpp
index 410ccbc..1cd483c 100644
--- a/cppcache/test/util/functionalTests.cpp
+++ b/cppcache/test/util/functionalTests.cpp
@@ -21,7 +21,7 @@
 
 #include <geode/internal/functional.hpp>
 
-using namespace apache::geode::client::internal;
+using apache::geode::client::internal::geode_hash;
 
 TEST(string, geode_hash) {
   auto&& hash = geode_hash<std::string>{};
@@ -32,4 +32,12 @@
   EXPECT_EQ(48, hash("0"));
   EXPECT_EQ(57, hash("9"));
   EXPECT_EQ(1077910243, hash("supercalifragilisticexpialidocious"));
+
+  EXPECT_EQ(1544552287, hash(u8"You had me at meat tornad\u00F6!\U000F0000"));
+
+  auto str = std::string("You had me at");
+  str.push_back(0);
+  str.append(u8"meat tornad\u00F6!\U000F0000");
+
+  EXPECT_EQ(701776767, hash(str));
 }
diff --git a/cppcache/integration-test-2/framework/Framework.cpp b/cppcache/test/util/queueTest.cpp
similarity index 67%
copy from cppcache/integration-test-2/framework/Framework.cpp
copy to cppcache/test/util/queueTest.cpp
index fe6942a..b5d6861 100644
--- a/cppcache/integration-test-2/framework/Framework.cpp
+++ b/cppcache/test/util/queueTest.cpp
@@ -15,4 +15,22 @@
  * limitations under the License.
  */
 
-#include "Framework.h"
+#include <deque>
+
+#include <gtest/gtest.h>
+
+#include "util/queue.hpp"
+
+using apache::geode::client::queue::coalesce;
+
+TEST(util_queueTest, coalesce) {
+  auto queue = std::deque<int32_t>({1, 1, 1, 2, 3, 4});
+
+  coalesce(queue, 1);
+  EXPECT_EQ(2, queue.front());
+  EXPECT_EQ(3, queue.size());
+
+  coalesce(queue, 3);
+  EXPECT_EQ(2, queue.front());
+  EXPECT_EQ(3, queue.size());
+}
diff --git a/cppcache/test/util/synchronized_mapTest.cpp b/cppcache/test/util/synchronized_mapTest.cpp
new file mode 100644
index 0000000..2a6f79c
--- /dev/null
+++ b/cppcache/test/util/synchronized_mapTest.cpp
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <atomic>
+#include <mutex>
+#include <unordered_map>
+
+#include <gtest/gtest.h>
+
+#include "TestableRecursiveMutex.hpp"
+#include "util/synchronized_map.hpp"
+
+using apache::geode::client::synchronized_map;
+
+TEST(synchronized_mapTest, emplaceLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  auto result = map.emplace("a", "A");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("a", result.first->first);
+  EXPECT_EQ("A", result.first->second);
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+
+  result = map.emplace("b", "B");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("b", result.first->first);
+  EXPECT_EQ("B", result.first->second);
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(2, map.mutex().lock_count_);
+  EXPECT_EQ(2, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, eraseKeyLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  auto result = map.erase("a");
+  ASSERT_EQ(1, result);
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, beginLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& begin = map.begin();
+
+  ASSERT_EQ("a", begin->first);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, beginConstLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& constMap = map;
+  const auto& begin = constMap.begin();
+
+  ASSERT_EQ("a", begin->first);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, cbeginLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& begin = map.cbegin();
+
+  ASSERT_EQ("a", begin->first);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, endLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& begin = map.begin();
+  const auto& end = map.end();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, endConsLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& constMap = map;
+  const auto& begin = constMap.begin();
+  const auto& end = constMap.end();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, cendLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  const auto& begin = map.cbegin();
+  const auto& end = map.cend();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, emptyLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  ASSERT_TRUE(map.empty());
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  ASSERT_FALSE(map.empty());
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, sizeLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  ASSERT_EQ(0, map.size());
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  ASSERT_EQ(1, map.size());
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, clearLocks) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  map.clear();
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+  EXPECT_TRUE(map.empty());
+}
+
+TEST(synchronized_mapTest, findNotLocked) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  {
+    std::lock_guard<decltype(map)::mutex_type> lock(map.mutex());
+    const auto& entry = map.find("a");
+    EXPECT_EQ(1, map.mutex().recursive_depth_);
+    EXPECT_EQ(1, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+    EXPECT_EQ("a", entry->first);
+  }
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, findConstNotLocked) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.mutex().resetCounters();
+
+  {
+    auto&& lock = map.make_lock();
+    const auto& constMap = map;
+    const auto& entry = constMap.find("a");
+    EXPECT_EQ(1, map.mutex().recursive_depth_);
+    EXPECT_EQ(1, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+    EXPECT_EQ("a", entry->first);
+  }
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, iteratorNotLocked) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.emplace("a", "A");
+  map.emplace("b", "B");
+  map.mutex().resetCounters();
+
+  auto& mutex = map.mutex();
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+
+  {
+    for (const auto& entry : map) {
+      EXPECT_EQ(0, mutex.recursive_depth_);
+      EXPECT_EQ(0, map.mutex().lock_count_);
+      EXPECT_EQ(0, map.mutex().unlock_count_);
+    }
+  }
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, map.mutex().lock_count_);
+  EXPECT_EQ(0, map.mutex().unlock_count_);
+
+  {
+    std::lock_guard<decltype(map)::mutex_type> lock(mutex);
+    for (const auto& entry : map) {
+      EXPECT_EQ(1, mutex.recursive_depth_);
+      EXPECT_EQ(1, map.mutex().lock_count_);
+      EXPECT_EQ(0, map.mutex().unlock_count_);
+    }
+  }
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, make_lockDefault) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  {
+    auto&& lock = map.make_lock();
+    EXPECT_EQ(1, map.mutex().recursive_depth_);
+    EXPECT_EQ(1, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, make_lock_WithUniqueLock) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  {
+    auto&& lock = map.make_lock<std::unique_lock>();
+    EXPECT_EQ(1, map.mutex().recursive_depth_);
+    EXPECT_EQ(1, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, make_lock_WithUniqueLockDefered) {
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  {
+    auto&& lock = map.make_lock<std::unique_lock>(std::defer_lock);
+    EXPECT_EQ(0, map.mutex().recursive_depth_);
+    EXPECT_EQ(0, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+    lock.lock();
+    EXPECT_EQ(1, map.mutex().recursive_depth_);
+    EXPECT_EQ(1, map.mutex().lock_count_);
+    EXPECT_EQ(0, map.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+}
+
+TEST(synchronized_mapTest, insertIteratorIteratorLocks) {
+  std::unordered_map<std::string, std::string> source = {{"a", "A"},
+                                                         {"b", "B"}};
+
+  synchronized_map<std::unordered_map<std::string, std::string>,
+                   TestableRecursiveMutex>
+      map;
+
+  map.insert(source.begin(), source.end());
+  EXPECT_EQ(0, map.mutex().recursive_depth_);
+  EXPECT_EQ(1, map.mutex().lock_count_);
+  EXPECT_EQ(1, map.mutex().unlock_count_);
+  EXPECT_EQ(2, map.size());
+}
diff --git a/cppcache/test/util/synchronized_setTest.cpp b/cppcache/test/util/synchronized_setTest.cpp
new file mode 100644
index 0000000..98f8563
--- /dev/null
+++ b/cppcache/test/util/synchronized_setTest.cpp
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <atomic>
+#include <mutex>
+#include <unordered_set>
+
+#include <gtest/gtest.h>
+
+#include "TestableRecursiveMutex.hpp"
+#include "util/synchronized_set.hpp"
+
+using apache::geode::client::synchronized_set;
+
+TEST(synchronized_setTest, emplaceLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  auto result = set.emplace("a");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("a", *result.first);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+
+  result = set.emplace("b");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("b", *result.first);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(2, set.mutex().lock_count_);
+  EXPECT_EQ(2, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, eraseKeyLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  auto result = set.erase("a");
+  ASSERT_EQ(1, result);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, beginLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& begin = set.begin();
+
+  ASSERT_EQ("a", *begin);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, beginConstLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& constMap = set;
+  const auto& begin = constMap.begin();
+
+  ASSERT_EQ("a", *begin);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, cbeginLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& begin = set.cbegin();
+
+  ASSERT_EQ("a", *begin);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, endLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& begin = set.begin();
+  const auto& end = set.end();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, endConsLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& constMap = set;
+  const auto& begin = constMap.begin();
+  const auto& end = constMap.end();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, cendLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  const auto& begin = set.cbegin();
+  const auto& end = set.cend();
+
+  ASSERT_NE(begin, end);
+
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, emptyLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  ASSERT_TRUE(set.empty());
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  ASSERT_FALSE(set.empty());
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, sizeLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  ASSERT_EQ(0, set.size());
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  ASSERT_EQ(1, set.size());
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, clearLocks) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  set.clear();
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+  EXPECT_TRUE(set.empty());
+}
+
+TEST(synchronized_setTest, findNotLocked) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  {
+    std::lock_guard<decltype(set)::mutex_type> lock(set.mutex());
+    const auto& entry = set.find("a");
+    EXPECT_EQ(1, set.mutex().recursive_depth_);
+    EXPECT_EQ(1, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+    EXPECT_EQ("a", *entry);
+  }
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, findConstNotLocked) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.mutex().resetCounters();
+
+  {
+    auto&& lock = set.make_lock();
+    const auto& constMap = set;
+    const auto& entry = constMap.find("a");
+    EXPECT_EQ(1, set.mutex().recursive_depth_);
+    EXPECT_EQ(1, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+    EXPECT_EQ("a", *entry);
+  }
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, iteratorNotLocked) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.emplace("a");
+  set.emplace("b");
+  set.mutex().resetCounters();
+
+  auto& mutex = set.mutex();
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+
+  {
+    for (const auto& entry : set) {
+      EXPECT_EQ(0, mutex.recursive_depth_);
+      EXPECT_EQ(0, set.mutex().lock_count_);
+      EXPECT_EQ(0, set.mutex().unlock_count_);
+    }
+  }
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(0, set.mutex().lock_count_);
+  EXPECT_EQ(0, set.mutex().unlock_count_);
+
+  {
+    std::lock_guard<decltype(set)::mutex_type> lock(mutex);
+    for (const auto& entry : set) {
+      EXPECT_EQ(1, mutex.recursive_depth_);
+      EXPECT_EQ(1, set.mutex().lock_count_);
+      EXPECT_EQ(0, set.mutex().unlock_count_);
+    }
+  }
+  EXPECT_EQ(0, mutex.recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, make_lockDefault) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  {
+    auto&& lock = set.make_lock();
+    EXPECT_EQ(1, set.mutex().recursive_depth_);
+    EXPECT_EQ(1, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, make_lock_WithUniqueLock) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  {
+    auto&& lock = set.make_lock<std::unique_lock>();
+    EXPECT_EQ(1, set.mutex().recursive_depth_);
+    EXPECT_EQ(1, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, make_lock_WithUniqueLockDefered) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  {
+    auto&& lock = set.make_lock<std::unique_lock>(std::defer_lock);
+    EXPECT_EQ(0, set.mutex().recursive_depth_);
+    EXPECT_EQ(0, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+    lock.lock();
+    EXPECT_EQ(1, set.mutex().recursive_depth_);
+    EXPECT_EQ(1, set.mutex().lock_count_);
+    EXPECT_EQ(0, set.mutex().unlock_count_);
+  }
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+}
+
+TEST(synchronized_setTest, insertIteratorIteratorLocks) {
+  std::unordered_set<std::string> source = {"a", "b"};
+
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.insert(source.begin(), source.end());
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+  EXPECT_EQ(2, set.size());
+}
+
+TEST(synchronized_setTest, insertRvalue) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  set.insert("a");
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+  EXPECT_EQ(1, set.size());
+}
+
+TEST(synchronized_setTest, insertLvalue) {
+  synchronized_set<std::unordered_set<std::string>, TestableRecursiveMutex> set;
+
+  std::string value = "a";
+  set.insert(value);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+  EXPECT_EQ(1, set.size());
+}
+
+TEST(synchronized_setTest, compilesWithStdSet) {
+  synchronized_set<std::set<std::string>, TestableRecursiveMutex> set;
+
+  auto result = set.emplace("a");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("a", *result.first);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(1, set.mutex().lock_count_);
+  EXPECT_EQ(1, set.mutex().unlock_count_);
+
+  result = set.emplace("b");
+  ASSERT_EQ(true, result.second);
+  EXPECT_EQ("b", *result.first);
+  EXPECT_EQ(0, set.mutex().recursive_depth_);
+  EXPECT_EQ(2, set.mutex().lock_count_);
+  EXPECT_EQ(2, set.mutex().unlock_count_);
+}
diff --git a/cryptoimpl/CMakeLists.txt b/cryptoimpl/CMakeLists.txt
index 61acaa3..0c8a445 100644
--- a/cryptoimpl/CMakeLists.txt
+++ b/cryptoimpl/CMakeLists.txt
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.4)
 project(cryptoImpl LANGUAGES CXX)
 
 add_library(cryptoImpl SHARED
@@ -38,13 +37,13 @@
 
 target_link_libraries(cryptoImpl
   PRIVATE
-    ACE_SSL
+    ACE::ACE_SSL
     _WarningsAsError
   PUBLIC
-   apache-geode
-   crypto
-   ssl
-   c++11
+    apache-geode
+    OpenSSL::Crypto
+    OpenSSL::SSL
+    c++11
 )
 
 add_clangformat(cryptoImpl)
diff --git a/dependencies/ACE/CMakeLists.txt b/dependencies/ACE/CMakeLists.txt
index eb04e1c..f5129b9 100644
--- a/dependencies/ACE/CMakeLists.txt
+++ b/dependencies/ACE/CMakeLists.txt
@@ -13,14 +13,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( ACE LANGUAGES NONE )
+project( ACE VERSION 6.5.3 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 6.4.7 )
-set( ${PROJECT_NAME}_SHA265 b2b59a5f49b164121a8d1c109ff04fc23fcd67cfad040772e8c045c8a34cdabe )
-string(REPLACE "." "_" _VERSION_UNDERSCORE ${${PROJECT_NAME}_VERSION})
-set( ${PROJECT_NAME}_URL "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${_VERSION_UNDERSCORE}/ACE.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-set( ${PROJECT_NAME}_DEPENDS openssl-extern )
+set( SHA256 de20bdbfcbcf7d67836e9a2c0875e4eb348a1153e19b83392608330fec3c056a )
+set( DEPENDS OpenSSL::SSL )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
   set( ACE_PLATFORM sunos5_sunc++ )
@@ -46,9 +42,8 @@
   message( FATAL_ERROR "ACE_PLATFORM unset for ${CMAKE_SYSTEM_NAME}" )
 endif()
 
-include(ExternalProject)
 
-set( OPENSSL_ROOT ${DEPENDENCIES_openssl_DIR} )
+set( OPENSSL_ROOT $<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_INCLUDE_DIRECTORIES>/.. )
 
 
 if (${WIN32})
@@ -58,27 +53,36 @@
     set( _PLATFORM win32 )
   endif()
 
+  if (MSVC_VERSION EQUAL 1900)
+    set(_TYPE "vc14")
+  elseif((MSVC_VERSION GREATER_EQUAL 1910) AND (MSVC_VERSION LESS_EQUAL 1919))
+    set(_TYPE "vs2017")
+  endIF()
+
   set ( _COMMAND_PREFIX ${CMAKE_COMMAND} -E chdir ace )
 
   set ( _MSBUILD_FLAGS /m /p:Platform=${_PLATFORM} /p:Configuration=$<$<CONFIG:Debug>:Debug>$<$<NOT:$<CONFIG:Debug>>:Release>)
-  set ( _MSBUILD_FLAGS_STATIC ${_MSBUILD_FLAGS} /t:ace_vc${MSVC_VERSION}_static /t:SSL_vc${MSVC_VERSION}_static ) 
+  set ( _MSBUILD_FLAGS_STATIC ${_MSBUILD_FLAGS} /t:ace_${_TYPE}_static /t:SSL_${_TYPE}_static )
 
   include(ProcessorCount)
   ProcessorCount(_NPROCS)
-  set ( MPC ${PERL} ..\\bin\\mwc.pl )
-  set ( MPC_FLAGS -type vc${MSVC_VERSION} -expand_vars -features ssl=1 -recurse -hierarchy -workers ${_NPROCS} -value_template MultiProcessorCompilation=true -apply_project )
+
+  find_package(Perl REQUIRED)
+
+  set ( MPC ${PERL_EXECUTABLE} ..\\bin\\mwc.pl )
+  set ( MPC_FLAGS -type ${_TYPE} -expand_vars -features ssl=1 -recurse -hierarchy -workers ${_NPROCS} -value_template MultiProcessorCompilation=true -apply_project )
 
   #TODO add custom targets to build in parallel?
   #TODO MPC has flag to replace variables with absolute paths, think we need that for devstudio builds
   set ( _CONFIGURE_COMMAND ${_COMMAND_PREFIX}
                              ${CMAKE_COMMAND} -E env ACE_ROOT=<SOURCE_DIR> SSL_ROOT=${OPENSSL_ROOT}
-							 ${MPC} ${MPC_FLAGS} -name_modifier "*_vc${MSVC_VERSION}_static" -static 
+							 ${MPC} ${MPC_FLAGS} -name_modifier "*_${_TYPE}_static" -static
 							 -value_template staticflags+=__ACE_INLINE__ 
 							 -value_template staticflags+=ACE_BUILD_DLL 
 							 -value_template staticflags+=ACE_AS_STATIC_LIBS 
 							 -value_template runtime_library=Multithreaded$<$<CONFIG:Debug>:Debug>Dll 
   )
-  set ( _BUILD_COMMAND ${_COMMAND_PREFIX} ${MSBUILD} ACE_vc${MSVC_VERSION}_static.sln ${_MSBUILD_FLAGS} ${_MSBUILD_FLAGS_STATIC}
+  set ( _BUILD_COMMAND ${_COMMAND_PREFIX} ${CMAKE_VS_MSBUILD_COMMAND} ACE_${_TYPE}_static.sln ${_MSBUILD_FLAGS} ${_MSBUILD_FLAGS_STATIC}
   )
   set ( _INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory lib <INSTALL_DIR>/lib 
                  COMMAND ${CMAKE_COMMAND} -E copy_directory ace <INSTALL_DIR>/include/ace
@@ -97,83 +101,90 @@
   set ( _INSTALL_COMMAND ${_MAKE} install )
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+string(REPLACE "." "_" _VERSION_UNDERSCORE ${PROJECT_VERSION})
+
+set( EXTERN ${PROJECT_NAME}-extern )
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${_VERSION_UNDERSCORE}/ACE-${PROJECT_VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
    BUILD_COMMAND "${_BUILD_COMMAND}"
    INSTALL_COMMAND "${_INSTALL_COMMAND}"
-   DEPENDS ${${PROJECT_NAME}_DEPENDS}
+   DEPENDS ${DEPENDS}
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+set( SOURCE_DIR ${SOURCE_DIR} )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set( INSTALL_DIR ${INSTALL_DIR} )
+set( DEPENDENCIES_DIR ${INSTALL_DIR} PARENT_SCOPE)
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
 set( PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches )
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} patches
-    ALWAYS 0
-    DEPENDEES download
-    DEPENDERS patch
-    DEPENDS ${PATCH_FILE}
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_sunos5_sunc++.GNU ${${PROJECT_NAME}_SOURCE_DIR}/ace/config-lite.h ${${PROJECT_NAME}_SOURCE_DIR}/ace/Stats.cpp
-    WORKING_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}
-    COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+ExternalProject_Add_Step( ${EXTERN} patches
+  ALWAYS 0
+  DEPENDEES download
+  DEPENDERS patch
+  DEPENDS ${PATCH_FILE}
+  BYPRODUCTS ${SOURCE_DIR}/include/makeinclude/platform_sunos5_sunc++.GNU ${SOURCE_DIR}/ace/config-lite.h ${SOURCE_DIR}/ace/Stats.cpp
+  WORKING_DIRECTORY ${SOURCE_DIR}
+  COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
 )
 endif()
 
 configure_file(config.h.in config.h)
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} config.h
-    DEPENDEES patch
-    DEPENDERS configure
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.h
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/ace/config.h
-    COMMAND ${CMAKE_COMMAND} -E copy config.h ${${PROJECT_NAME}_SOURCE_DIR}/ace/config.h
+ExternalProject_Add_Step( ${EXTERN} config.h
+  DEPENDEES patch
+  DEPENDERS configure
+  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.h
+  BYPRODUCTS ${SOURCE_DIR}/ace/config.h
+  COMMAND ${CMAKE_COMMAND} -E copy config.h ${SOURCE_DIR}/ace/config.h
 )
 
 if (UNIX)
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} platform
-    DEPENDEES patch
-    DEPENDERS configure
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "INSTALL_PREFIX = ${${PROJECT_NAME}_INSTALL_DIR}" > ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "CCFLAGS += ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}" >> ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "include ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_${ACE_PLATFORM}.GNU" >> ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+ExternalProject_Add_Step( ${EXTERN} platform
+  DEPENDEES patch
+  DEPENDERS configure
+  BYPRODUCTS ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "INSTALL_PREFIX = ${INSTALL_DIR}" > ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CC = ${CMAKE_C_COMPILER}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CXX = ${CMAKE_CXX_COMPILER}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CCFLAGS += ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "include ${SOURCE_DIR}/include/makeinclude/platform_${ACE_PLATFORM}.GNU" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
 )
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+find_package(Threads)
+
+add_library(ACE_ACE INTERFACE)
+target_include_directories(ACE_ACE SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_compile_definitions(${PROJECT_NAME} INTERFACE
+target_compile_definitions(ACE_ACE INTERFACE
 	-D__ACE_INLINE__
 	-DACE_AS_STATIC_LIBS
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE${CMAKE_STATIC_LIBRARY_SUFFIX}
+target_link_libraries(ACE_ACE INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE${CMAKE_STATIC_LIBRARY_SUFFIX}
+  Threads::Threads
 )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
-  target_link_libraries(${PROJECT_NAME} INTERFACE
+  target_link_libraries(ACE_ACE INTERFACE
     rt
-    pthread
     m
     socket
     nsl
   )
-  target_compile_definitions( ${PROJECT_NAME} INTERFACE
+  target_compile_definitions(ACE_ACE INTERFACE
     _POSIX_PTHREAD_SEMANTICS
   )
 
 elseif ("Linux" STREQUAL ${CMAKE_SYSTEM_NAME} )
-  target_link_libraries(${PROJECT_NAME} INTERFACE
-    pthread
+  target_link_libraries(ACE_ACE INTERFACE
     dl
     rt
   )
@@ -181,10 +192,14 @@
 elseif ("Windows" STREQUAL ${CMAKE_SYSTEM_NAME} )
 endif()
 
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(ACE_ACE ${EXTERN})
 
-add_library(ACE_SSL INTERFACE)
-target_link_libraries(ACE_SSL INTERFACE
-    ${PROJECT_NAME}
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE_SSL${CMAKE_STATIC_LIBRARY_SUFFIX}
+add_library(ACE_ACE_SSL INTERFACE)
+target_link_libraries(ACE_ACE_SSL INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE_SSL${CMAKE_STATIC_LIBRARY_SUFFIX}
+  ACE_ACE
+  OpenSSL::SSL
 )
+
+add_library(ACE::ACE ALIAS ACE_ACE)
+add_library(ACE::ACE_SSL ALIAS ACE_ACE_SSL)
diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt
index f86a418..a422e23 100644
--- a/dependencies/CMakeLists.txt
+++ b/dependencies/CMakeLists.txt
@@ -12,93 +12,25 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 cmake_minimum_required( VERSION 3.10 )
 project( dependencies LANGUAGES NONE )
 
-#TODO options?
-set( USE_C++ 11 CACHE STRING "Use C++ standard X (11).")
+find_package(Patch REQUIRED)
 
-set ( DEPENDENCIES
-	libxml2
-	openssl
-	ACE
-	boost
-	sqlite
-	doxygen
-	gtest
-)
+add_subdirectory(	libxml2 )
+add_subdirectory(	openssl )
+add_subdirectory(	ACE )
+add_subdirectory(	boost )
+add_subdirectory(	sqlite )
+add_subdirectory(	doxygen )
+add_subdirectory(	gtest )
+add_subdirectory(	benchmark )
 
-if ( "" STREQUAL "${USE_C++}" )
-  set (DEPENDENCIES STLport ${DEPENDENCIES})
+if (USE_RAT)
+  add_subdirectory( rat )
 endif()
 
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-
-set( CONFIGURE_FLAGS --prefix=<INSTALL_DIR> CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} )
-set( CONFIGURE ./configure ${CONFIGURE_FLAGS} )
-
-find_program( PATCH NAMES gpatch patch )
-if ("PATCH-NOTFOUND" STREQUAL "${PATCH}")
-  message( FATAL_ERROR "patch not found." )
-endif()
-
-# TODO windows why was windows finding bash?
-find_program( BASH bash )
-
 if (WIN32)
-  find_program( MSBUILD msbuild )
-  # TODO FindPerl
-  find_program( PERL perl )
-
-  # Determin the Visual Studio version to generate projects for.
-  if (MSVC10)
-    set(MSVC_VERSION 10)
-  elseif(MSVC11)
-    set(MSVC_VERSION 11)
-  elseif(MSVC12)
-    set(MSVC_VERSION 12)
-  elseif(MSVC14)
-    set(MSVC_VERSION 14)
-  endIF()
-  
-  set(DEPENDENCIES ${DEPENDENCIES} sqlite-netFx)
+  add_subdirectory( sqlite-netFx )
 endif()
-
-# TODO autoconfig?
-set( CFLAGS_ARCH_32 -m32 )
-set( CFLAGS_ARCH_64 -m64 )
-
-# TODO check_c*_compiler_flag don't support linker flags
-#check_c_compiler_flag( ${CFLAGS_ARCH_${BUILD_BITS}} CFLAGS_ARCH_${BUILD_BITS}_ALLOWED )
-#if (${CFLAGS_ARCH_${BUILD_BITS}_ALLOWED})
-  set( CFLAGS_ARCH ${CFLAGS_ARCH_${BUILD_BITS}} )
-#else()
-#  message( FATAL_ERROR "${BUILD_BITS} bits flag ${CFLAGS_ARCH_${BUILD_BITS}} not supported.")
-#endif()
-
-set( CXXFLAGS_ARCH_32 -m32 )
-set( CXXFLAGS_ARCH_64 -m64 )
-
-#check_cxx_compiler_flag( ${CXXFLAGS_ARCH_${BUILD_BITS}} CXXFLAGS_ARCH_${BUILD_BITS}_ALLOWED )
-#if (${CXXFLAGS_ARCH_${BUILD_BITS}_ALLOWED})
-  set( CXXFLAGS_ARCH ${CXXFLAGS_ARCH_${BUILD_BITS}} )
-#else()
-#  message( FATAL_ERROR "${BUILD_BITS} bits flag ${CXXFLAGS_ARCH_${BUILD_BITS}} not supported.")
-#endif()
-
-set( CXXFLAGS_C++11 ${CMAKE_CXX11_STANDARD_COMPILE_OPTION} )
-if (NOT "" STREQUAL "${CXXFLAGS_C++${USE_C++}}" )
-		set( CXXFLAGS_C++ ${CXXFLAGS_C++${USE_C++}} )
-endif()
-
-#TODO solaris needs special flags https://docs.oracle.com/cd/E37069_01/html/E37075/bkamq.html#scrolltoc
-set( CXXLDFLAGS_RUNTIME_C++11 -lstdc++ -lgcc_s -lCrunG3 -lc )
-set( CXXLDFLAGS_RUNTIME ${CXXFLAGS_C++${USE_C++}} )
-
-foreach(_D ${DEPENDENCIES})
-	add_subdirectory( ${_D} )
-endforeach(_D)
-
-set(sqlite-netFx_SHARED_LIB ${sqlite-netFx_SHARED_LIB} PARENT_SCOPE)
-
diff --git a/dependencies/benchmark/CMakeLists.txt b/dependencies/benchmark/CMakeLists.txt
new file mode 100644
index 0000000..1a31a0c
--- /dev/null
+++ b/dependencies/benchmark/CMakeLists.txt
@@ -0,0 +1,80 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+project( benchmark VERSION 1.4.1 LANGUAGES NONE )
+
+set( SHA256 61ae07eb5d4a0b02753419eb17a82b7d322786bb36ab62bd3df331a4d47c00a7 )
+set( DEPENDS GTest::gtest )
+
+
+if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
+endif()
+
+set( EXTERN ${PROJECT_NAME}-extern )
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://github.com/google/benchmark/archive/v${PROJECT_VERSION}.zip"
+   URL_HASH SHA256=${SHA256}
+   UPDATE_COMMAND ""
+   CMAKE_ARGS
+    -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+    -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>/$<CONFIG>
+    -DCMAKE_BUILD_TYPE=$<CONFIG>
+    -DGTEST_ROOT=$<TARGET_PROPERTY:GTest::gtest,INTERFACE_INCLUDE_DIRECTORIES>/..
+    -DBENCHMARK_ENABLE_TESTING=OFF
+   DEPENDS ${DEPENDS}
+)
+
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
+
+if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+  set(PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches)
+  ExternalProject_Add_Step(${EXTERN} patches
+    ALWAYS 0
+    DEPENDEES download
+    DEPENDERS patch
+    DEPENDS ${PATCH_FILE}
+    BYPRODUCTS ${SOURCE_DIR}/CMakeLists.txt
+    WORKING_DIRECTORY ${SOURCE_DIR}
+    COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
+  )
+endif()
+
+find_package(Threads REQUIRED)
+
+add_library(benchmark_benchmark INTERFACE)
+target_include_directories(benchmark_benchmark SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
+)
+target_link_libraries(benchmark_benchmark INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}
+  Threads::Threads
+)
+if (WIN32)
+target_link_libraries(benchmark_benchmark INTERFACE
+  Shlwapi
+)
+elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+  target_link_libraries(benchmark_benchmark INTERFACE
+    kstat
+  )
+endif()
+add_dependencies(benchmark_benchmark ${EXTERN})
+
+add_library(benchmark::benchmark ALIAS benchmark_benchmark)
diff --git a/dependencies/benchmark/patches b/dependencies/benchmark/patches
new file mode 100644
index 0000000..57907d4
--- /dev/null
+++ b/dependencies/benchmark/patches
@@ -0,0 +1,12 @@
+diff -ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	Tue Apr  3 22:12:47 2018
++++ b/CMakeLists.txt	Sun May  6 00:15:34 2018
+@@ -120,6 +120,8 @@
+     set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /LTCG")
+     set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /LTCG")
+   endif()
++elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
++  add_cxx_compiler_flag(-std=c++11)
+ else()
+   # Try and enable C++11. Don't use C++14 because it doesn't work in some
+   # configurations.
diff --git a/dependencies/boost/CMakeLists.txt b/dependencies/boost/CMakeLists.txt
index 143fc46..6fd3e99 100644
--- a/dependencies/boost/CMakeLists.txt
+++ b/dependencies/boost/CMakeLists.txt
@@ -13,31 +13,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( boost LANGUAGES NONE )
+project( boost VERSION 1.68.0 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.68.0 )
-set( ${PROJECT_NAME}_SHA265 da3411ea45622579d419bfda66f45cd0f8c32a181d84adfa936f5688388995cf )
-string(REPLACE "." "_" _VERSION_UNDERSCORE ${${PROJECT_NAME}_VERSION})
-set( ${PROJECT_NAME}_URL "https://dl.bintray.com/boostorg/release/${${PROJECT_NAME}_VERSION}/source/boost_${_VERSION_UNDERSCORE}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-
-include(ProcessorCount)
-ProcessorCount(_NPROCS)
-
-include(ExternalProject)
+set( SHA256 da3411ea45622579d419bfda66f45cd0f8c32a181d84adfa936f5688388995cf )
 
 set(_B2_FLAGS
   -d0
-  --prefix=<INSTALL_DIR>
+  --prefix=<INSTALL_DIR>/$<CONFIG>
   --with-system
   --with-log
   --layout=system
   address-model=${BUILD_BITS}
   link=static
   threading=multi
-  variant=$<LOWER_CASE:$<CONFIG>>
+  variant=$<IF:$<CONFIG:Debug>,debug,release>
+  debug-symbols=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,on,off>
 )
 
+include(ProcessorCount)
+ProcessorCount(_NPROCS)
 if (${_NPROCS})
   set ( _B2_FLAGS ${_B2_FLAGS} -j${_NPROCS} )
 endif()
@@ -45,11 +39,11 @@
 if (${WIN32})
   set ( _BOOTSTRAP_COMMAND .\\bootstrap.bat )
   set ( _B2_COMMAND .\\b2 )
-  set ( _B2_FLAGS ${_B2_FLAGS} toolset=msvc-14.0 )
+  set ( _B2_FLAGS ${_B2_FLAGS} toolset=msvc-14.1 )
 else()
   set ( _BOOTSTRAP_COMMAND ./bootstrap.sh )
   set ( _B2_COMMAND ./b2 )
-  set ( _B2_FLAGS ${_B2_FLAGS} "cxxflags=${CMAKE_CXX_FLAGS} ${CMAKE_CXX11_STANDARD_COMPILE_OPTION}" )
+  set ( _B2_FLAGS ${_B2_FLAGS} "cxxflags=${CMAKE_CXX_FLAGS} ${CMAKE_CXX11_STANDARD_COMPILE_OPTION} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}" )
 endif()
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
@@ -61,9 +55,13 @@
   set ( _BOOTSTRAP_COMMAND ${_BOOTSTRAP_COMMAND} --with-toolset=clang )
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+string(REPLACE "." "_" _VERSION_UNDERSCORE ${PROJECT_VERSION})
+set( EXTERN ${PROJECT_NAME}-extern )
+
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://dl.bintray.com/boostorg/release/${PROJECT_VERSION}/source/boost_${_VERSION_UNDERSCORE}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ${_BOOTSTRAP_COMMAND}
@@ -75,22 +73,20 @@
    STAMP_DIR ./stamp
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
 
 if (NOT WIN32)
 # https://github.com/boostorg/process/issues/51
   set( PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches)
-  ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} patches
+  ExternalProject_Add_Step( ${EXTERN} patches
       ALWAYS 0
       DEPENDEES download
       DEPENDERS patch
       DEPENDS ${PATCH_FILE}
-      BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/boost/process/detail/posix/is_running.hpp
-      WORKING_DIRECTORY ${${PROJECT_NAME}_INSTALL_DIR}
-      COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+      BYPRODUCTS ${SOURCE_DIR}/boost/process/detail/posix/is_running.hpp
+      COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
   )
 endif()
 
@@ -108,7 +104,7 @@
 
   set(linkLibraries)
   foreach(library ${args_LIBRARIES})
-    list(APPEND linkLibraries "${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${args_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    list(APPEND linkLibraries "${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${args_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
   endforeach()
 
   add_library(boost_${args_NAME} INTERFACE)
@@ -122,8 +118,7 @@
 
 add_library(${PROJECT_NAME} INTERFACE)
 target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/src>
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
 target_compile_definitions(${PROJECT_NAME} INTERFACE
   BOOST_ALL_NO_LIB
@@ -131,11 +126,13 @@
 target_link_libraries(${PROJECT_NAME} INTERFACE
 )
 add_library(Boost::boost ALIAS boost)
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(${PROJECT_NAME} ${EXTERN})
+
+find_package(Threads REQUIRED)
 
 add_boost_library(system DEPENDENCIES Boost::boost)
 add_boost_library(atomic DEPENDENCIES Boost::boost)
-add_boost_library(thread DEPENDENCIES Boost::atomic Boost::boost)
-add_boost_library(filesystem DEPENDENCIES Boost::boost)
+add_boost_library(thread DEPENDENCIES Threads::Threads Boost::atomic Boost::boost)
+add_boost_library(filesystem DEPENDENCIES Boost::system Boost::boost)
 add_boost_library(log DEPENDENCIES Boost::thread Boost::filesystem Boost::boost)
 add_boost_library(log_setup DEPENDENCIES Boost::log)
diff --git a/dependencies/doxygen/CMakeLists.txt b/dependencies/doxygen/CMakeLists.txt
index 269973c..f9157f7 100644
--- a/dependencies/doxygen/CMakeLists.txt
+++ b/dependencies/doxygen/CMakeLists.txt
@@ -13,44 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( doxygen LANGUAGES NONE )
+project( doxygen VERSION 1.8 LANGUAGES NONE )
 # used to compile documents
 
-set( ${PROJECT_NAME}_VERSION 1.6 )
-set( ${PROJECT_NAME}_SHA265 cedf78f6d213226464784ecb999b54515c97eab8a2f9b82514292f837cf88b93 )
-set( ${PROJECT_NAME}_URL "http://ftp.stack.nl/pub/users/dimitri/doxygen-${${PROJECT_NAME}_VERSION}.src.tar.gz" )
-#TODO flex broken set( ${PROJECT_NAME}_DEPENDS flex )
-
 # Not a runtime requirement, so look for existing installation.
-find_package(Doxygen ${${PROJECT_NAME}_VERSION} REQUIRED)
-if( ${DOXYGEN_FOUND} )
-
-	get_filename_component( DEPENDENCIES_${PROJECT_NAME}_DIR ${DOXYGEN_EXECUTABLE} DIRECTORY )
-	get_filename_component( DEPENDENCIES_${PROJECT_NAME}_DIR ${DEPENDENCIES_${PROJECT_NAME}_DIR} DIRECTORY )
-	set( DEPENDENCIES_${PROJECT_NAME}_DIR ${DEPENDENCIES_${PROJECT_NAME}_DIR} PARENT_SCOPE )
-	set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${DOXYGEN_VERSION} PARENT_SCOPE )	
-
-else()
-	# let's build it!
-	# TODO FLEX won't build on Solaris
-	# add_subdirectory( ../flex ${CMAKE_CURRENT_BINARY_DIR}/../flex )
-
-	include(ExternalProject)
-
-	# CMake based project
-	ExternalProject_Add( ${PROJECT_NAME}
-	   URL ${${PROJECT_NAME}_URL}
-	   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-	   UPDATE_COMMAND ""
-#	   DEPENDS ${${PROJECT_NAME}_DEPENDS}
-	)
-
-	ExternalProject_Get_Property( ${PROJECT_NAME} SOURCE_DIR )
-	set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-	ExternalProject_Get_Property( ${PROJECT_NAME} INSTALL_DIR )
-	set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-
-	set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
-	set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION} PARENT_SCOPE)
-
-endif( )
+find_package(Doxygen ${PROJECT_VERSION} REQUIRED)
diff --git a/dependencies/gtest/CMakeLists.txt b/dependencies/gtest/CMakeLists.txt
index b93c7ff..4d5c10a 100644
--- a/dependencies/gtest/CMakeLists.txt
+++ b/dependencies/gtest/CMakeLists.txt
@@ -4,72 +4,69 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( gtest LANGUAGES NONE )
+project( gtest VERSION 1.8.1 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.8.0 )
-set( ${PROJECT_NAME}_SHA265 f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf )
-set( ${PROJECT_NAME}_URL "https://github.com/google/googletest/archive/release-${${PROJECT_NAME}_VERSION}.zip" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 927827c183d01734cc5cfef85e0ff3f5a92ffe6188e0d18e909c5efebf28a0c7 )
 
 include(ExternalProject)
+ExternalProject_Add( ${PROJECT_NAME}-extern
+  URL "https://github.com/google/googletest/archive/release-${PROJECT_VERSION}.zip"
+  URL_HASH SHA256=${SHA256}
+  CMAKE_ARGS
+    -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+    -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+    -DCMAKE_BUILD_TYPE=$<CONFIG>
+    -Dgtest_force_shared_crt:BOOL=ON
+)
 
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
+ExternalProject_Get_Property( ${PROJECT_NAME}-extern INSTALL_DIR )
+
+if(WIN32)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING")
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-   UPDATE_COMMAND ""
-   INSTALL_COMMAND ""
-   CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -Dgtest_force_shared_crt:BOOL=ON
-)
+include(GNUInstallDirs)
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_gtest_SOURCE_DIR ${SOURCE_DIR}/googletest )
-set( ${PROJECT_NAME}_gmock_SOURCE_DIR ${SOURCE_DIR}/googlemock )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} BINARY_DIR )
-set( ${PROJECT_NAME}_gtest_BINARY_DIR ${BINARY_DIR}/googlemock/gtest/${_DEBUG_OR_RELEASE} )
-set( ${PROJECT_NAME}_gmock_BINARY_DIR ${BINARY_DIR}/googlemock/${_DEBUG_OR_RELEASE} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_BINARY_DIR} PARENT_SCOPE)
+function(ADD_GTEST_LIBRARY)
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs DEPENDENCIES)
+  cmake_parse_arguments(PARSE_ARGV 1 args "${options}" "${oneValueArgs}" "${multiValueArgs}")
 
-set( ${PROJECT_NAME}_STATIC_LIB
-${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gmock_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gmock_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-PARENT_SCOPE)
+  set(args_NAME ${ARGV0})
 
-add_library(${PROJECT_NAME}_gtest INTERFACE)
-target_include_directories(${PROJECT_NAME}_gtest SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_gtest_SOURCE_DIR}/include>
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_gmock_SOURCE_DIR}/include>
-)
-target_link_libraries(${PROJECT_NAME}_gtest INTERFACE
-  ${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
-)
-add_dependencies(${PROJECT_NAME}_gtest ${${PROJECT_NAME}_EXTERN})
+  set(target "GTest_${args_NAME}")
 
-add_library(${PROJECT_NAME}_gtest_main INTERFACE)
-target_include_directories(${PROJECT_NAME}_gtest_main SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_gtest_SOURCE_DIR}/include>
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_gmock_SOURCE_DIR}/include>
-)
-target_link_libraries(${PROJECT_NAME}_gtest_main INTERFACE
-  ${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-)
-add_dependencies(${PROJECT_NAME}_gtest_main ${${PROJECT_NAME}_EXTERN})
+  add_library(${target} INTERFACE)
 
-add_library(GTest::GTest ALIAS ${PROJECT_NAME}_gtest)
-add_library(GTest::Main ALIAS ${PROJECT_NAME}_gtest_main)
+  target_include_directories(${target} SYSTEM INTERFACE
+    $<BUILD_INTERFACE:${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR}>
+  )
+
+  target_link_libraries(${target} INTERFACE
+    ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${args_NAME}$<$<CONFIG:Debug>:d>${CMAKE_STATIC_LIBRARY_SUFFIX}
+    ${args_DEPENDENCIES}
+  )
+
+  add_library(GTest::${args_NAME} ALIAS ${target})
+
+  add_dependencies(${target} ${PROJECT_NAME}-extern)
+
+endfunction()
+
+find_package(Threads REQUIRED)
+
+add_gtest_library(gtest DEPENDENCIES Threads::Threads)
+add_gtest_library(gtest_main DEPENDENCIES GTest::gtest)
+add_gtest_library(gmock DEPENDENCIES GTest::gtest)
+add_gtest_library(gmock_main DEPENDENCIES GTest::gmock)
diff --git a/dependencies/libxml2/CMakeLists.txt b/dependencies/libxml2/CMakeLists.txt
index b5e5156..aabd6c8 100644
--- a/dependencies/libxml2/CMakeLists.txt
+++ b/dependencies/libxml2/CMakeLists.txt
@@ -13,14 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( libxml2 LANGUAGES NONE )
+project( libxml2 VERSION 2.9.9 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 2.9.7 )
-set( ${PROJECT_NAME}_SHA265 f63c5e7d30362ed28b38bfa1ac6313f9a80230720b7fb6c80575eeab3ff5900c )
-set( ${PROJECT_NAME}_URL "http://xmlsoft.org/sources/libxml2-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 94fb70890143e3c6549f265cee93ec064c80a84c42ad0f23e85ee1fd6540a871 )
 
-set( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
+set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64" )
 
 if (${WIN32})
   set (_MAKE_FLAGS ${_MAKE_FLAGS} "CPP=cl.exe /MP /EP" "CC=cl.exe /MP" )
@@ -41,16 +38,27 @@
   set ( _BUILD_COMMAND ${CMAKE_COMMAND} -E chdir win32 nmake -f Makefile.msvc all ${_MAKE_FLAGS} )
   set ( _INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir win32 nmake -f Makefile.msvc install ${_MAKE_FLAGS} )
 else()
-  set ( _CONFIGURE_COMMAND ${CONFIGURE} $<$<CONFIG:Debug>:--with-debug> --libdir=<INSTALL_DIR>/lib --with-pic --enable-static --without-iconv --without-python --without-lzma CFLAGS=${${PROJECT_NAME}_CFLAGS} "MAKE=$(MAKE)")
+  set ( _CONFIGURE_COMMAND ./configure
+          --prefix=<INSTALL_DIR>
+          $<$<CONFIG:Debug>:--with-debug>
+          --libdir=<INSTALL_DIR>/lib
+          --with-pic
+          --enable-static
+          --without-iconv
+          --without-python
+          --without-lzma
+          CC=${CMAKE_C_COMPILER}
+          CFLAGS=${CMAKE_C_FLAGS}
+          "MAKE=$(MAKE)")
   set ( _BUILD_COMMAND $(MAKE) all )
   set ( _INSTALL_COMMAND $(MAKE) install )
 endif()
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ExternalProject_Add( ${EXTERN}
+   URL "http://xmlsoft.org/sources/libxml2-${PROJECT_VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
@@ -58,27 +66,26 @@
    INSTALL_COMMAND "${_INSTALL_COMMAND}"
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set( INSTALL_DIR ${INSTALL_DIR} )
 
 if (${WIN32})
   set(CMAKE_STATIC_LIBRARY_PREFIX lib)
   set(CMAKE_STATIC_LIBRARY_SUFFIX _a$<$<CONFIG:Debug>:d>.lib)
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include/libxml2>
+add_library(LibXml2_LibXml2 INTERFACE)
+target_include_directories(LibXml2_LibXml2 SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include/libxml2>
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}
+target_link_libraries(LibXml2_LibXml2 INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}
 )
 if (${UNIX})
-  target_link_libraries(${PROJECT_NAME} INTERFACE
-     z
+  target_link_libraries(LibXml2_LibXml2 INTERFACE
+    z
   )
 endif()
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(LibXml2_LibXml2 ${EXTERN})
+
+add_library(LibXml2::LibXml2 ALIAS LibXml2_LibXml2)
diff --git a/dependencies/openssl/CMakeLists.txt b/dependencies/openssl/CMakeLists.txt
index d4dfb3c..9587e00 100644
--- a/dependencies/openssl/CMakeLists.txt
+++ b/dependencies/openssl/CMakeLists.txt
@@ -4,9 +4,9 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,12 +15,8 @@
 
 project( openssl LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.1.0 )
-set( ${PROJECT_NAME}_SHA265 f5c69ff9ac1472c80b868efc1c1c0d8dcfc746d29ebe563de2365dd56dbd8c82 )
-set( ${PROJECT_NAME}_URL "https://www.openssl.org/source/openssl-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-
-set ( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
+set( VERSION 1.1.1a )
+set( SHA256 fc20130f8b7cbd2fb918b2f14e2f429e109c31ddd0fb38fc5d71d9ffed3f9f41 )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
   # No debug for Solaris without patching Configure
@@ -63,21 +59,23 @@
 endif()
 
 if (${WIN32})
+  find_package(Perl REQUIRED)
   # Keeps separate release/debug objects in build script
-  set ( _CONFIGURE_COMMAND ${PERL} Configure ${openssl_PLATFORM} --prefix=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} --openssldir=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} ${openssl_CONFIGURE_FLAGS} )
+  set ( _CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure ${openssl_PLATFORM} --prefix=<INSTALL_DIR>/$<CONFIG> --openssldir=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} )
   set ( _BUILD_COMMAND nmake )
-  set ( _INSTALL_COMMAND nmake install )
+  set ( _INSTALL_COMMAND nmake install_sw )
 else()
    # TODO Configure trips up without MAKE
-  set ( _CONFIGURE_COMMAND MAKE=$(MAKE) ./Configure threads zlib shared --prefix=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} ${openssl_CONFIGURE_FLAGS} ${openssl_PLATFORM} )
+  set ( _CONFIGURE_COMMAND MAKE=$(MAKE) ./Configure threads zlib shared --prefix=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} ${openssl_PLATFORM} )
   set ( _BUILD_COMMAND $(MAKE) all )
   set ( _INSTALL_COMMAND $(MAKE) install_sw )
 endif()
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ExternalProject_Add( ${EXTERN}
+   URL "https://www.openssl.org/source/openssl-${VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
@@ -86,39 +84,37 @@
 # TODO   TEST_COMMAND $(MAKE) test
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR}/${_DEBUG_OR_RELEASE} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
 
 if (${WIN32})
-  set( CRYPTO_NAME libcrypto )
-  set( SSL_NAME libssl )
+  set( CMAKE_SHARED_LIBRARY_PREFIX lib )
 else()
-  set( CRYPTO_NAME crypto )
-  set( SSL_NAME ssl )
   set( CMAKE_LINK_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
 endif()
 
-add_library(ssl INTERFACE)
-target_include_directories(ssl SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(OpenSSL_SSL INTERFACE)
+target_include_directories(OpenSSL_SSL SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(ssl INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${SSL_NAME}${CMAKE_LINK_LIBRARY_SUFFIX}
+target_link_libraries(OpenSSL_SSL INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ssl${CMAKE_LINK_LIBRARY_SUFFIX}
 )
-add_dependencies(ssl ${${PROJECT_NAME}_EXTERN})
+add_dependencies(OpenSSL_SSL ${EXTERN})
 
-add_library(crypto INTERFACE)
-target_include_directories(crypto SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(OpenSSL_Crypto INTERFACE)
+target_include_directories(OpenSSL_Crypto SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(crypto INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${CRYPTO_NAME}${CMAKE_LINK_LIBRARY_SUFFIX}
+target_link_libraries(OpenSSL_Crypto INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}crypto${CMAKE_LINK_LIBRARY_SUFFIX}
 )
-add_dependencies(crypto ${${PROJECT_NAME}_EXTERN})
+add_dependencies(OpenSSL_Crypto ${EXTERN})
 
-set_target_properties(ssl crypto PROPERTIES INTERFACE_LIBRARY_DIR ${${PROJECT_NAME}_INSTALL_DIR}/lib)
-set_target_properties(ssl crypto PROPERTIES INTERFACE_RUNTIME_DIR ${${PROJECT_NAME}_INSTALL_DIR}/bin)
+set_target_properties(OpenSSL_SSL OpenSSL_Crypto PROPERTIES
+  INTERFACE_LIBRARY_DIR ${INSTALL_DIR}/lib
+  INTERFACE_RUNTIME_DIR ${INSTALL_DIR}/bin
+)
 
+add_library(OpenSSL::SSL ALIAS OpenSSL_SSL)
+add_library(OpenSSL::Crypto ALIAS OpenSSL_Crypto)
diff --git a/dependencies/rat/CMakeLists.txt b/dependencies/rat/CMakeLists.txt
new file mode 100644
index 0000000..8615026
--- /dev/null
+++ b/dependencies/rat/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+project( rat VERSION 0.12 LANGUAGES NONE )
+# used to check licenses in source
+
+set( ARTIFACT_NAME apache-rat-${PROJECT_VERSION} )
+set( ARTIFACT_FILE apache-rat-${PROJECT_VERSION}-bin.tar.gz )
+set( ARTIFACT_URL "https://www.apache.org/dyn/closer.cgi?action=download&filename=creadur/${ARTIFACT_NAME}/${ARTIFACT_FILE}" )
+
+file( DOWNLOAD ${ARTIFACT_URL} ${CMAKE_CURRENT_BINARY_DIR}/${ARTIFACT_FILE} )
+execute_process(
+  COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARTIFACT_FILE}
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+set( Rat_JAR ${CMAKE_CURRENT_BINARY_DIR}/${ARTIFACT_NAME}/${ARTIFACT_NAME}.jar CACHE STRING "Full path to Apaceh Rat jar." )
diff --git a/dependencies/sqlite-netFx/CMakeLists.txt b/dependencies/sqlite-netFx/CMakeLists.txt
index d0cd244..4be8359 100644
--- a/dependencies/sqlite-netFx/CMakeLists.txt
+++ b/dependencies/sqlite-netFx/CMakeLists.txt
@@ -13,28 +13,24 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( sqlite-netFx LANGUAGES NONE )
-set( ${PROJECT_NAME}_VERSION 1.0.102.0 )
-set( ${PROJECT_NAME}_SHA265 b980e8a151ddc685ed30652d39573381aef7b623478cba80b02d0795607638e1 )
-set( ${PROJECT_NAME}_URL "https://system.data.sqlite.org/blobs/${${PROJECT_NAME}_VERSION}/${PROJECT_NAME}451-binary-x64-2013-${${PROJECT_NAME}_VERSION}.zip" )
+project( sqlite-netFx VERSION 1.0.102.0 LANGUAGES NONE )
+
+set( SHA256 b980e8a151ddc685ed30652d39573381aef7b623478cba80b02d0795607638e1 )
 
 include(ExternalProject)
-
 ExternalProject_Add( ${PROJECT_NAME}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-  # SOURCE_DIR ${PROJECT_NAME}-prefix
+   URL "https://system.data.sqlite.org/blobs/${PROJECT_VERSION}/${PROJECT_NAME}451-binary-x64-2013-${PROJECT_VERSION}.zip"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_COMMAND ""
    CONFIGURE_COMMAND ""
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/System.Data.SQLite.dll <INSTALL_DIR>
 )
-
-ExternalProject_Get_Property( ${PROJECT_NAME} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
 ExternalProject_Get_Property( ${PROJECT_NAME} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
 
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
-set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION} PARENT_SCOPE)
-set( ${PROJECT_NAME}_SHARED_LIB ${${PROJECT_NAME}_INSTALL_DIR}/System.Data.SQLite.dll PARENT_SCOPE)
+add_library(SQLite_netFx INTERFACE)
+target_link_libraries(SQLite_netFx INTERFACE
+  ${INSTALL_DIR}/System.Data.SQLite.dll
+)
+add_dependencies(SQLite_netFx ${PROJECT_NAME})
+add_library(SQLite::netFx ALIAS SQLite_netFx)
diff --git a/dependencies/sqlite/CMakeLists.txt b/dependencies/sqlite/CMakeLists.txt
index 71dc4da..b26d176 100644
--- a/dependencies/sqlite/CMakeLists.txt
+++ b/dependencies/sqlite/CMakeLists.txt
@@ -4,60 +4,56 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( sqlite LANGUAGES NONE )
+project( sqlite VERSION 3260000 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 3140100 )
-set( ${PROJECT_NAME}_SHA265 bc7182476900017becb81565ecea7775d46ab747a97281aa610f4f45881c47a6 )
-set( ${PROJECT_NAME}_URL "https://www.sqlite.org/2016/sqlite-autoconf-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e )
 
-set ( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-   UPDATE_COMMAND ""
-   CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ExternalProject_Add( ${EXTERN}
+  URL "https://www.sqlite.org/2018/sqlite-amalgamation-${PROJECT_VERSION}.zip"
+  URL_HASH SHA256=${SHA256}
+  UPDATE_COMMAND ""
+  CMAKE_ARGS
+    -DCMAKE_BUILD_TYPE=$<CONFIG>
+    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
 
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} CMakeLists.txt
-    DEPENDEES patch
-    DEPENDERS configure
-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
-    COMMAND ${CMAKE_COMMAND} -E copy  ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
+ExternalProject_Add_Step( ${EXTERN} CMakeLists.txt
+  DEPENDEES patch
+  DEPENDERS configure
+  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
+  BYPRODUCTS ${SOURCE_DIR}/CMakeLists.txt
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${SOURCE_DIR}/CMakeLists.txt
 )
 
 if (WIN32)
   set(CMAKE_SHARED_LIBRARY_SUFFIX .lib)
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(SQLite_sqlite3 INTERFACE)
+target_include_directories(SQLite_sqlite3 SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqlite3$<$<CONFIG:Debug>:d>${CMAKE_SHARED_LIBRARY_SUFFIX}
+target_link_libraries(SQLite_sqlite3 INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqlite3$<$<CONFIG:Debug>:d>${CMAKE_SHARED_LIBRARY_SUFFIX}
 )
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(SQLite_sqlite3 ${EXTERN})
 
-set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_LIBRARY_DIR ${${PROJECT_NAME}_INSTALL_DIR}/lib)
-set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_RUNTIME_DIR ${${PROJECT_NAME}_INSTALL_DIR}/bin)
+set_target_properties(SQLite_sqlite3 PROPERTIES INTERFACE_LIBRARY_DIR ${INSTALL_DIR}/lib)
+set_target_properties(SQLite_sqlite3 PROPERTIES INTERFACE_RUNTIME_DIR ${INSTALL_DIR}/bin)
 
+add_library(SQLite::sqlite3 ALIAS SQLite_sqlite3)
diff --git a/dhimpl/CMakeLists.txt b/dhimpl/CMakeLists.txt
index a5fe395..d256d5d 100644
--- a/dhimpl/CMakeLists.txt
+++ b/dhimpl/CMakeLists.txt
@@ -28,12 +28,13 @@
 
 target_include_directories(DHImpl
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_link_libraries(DHImpl
-  PUBLIC 
+  PUBLIC
     apache-geode
-    crypto
+    OpenSSL::Crypto
     c++11
   PRIVATE
     _WarningsAsError
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 55b6523..0e560a6 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -21,7 +21,7 @@
 RUN apt-get update && \
         apt-get install -y \
             libc++-dev \
-            libc++api-dev \
+            libc++abi-dev \
             clang-${CLANG_VERSION} \
             clang-tidy-${CLANG_VERSION} \
             clang-format-${CLANG_VERSION} \
diff --git a/docs/README.md b/docs/README.md
index 4d28898..a8880dc 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -3,26 +3,30 @@
 This document contains instructions for building and viewing the Apache Geode Native Client User Guide.
 
 - [About](#about)
-- [Prerequisites](#prerequisites)
 - [Bookbinder Usage](#bookbinder-usage)
+- [Docker Setup](#docker-setup)
 - [Building the Documentation](#building-the-documentation)
 
+<a name="about"></a>
 ## About
 
 The Geode-Native repository provides the full source for the Apache Geode Native Client User Guide in markdown format (see _geode-project-dir_/geode-docs/CONTRIBUTE.md for more information on how to use markdown in this context). Users can build the markdown into an HTML user guide using [Bookbinder](https://github.com/pivotal-cf/bookbinder) and the instructions below.
 
 Bookbinder is a Ruby gem that binds  a unified documentation web application from markdown, html, and/or DITA source material. The source material for bookbinder must be stored either in local directories or in GitHub repositories. Bookbinder runs [Middleman](http://middlemanapp.com/) to produce a Rackup app that can be deployed locally or as a web application.
 
+<a name="bookbinder-usage"></a>
 ## Bookbinder Usage
 
 Bookbinder is meant to be used from within a project called a **book**. The book includes a configuration file that describes which documentation repositories to use as source materials. Bookbinder provides a set of scripts to aggregate those repositories and publish them to various locations.
 
 For Geode Native Client, a preconfigured **book** is provided in the directory _geode-native-project-dir_/docs/geode-native-book, which gathers content from the directory _geode-native-project-dir_/docs/geode-native-docs. You can use this configuration to build an HTML version of the Apache Geode Native Client User Guide on your local system.
 
+<a name="docker-setup"></a>
 ## Docker Setup
 
 For ease of use, a Docker image is provided that contains a self-consistent Bookbinder environment. [Install Docker](https://docs.docker.com/install/) if you have not already done so.
 
+<a name="building-the-documentation"></a>
 ## Building the Documentation
 
 1. Navigate to the directory that contains the Dockerfile and run the `docker build` command to create the Bookbinder-enabled Docker image:
diff --git a/docs/api/unix_index.html b/docs/api/unix_index.html
index 464ba6e..9b1d6f1 100755
--- a/docs/api/unix_index.html
+++ b/docs/api/unix_index.html
@@ -32,8 +32,7 @@
 Apache Geode Native Client Documentation</H1>
      </b></FONT>
 <p>
-Access documentation at <a href="http://docs-gemfire-nativeclient-develop.cfapps.io" target="_blank"><b>Pivotal GemFire Native Client Documentation</b></a>.
-NOTE: this is a temporary location until we are ready to host the docs at geode.apache.org.
+Access documentation at <a href="http://geode.apache.org/docs/" target="_blank"><b>Apache Geode Native Documentation</b></a>.
 </p>
 
 <hr color="#cc0000" width="75%" size="2" align="left">
diff --git a/docs/api/win_index.html b/docs/api/win_index.html
index d01f19d..28e82ba 100755
--- a/docs/api/win_index.html
+++ b/docs/api/win_index.html
@@ -31,9 +31,7 @@
      <FONT size=6><b>
 Apache Geode Native Client Documentation</H1>
      </b></FONT>
-<p>
-Access documentation at <a href="http://docs-gemfire-nativeclient-develop.cfapps.io" target="_blank"><b>Pivotal GemFire Native Client Documentation</b></a>.
-NOTE: this is a temporary location until we are ready to host the docs at geode.apache.org.
+<p>Access documentation at <a href="http://geode.apache.org/docs/" target="_blank"><b>Apache Geode Native Documentation</b></a>.
 </p>
 
 <hr color="#cc0000" width="75%" size="2" align="left">
diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile
index 82b3aed..ad5d674 100644
--- a/docs/docker/Dockerfile
+++ b/docs/docker/Dockerfile
@@ -1,3 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 FROM ubuntu:latest
 
 RUN apt-get update
diff --git a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb b/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
index fc17f06..859b20a 100644
--- a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
+++ b/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
@@ -86,6 +86,10 @@
     </li>
 
     <li>
+      <a href="/docs/geode-native/<%=vars.product_version_nodot%>/function-execution.html">Function Execution</a>
+    </li>
+
+    <li>
       <a href="/docs/geode-native/<%=vars.product_version_nodot%>/transactions/transactions.html">Transactions</a>
     </li>
   </ul>
diff --git a/docs/geode-native-book/redirects.rb b/docs/geode-native-book/redirects.rb
index 4b64e23..9ae9f3b 100644
--- a/docs/geode-native-book/redirects.rb
+++ b/docs/geode-native-book/redirects.rb
@@ -14,10 +14,10 @@
 #permissions and limitations under the License.
 
 # Links to API Documentation #
-r301 %r{/releases/latest/javadoc/(.*)}, 'http://geode.apache.org/releases/latest/javadoc/$1'
+r301 %r{/releases/latest/javadoc/(.*)}, 'https://geode.apache.org/releases/latest/javadoc/$1'
 
 # Links to User Guides #
 rewrite '/', '/docs/geode-native/18/about-client-users-guide.html'
 rewrite '/index.html', '/docs/geode-native/18/about-client-users-guide.html'
-r301 %r{/serverman/(.*)}, 'http://geode.apache.org/docs/guide/16/$1'
-r301 %r{/geodeman/(.*)}, 'http://geode.apache.org/docs/guide/16/$1'
+r301 %r{/serverman/(.*)}, 'https://geode.apache.org/docs/guide/18/$1'
+r301 %r{/geodeman/(.*)}, 'https://geode.apache.org/docs/guide/18/$1'
diff --git a/docs/geode-native-docs/configuring/sysprops.html.md.erb b/docs/geode-native-docs/configuring/sysprops.html.md.erb
index d563dea..890c7e6 100644
--- a/docs/geode-native-docs/configuring/sysprops.html.md.erb
+++ b/docs/geode-native-docs/configuring/sysprops.html.md.erb
@@ -50,7 +50,7 @@
 <td>cache-xml-file</td>
 <td>Name and path of the file whose contents are used by default to configure a cache if one is
 created. If not specified, the client starts with an empty cache, which is populated at run time.
-<p>See <a href="../cache-init-file/chapter-overview.html#chapter-overview">Cache Initialization File</a> for more information on the cache initialization file.</p></td>
+</td>
 <td>no default</td>
 </tr>
 <tr class="odd">
diff --git a/docs/geode-native-docs/function-execution.html.md.erb b/docs/geode-native-docs/function-execution.html.md.erb
new file mode 100644
index 0000000..e30dddc
--- /dev/null
+++ b/docs/geode-native-docs/function-execution.html.md.erb
@@ -0,0 +1,300 @@
+---
+title:  Function Execution
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+A client can invoke a server-resident function, with paramaters, and can collect and operate on the returned results.
+
+## <a id="server_side_requirements"></a>Server-side Requirements
+
+To be callable from your client, a function must be resident on the server and registered as available for client access.
+See [Executing a Function in <%=vars.product_name_long%>](/serverman/developing/function_exec/function_execution.html) 
+in the <%=vars.product_name%> User Guide for details on how to write and register server-resident functions.
+
+## <a id="client_side_requirements"></a>Client-side Requirements
+
+The client must connect to the server through a connection pool in order to invoke a server-side function.
+
+## <a id="how_functions_execute"></a>How Functions Execute
+
+1.  The calling client application runs the `execute` method on the `Execution` object. The object must already be registered on the servers.
+2.  The function is invoked on all servers where it needs to run. The locations are determined by the `FunctionService on*` 
+method calls, region configuration, and any filters.
+3.  If the function has results, the result is returned in a `ResultCollector` object.
+4.  The client collects results using the result collector `getResult`.
+
+In every client where you want to execute the function and process the results:
+
+- Use one of the `FunctionService on*` methods to create an `Execution` object. The `on*` methods,
+`onRegion`, `onServer` and `onServers`, define the highest level where the function is run. If
+you use `onRegion` you can further narrow your run scope by setting key filters. The function run
+using `onRegion` is a data dependent function – the others are data-independent functions.
+
+You can run a data dependent function against custom partitioned and colocated partitioned regions. From the client, provide the appropriate key
+ sets to the function call.
+
+-  Use the `Execution` object as needed for additional function configuration. You can:
+    -   Provide a set of data keys to `withFilter` to narrow the execution scope. This works only for `onRegion` Execution objects.
+    -   Provide function arguments to `withArgs`.
+    -   Define a custom `ResultCollector` to `withCollector`.
+
+-  Call the `Execution` object execute method to run the function.
+
+## <a id="processing_function_results"></a>Processing Function Results
+
+The client may use the default result collector. If the client needs special results handling, code
+a custom `ResultsCollector` implementation to replace the default. Use the
+`Execution::withCollector` method to define the custom collector.
+
+For example, to program your client to get the results from a function, use the result collector returned from the function execution, like this:
+
+```cpp
+ResultCollectorPtr rc = FunctionService::onRegion(region)
+                    ->withArgs(args)
+                    ->withFilter(keySet)
+                    ->withCollector(new MyCustomResultCollector())
+                    .execute(Function);
+CacheableVectorPtr functionResult = rc.getResult();
+```
+
+The `getResult` methods of the default result collector block until all results are received, then return the full result set.
+
+To handle the results in a custom manner:
+
+1.  Write a class that implements the `ResultCollector` interface to handle the results in a custom manner. The methods are of two types: one handles data and information from <%=vars.product_name%> and populates the results set, while the other returns the compiled results to the calling application:
+    -  `addResult` is called when results arrive from the `Function` methods. Use `addResult` to add a single result to the ResultCollector.
+    -  `endResults` is called to signal the end of all results from the function execution.
+    -  `getResult` is available to your executing application (the one that calls `Execution.execute`) to retrieve the results. This may block until all results are available.
+    -  `clearResults` is called to clear partial results from the results collector. This is used only for highly available `onRegion` functions where the calling application waits for the results. If the call fails, before <%=vars.product_name%> retries the execution, it calls `clearResults` to ready the instance for a clean set of results.
+2.  Use the `Execution` object in your executing member to call `withCollector`, passing your custom collector, as shown in the example above.
+
+# <a id="examples"></a>Examples
+
+The native client source release contains examples of function execution written for .NET and
+C++. The examples are located in `../examples/dotnet/FunctionExecutionCs` and
+`../examples/cpp/function-execution`, respectively.
+
+Both examples begin with a server-side script that runs `gfsh` commands to create
+a region, simply called "partition_region", which is preloaded with a JAR file containing the
+server-side Java function code. The function, called "ExampleMultiGetFunction", is defined in the
+`examples/utilities` directory of your distribution. As its input parameter, the function takes an array of keys,
+then performs a `get` on each key and returns an array containing the results.
+The function does not load values into the data store. That is a separate operation, performed in these examples by
+the client, and does not involve the server-side function.
+
+As prerequisites, the client code must be aware of the connection to the server, the name of the function, and the expected type/format 
+of the input parameter and return value.
+
+The client:
+
+- creates an execution object
+- populates the execution object with input parameters
+- invokes the object's execute method to invoke the server-side function.
+
+If the client expects results, it must create a result
+object. Optionally, the client can use a provided result collector which offers some predefined
+methods for iterating over and processing return values.
+
+## <a id="dotnet_example"></a>.NET Example
+This section contains code snippets showing highlights of the .NET function execution example. They are not intended for cut-and-paste execution.
+For the complete source, see the example source directory.
+
+The .NET example creates a cache, then uses it to create a connection pool.
+
+```csharp
+   var cacheFactory = new CacheFactory()
+       .Set("log-level", "none");
+   var cache = cacheFactory.Create();
+
+   var poolFactory = cache.GetPoolFactory()
+       .AddLocator("localhost", 10334);
+   var pool = poolFactory.Create("pool");
+```
+
+The example uses the connection pool to create a region, with the same characteristics and name as the server-side region (`partition_region`).
+
+```csharp
+   var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+       .SetPoolName("pool");
+   var region = regionFactory.Create<object, object>("partition_region");
+```
+
+The sample client populates the server's datastore with values, using the API and some sample key-value pairs.
+
+```csharp
+   string rtimmonsKey = "rtimmons";
+   string rtimmonsValue = "Robert Timmons";
+   string scharlesKey = "scharles";
+   string scharlesValue = "Sylvia Charles";
+   region.Put(rtimmonsKey, rtimmonsValue, null);
+   region.Put(scharlesKey, scharlesValue, null);
+```
+
+To confirm that the data has been stored, the client uses the API to retrieve the values and write them to the console.
+This is done without reference to the server-side example function.
+
+```csharp
+   var user1 = region.Get(rtimmonsKey, null);
+   var user2 = region.Get(scharlesKey, null);
+
+   Console.WriteLine(rtimmonsKey + " = " + user1);
+   Console.WriteLine(scharlesKey + " = " + user2);
+```
+
+Next, the client retrieves those same values using the server-side example function.
+The client code creates the input parameter, an array of keys whose values are to be retrieved.
+
+```csharp
+   ArrayList keyArgs = new ArrayList();
+   keyArgs.Add(rtimmonsKey);
+   keyArgs.Add(scharlesKey);
+```
+
+The client creates an execution object using `Client.FunctionService.OnRegion` and specifying the region.
+
+```csharp
+   var exc = Client.FunctionService<object>.OnRegion<object, object>(region);
+```
+
+The client then calls the server side function with its input arguments and stores the results in a Client.IResultCollector.
+
+```csharp
+   Client.IResultCollector<object> rc = exc.WithArgs<object>(keyArgs).Execute("ExampleMultiGetFunction");
+```
+
+It then loops through the results and prints the retrieved values.
+
+```csharp
+   ICollection<object> res = rc.GetResult();
+
+   Console.WriteLine("Function Execution Results:");
+   Console.WriteLine("   Count = {0}", res.Count);
+
+   foreach (List<object> item in res)
+   {
+     foreach (object item2 in item)
+     {
+       Console.WriteLine("   value = {0}", item2.ToString());
+     }
+   }
+```
+
+## <a id="cpp_example"></a>C++ Example
+This section contains code snippets showing highlights of the C++ function execution example. They are not intended for cut-and-paste execution.
+For the complete source, see the example source directory.
+
+The C++ example creates a cache.
+
+```cpp
+Cache setupCache() {
+  return CacheFactory()
+      .set("log-level", "none")
+      .create();
+}
+```
+
+The example client uses the cache to create a connection pool, 
+
+```cpp
+void createPool(const Cache& cache) {
+  auto pool = cache.getPoolManager()
+      .createFactory()
+      .addServer("localhost", EXAMPLE_SERVER_PORT)
+      .create("pool");
+}
+```
+
+Then, using that pool, the client creates a region with the same characteristics and name as the server-side region (`partition_region`).
+
+```cpp
+std::shared_ptr<Region> createRegion(Cache& cache) {
+  auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
+  auto region = regionFactory.setPoolName("pool").create("partition_region");
+
+  return region;
+}
+```
+
+The sample client populates the server's datastore with values, using the API and some sample key-value pairs.
+
+```cpp
+void populateRegion(const std::shared_ptr<Region>& region) {
+  for (int i = 0; i < keys.size(); i++) {
+    region->put(keys[i], values[i]);
+  }
+}
+```
+
+As confirmation that the data has been stored, the sample client uses the API to retrieve the values and write them to the console.
+This is done without reference to the server-side example function.
+
+```cpp
+std::shared_ptr<CacheableVector> populateArguments() {
+  auto arguments = CacheableVector::create();
+  for (int i = 0; i < keys.size(); i++) {
+    arguments->push_back(CacheableKey::create(keys[i]));
+  }
+  return arguments;
+}
+```
+
+Next, the client retrieves those same values using the server-side example function.
+The client code creates the input parameter, an array of keys whose values are to be retrieved.
+
+```cpp
+std::vector<std::string> executeFunctionOnServer(const std::shared_ptr<Region> region,
+    const std::shared_ptr<CacheableVector> arguments) {
+  std::vector<std::string> resultList;
+```
+
+The client creates an execution object using `Client.FunctionService.OnRegion` and specifying the region.
+
+```cpp
+  auto functionService = FunctionService::onServer(region->getRegionService());
+```
+
+The client then calls the server side function with its input arguments and stores the results in a Client.IResultCollector.
+
+```cpp
+  if(auto executeFunctionResult = functionService.withArgs(arguments).execute(getFuncIName)->getResult()) {
+    for (auto &arrayList: *executeFunctionResult) {
+      for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
+        resultList.push_back(std::dynamic_pointer_cast<CacheableString>(cachedString)->value());
+      }
+    }
+  } else {
+    std::cout << "get executeFunctionResult is NULL\n";
+  }
+
+  return resultList;
+}
+```
+
+It then loops through the results and prints the retrieved values.
+
+```cpp
+void printResults(const std::vector<std::string>& resultList) {
+  std::cout << "Result count = " << resultList.size() << std::endl << std::endl;
+  int i = 0;
+  for (auto &cachedString: resultList) {
+    std::cout << "\tResult[" << i << "]=" << cachedString << std::endl;
+    ++i;
+  }
+```
+
diff --git a/docs/geode-native-docs/function-execution.html.md.erb-NOTOC b/docs/geode-native-docs/function-execution.html.md.erb-NOTOC
new file mode 100644
index 0000000..92ef29b
--- /dev/null
+++ b/docs/geode-native-docs/function-execution.html.md.erb-NOTOC
@@ -0,0 +1,300 @@
+---
+title:  Function Execution
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+A client can invoke a server-resident function, with paramaters, and can collect and operate on the returned results.
+
+## Server-side Requirements
+
+To be callable from your client, a function must be resident on the server and registered as available for client access.
+See [Executing a Function in <%=vars.product_name_long%>](/serverman/developing/function_exec/function_execution.html) 
+in the <%=vars.product_name%> User Guide for details on how to write and register server-resident functions.
+
+## Client-side Requirements
+
+The client must connect to the server through a connection pool in order to invoke a server-side function.
+
+## How Functions Execute
+
+1.  The calling client application runs the `execute` method on the `Execution` object. The object must already be registered on the servers.
+2.  The function is invoked on all servers where it needs to run. The locations are determined by the `FunctionService on*` 
+method calls, region configuration, and any filters.
+3.  If the function has results, the result is returned in a `ResultCollector` object.
+4.  The client collects results using the result collector `getResult`.
+
+In every client where you want to execute the function and process the results:
+
+- Use one of the `FunctionService on*` methods to create an `Execution` object. The `on*` methods,
+`onRegion`, `onServer` and `onServers`, define the highest level where the function is run. If
+you use `onRegion` you can further narrow your run scope by setting key filters. The function run
+using `onRegion` is a data dependent function – the others are data-independent functions.
+
+You can run a data dependent function against custom partitioned and colocated partitioned regions. From the client, provide the appropriate key
+ sets to the function call.
+
+-  Use the `Execution` object as needed for additional function configuration. You can:
+    -   Provide a set of data keys to `withFilter` to narrow the execution scope. This works only for `onRegion` Execution objects.
+    -   Provide function arguments to `withArgs`.
+    -   Define a custom `ResultCollector` to `withCollector`.
+
+-  Call the `Execution` object execute method to run the function.
+
+## Processing Function Results
+
+The client may use the default result collector. If the client needs special results handling, code
+a custom `ResultsCollector` implementation to replace the default. Use the
+`Execution::withCollector` method to define the custom collector.
+
+For example, to program your client to get the results from a function, use the result collector returned from the function execution, like this:
+
+```cpp
+ResultCollectorPtr rc = FunctionService::onRegion(region)
+                    ->withArgs(args)
+                    ->withFilter(keySet)
+                    ->withCollector(new MyCustomResultCollector())
+                    .execute(Function);
+CacheableVectorPtr functionResult = rc.getResult();
+```
+
+The `getResult` methods of the default result collector block until all results are received, then return the full result set.
+
+To handle the results in a custom manner:
+
+1.  Write a class that implements the `ResultCollector` interface to handle the results in a custom manner. The methods are of two types: one handles data and information from <%=vars.product_name%> and populates the results set, while the other returns the compiled results to the calling application:
+    -  `addResult` is called when results arrive from the `Function` methods. Use `addResult` to add a single result to the ResultCollector.
+    -  `endResults` is called to signal the end of all results from the function execution.
+    -  `getResult` is available to your executing application (the one that calls `Execution.execute`) to retrieve the results. This may block until all results are available.
+    -  `clearResults` is called to clear partial results from the results collector. This is used only for highly available `onRegion` functions where the calling application waits for the results. If the call fails, before <%=vars.product_name%> retries the execution, it calls `clearResults` to ready the instance for a clean set of results.
+2.  Use the `Execution` object in your executing member to call `withCollector`, passing your custom collector, as shown in the example above.
+
+# Examples
+
+The native client source release contains examples of function execution written for .NET and
+C++. The examples are located in `../examples/dotnet/FunctionExecutionCs` and
+`../examples/cpp/function-execution`, respectively.
+
+Both examples begin with a server-side script that runs `gfsh` commands to create
+a region, simply called "partition_region", which is preloaded with a JAR file containing the
+server-side Java function code. The function, called "ExampleMultiGetFunction", is defined in the
+`examples/utilities` directory of your distribution. As its input parameter, the function takes an array of keys,
+then performs a `get` on each key and returns an array containing the results.
+The function does not load values into the data store. That is a separate operation, performed in these examples by
+the client, and does not involve the server-side function.
+
+As prerequisites, the client code must be aware of the connection to the server, the name of the function, and the expected type/format 
+of the input parameter and return value.
+
+The client:
+
+- creates an execution object
+- populates the execution object with input parameters
+- invokes the object's execute method to invoke the server-side function.
+
+If the client expects results, it must create a result
+object. Optionally, the client can use a provided result collector which offers some predefined
+methods for iterating over and processing return values.
+
+## .NET Example
+This section contains code snippets showing highlights of the .NET function execution example. They are not intended for cut-and-paste execution.
+For the complete source, see the example source directory.
+
+The .NET example creates a cache, then uses it to create a connection pool.
+
+```csharp
+   var cacheFactory = new CacheFactory()
+       .Set("log-level", "none");
+   var cache = cacheFactory.Create();
+
+   var poolFactory = cache.GetPoolFactory()
+       .AddLocator("localhost", 10334);
+   var pool = poolFactory.Create("pool");
+```
+
+The example uses the connection pool to create a region, with the same characteristics and name as the server-side region (`partition_region`).
+
+```csharp
+   var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+       .SetPoolName("pool");
+   var region = regionFactory.Create<object, object>("partition_region");
+```
+
+The sample client populates the server's datastore with values, using the API and some sample key-value pairs.
+
+```csharp
+   string rtimmonsKey = "rtimmons";
+   string rtimmonsValue = "Robert Timmons";
+   string scharlesKey = "scharles";
+   string scharlesValue = "Sylvia Charles";
+   region.Put(rtimmonsKey, rtimmonsValue, null);
+   region.Put(scharlesKey, scharlesValue, null);
+```
+
+To confirm that the data has been stored, the client uses the API to retrieve the values and write them to the console.
+This is done without reference to the server-side example function.
+
+```csharp
+   var user1 = region.Get(rtimmonsKey, null);
+   var user2 = region.Get(scharlesKey, null);
+
+   Console.WriteLine(rtimmonsKey + " = " + user1);
+   Console.WriteLine(scharlesKey + " = " + user2);
+```
+
+Next, the client retrieves those same values using the server-side example function.
+The client code creates the input parameter, an array of keys whose values are to be retrieved.
+
+```csharp
+   ArrayList keyArgs = new ArrayList();
+   keyArgs.Add(rtimmonsKey);
+   keyArgs.Add(scharlesKey);
+```
+
+The client creates an execution object using `Client.FunctionService.OnRegion` and specifying the region.
+
+```csharp
+   var exc = Client.FunctionService<object>.OnRegion<object, object>(region);
+```
+
+The client then calls the server side function with its input arguments and stores the results in a Client.IResultCollector.
+
+```csharp
+   Client.IResultCollector<object> rc = exc.WithArgs<object>(keyArgs).Execute("ExampleMultiGetFunction");
+```
+
+It then loops through the results and prints the retrieved values.
+
+```csharp
+   ICollection<object> res = rc.GetResult();
+
+   Console.WriteLine("Function Execution Results:");
+   Console.WriteLine("   Count = {0}", res.Count);
+
+   foreach (List<object> item in res)
+   {
+     foreach (object item2 in item)
+     {
+       Console.WriteLine("   value = {0}", item2.ToString());
+     }
+   }
+```
+
+## C++ Example
+This section contains code snippets showing highlights of the C++ function execution example. They are not intended for cut-and-paste execution.
+For the complete source, see the example source directory.
+
+The C++ example creates a cache.
+
+```cpp
+Cache setupCache() {
+  return CacheFactory()
+      .set("log-level", "none")
+      .create();
+}
+```
+
+The example client uses the cache to create a connection pool, 
+
+```cpp
+void createPool(const Cache& cache) {
+  auto pool = cache.getPoolManager()
+      .createFactory()
+      .addServer("localhost", EXAMPLE_SERVER_PORT)
+      .create("pool");
+}
+```
+
+Then, using that pool, the client creates a region with the same characteristics and name as the server-side region (`partition_region`).
+
+```cpp
+std::shared_ptr<Region> createRegion(Cache& cache) {
+  auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
+  auto region = regionFactory.setPoolName("pool").create("partition_region");
+
+  return region;
+}
+```
+
+The sample client populates the server's datastore with values, using the API and some sample key-value pairs.
+
+```cpp
+void populateRegion(const std::shared_ptr<Region>& region) {
+  for (int i = 0; i < keys.size(); i++) {
+    region->put(keys[i], values[i]);
+  }
+}
+```
+
+As confirmation that the data has been stored, the sample client uses the API to retrieve the values and write them to the console.
+This is done without reference to the server-side example function.
+
+```cpp
+std::shared_ptr<CacheableVector> populateArguments() {
+  auto arguments = CacheableVector::create();
+  for (int i = 0; i < keys.size(); i++) {
+    arguments->push_back(CacheableKey::create(keys[i]));
+  }
+  return arguments;
+}
+```
+
+Next, the client retrieves those same values using the server-side example function.
+The client code creates the input parameter, an array of keys whose values are to be retrieved.
+
+```cpp
+std::vector<std::string> executeFunctionOnServer(const std::shared_ptr<Region> region,
+    const std::shared_ptr<CacheableVector> arguments) {
+  std::vector<std::string> resultList;
+```
+
+The client creates an execution object using `Client.FunctionService.OnRegion` and specifying the region.
+
+```cpp
+  auto functionService = FunctionService::onServer(region->getRegionService());
+```
+
+The client then calls the server side function with its input arguments and stores the results in a Client.IResultCollector.
+
+```cpp
+  if(auto executeFunctionResult = functionService.withArgs(arguments).execute(getFuncIName)->getResult()) {
+    for (auto &arrayList: *executeFunctionResult) {
+      for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
+        resultList.push_back(std::dynamic_pointer_cast<CacheableString>(cachedString)->value());
+      }
+    }
+  } else {
+    std::cout << "get executeFunctionResult is NULL\n";
+  }
+
+  return resultList;
+}
+```
+
+It then loops through the results and prints the retrieved values.
+
+```cpp
+void printResults(const std::vector<std::string>& resultList) {
+  std::cout << "Result count = " << resultList.size() << std::endl << std::endl;
+  int i = 0;
+  for (auto &cachedString: resultList) {
+    std::cout << "\tResult[" << i << "]=" << cachedString << std::endl;
+    ++i;
+  }
+```
+
diff --git a/docs/geode-native-docs/security/authentication.html.md.erb b/docs/geode-native-docs/security/authentication.html.md.erb
index 8c0597e..9e8eee2 100644
--- a/docs/geode-native-docs/security/authentication.html.md.erb
+++ b/docs/geode-native-docs/security/authentication.html.md.erb
@@ -19,11 +19,9 @@
 limitations under the License.
 -->
 
-A client is authenticated when it connects with valid credentials to a <%=vars.product_name%> cache server that is configured with the client `Authenticator` callback.
+A client is authenticated when it connects with valid credentials to a <%=vars.product_name%> cache server that is configured with the client authentication callback.
 For details on the server's role in authentication and what it expects from the client, see [Implementing Authentication](geodeman/managing/security/implementing_authentication.html) in the *<%=vars.product_name%> User Guide*.
 
-Examples of various implementations can be found in the Native Client source distribution's `../templates/security` directory.
-
 In your application, authentication credentials must be set when creating the cache. In practice,
 this means setting the authentication credentials when you create the CacheFactory.
 
@@ -32,6 +30,15 @@
 The following excerpt is taken from the .NET example provided with your Native Client distribution in the `..\examples\dotnet\AuthInitialize` directory.
 In this C# authentication example, credentials are implemented in the GetCredentials member function of the ExampleAuthInitialize class, which implements the IAuthInitialize interface.
 
+In this C# authentication example, the `CacheFactory` creation process sets the authentication callback:
+
+```cs
+  var cacheFactory = new CacheFactory()
+    .Set("log-level", "none")
+    .SetAuthInitialize(new ExampleAuthInitialize());
+```
+
+Credentials are implemented in the `GetCredentials` member function of the `ExampleAuthInitialize` class, which implements the `IAuthInitialize` interface:
 
 ```cs
   class ExampleAuthInitialize : IAuthInitialize
diff --git a/examples/cpp/BUILD-CPP-EXAMPLES.md b/examples/BUILD-EXAMPLES.md
similarity index 84%
rename from examples/cpp/BUILD-CPP-EXAMPLES.md
rename to examples/BUILD-EXAMPLES.md
index f70f578..bdd1b97 100644
--- a/examples/cpp/BUILD-CPP-EXAMPLES.md
+++ b/examples/BUILD-EXAMPLES.md
@@ -12,13 +12,13 @@
 
    **For Windows:** For reliable behavior of the example scripts, do not choose a workspace with directory names or filenames that contain spaces.
 
-1. Navigate to the directory for a specific example and use `cmake` to build it. For non-Windows systems, the commands are:
+1. Navigate to the examples directory and use `cmake` to build all examples. For non-Windows systems, the commands are:
 
     ```
-    $ cd workspace/examples/cpp/<example>
+    $ cd workspace/examples
     $ mkdir build
     $ cd build
-    $ cmake ..
+    $ cmake .. -DGEODE_ROOT="<geode-install-root-dir>"
     $ cmake --build . -- <optional parallelism parameter>
     ```
   where the optional parallelism parameter is of the form `-j n`.
@@ -26,7 +26,7 @@
    **For Windows:** Include options that specify the generator, the architecture toolset, and the path to the Geode Native installation:
 
     ```
-    $ cd workspace/examples/cpp/<example>
+    $ cd workspace/examples/
     $ mkdir build
     $ cd build
     $ cmake .. -G"Visual Studio 14 2015 Win64" -Thost=x64 -DGeodeNative_ROOT="<NC-install-root-dir>"
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 0566b6c..f5db00f 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -25,14 +25,28 @@
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt @ONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGeodeNative.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake/Find${PRODUCT_NAME_NOSPACE}.cmake @ONLY)
 
+install(DIRECTORY .
+  DESTINATION examples
+  USE_SOURCE_PERMISSIONS
+  PATTERN "*.in" EXCLUDE
+  PATTERN "dotnet" EXCLUDE)
 install(FILES
   ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt
   DESTINATION examples)
 install(FILES
+  ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/FindGeode.cmake
+  DESTINATION examples/cmake)
+install(FILES
   ${CMAKE_CURRENT_BINARY_DIR}/cmake/Find${PRODUCT_NAME_NOSPACE}.cmake
   DESTINATION examples/cmake)
 
 add_subdirectory(cpp)
 if (BUILD_CLI)
+  install(DIRECTORY dotnet
+    DESTINATION examples
+    USE_SOURCE_PERMISSIONS
+    PATTERN "*.in" EXCLUDE)
+
   add_subdirectory(dotnet)
 endif()
+add_subdirectory(utilities)
diff --git a/examples/CMakeLists.txt.in b/examples/CMakeLists.txt.in
index f124022..6e363b6 100644
--- a/examples/CMakeLists.txt.in
+++ b/examples/CMakeLists.txt.in
@@ -19,3 +19,5 @@
 
 add_subdirectory(cpp)
 @DOTNET_SUB_DIRECTORY@
+add_subdirectory(utilities)
+
diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
index 8ab76e9..b87067d 100644
--- a/examples/cpp/CMakeLists.txt
+++ b/examples/cpp/CMakeLists.txt
@@ -19,32 +19,15 @@
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt COPYONLY)
 
-install(FILES
-  ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt
-  BUILD-CPP-EXAMPLES.md
-  DESTINATION examples/cpp)
-
 function(add_example)
   set(options)
   set(oneValueArgs NAME)
   set(multiValueArgs SOURCE)
   cmake_parse_arguments(ADD_EXAMPLE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
-  foreach(SOURCE ${ADD_EXAMPLE_SOURCE})
-    list(APPEND EXAMPLE_SOURCES_PATHS ${ADD_EXAMPLE_NAME}/${SOURCE})
-  endforeach()
-
   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.cpp_example.in
     ${CMAKE_CURRENT_BINARY_DIR}/${ADD_EXAMPLE_NAME}/CMakeLists.txt
     @ONLY)
-
-  install(FILES
-    ${CMAKE_CURRENT_BINARY_DIR}/${ADD_EXAMPLE_NAME}/CMakeLists.txt
-    ${EXAMPLE_SOURCES_PATHS}
-    ${ADD_EXAMPLE_NAME}/README.md
-    ${ADD_EXAMPLE_NAME}/startserver.sh
-    ${ADD_EXAMPLE_NAME}/stopserver.sh
-    DESTINATION examples/cpp/${ADD_EXAMPLE_NAME})
 endfunction()
 
 add_example(NAME continuousquery
@@ -53,6 +36,9 @@
 add_example(NAME dataserializable
     SOURCE main.cpp Order.cpp Order.hpp)
 
+add_example(NAME function-execution
+        SOURCE main.cpp)
+
 add_example(NAME pdxserializable
     SOURCE main.cpp Order.cpp Order.hpp)
 
@@ -62,9 +48,16 @@
 add_example(NAME put-get-remove
     SOURCE main.cpp)
 
-add_example(NAME function-execution
-    SOURCE main.cpp)
-
 add_example(NAME remotequery
     SOURCE main.cpp Order.cpp Order.hpp)
 
+add_example(NAME transaction
+        SOURCE main.cpp)
+
+  install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  DESTINATION examples/
+  PATTERN "./*.in" EXCLUDE
+  PATTERN "CMakeFiles" EXCLUDE
+  PATTERN "Makefile" EXCLUDE
+  PATTERN "cmake_install.cmake" EXCLUDE)
+
diff --git a/examples/cpp/CMakeLists.txt.cpp_example.in b/examples/cpp/CMakeLists.txt.cpp_example.in
index c39ad9f..0e90284 100644
--- a/examples/cpp/CMakeLists.txt.cpp_example.in
+++ b/examples/cpp/CMakeLists.txt.cpp_example.in
@@ -20,15 +20,13 @@
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
 set(CMAKE_CXX_STANDARD 11)
 
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-    add_compile_options(-m64)
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64")
-endif()
-
 find_package(@PRODUCT_NAME_NOSPACE@ REQUIRED COMPONENTS cpp)
 
 add_executable(${PROJECT_NAME} @ADD_EXAMPLE_SOURCE@)
 
+configure_file("startserver.sh" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+configure_file("stopserver.sh" ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+
 target_link_libraries(${PROJECT_NAME}
     PUBLIC
     @PRODUCT_NAME_NOSPACE@::cpp)
diff --git a/examples/cpp/CMakeLists.txt.in b/examples/cpp/CMakeLists.txt.in
index a1854c0..a9852a1 100644
--- a/examples/cpp/CMakeLists.txt.in
+++ b/examples/cpp/CMakeLists.txt.in
@@ -19,8 +19,9 @@
 
 add_subdirectory(continuousquery)
 add_subdirectory(dataserializable)
+add_subdirectory(function-execution)
 add_subdirectory(pdxserializable)
 add_subdirectory(pdxserializer)
 add_subdirectory(put-get-remove)
-add_subdirectory(function-execution)
 add_subdirectory(remotequery)
+add_subdirectory(transaction)
diff --git a/examples/cpp/continuousquery/CMakeLists.txt b/examples/cpp/continuousquery/CMakeLists.txt
index bf0b415..11b5ac6 100644
--- a/examples/cpp/continuousquery/CMakeLists.txt
+++ b/examples/cpp/continuousquery/CMakeLists.txt
@@ -20,11 +20,6 @@
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
 set(CMAKE_CXX_STANDARD 11)
 
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-    add_compile_options(-m64)
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64")
-endif()
-
 find_package(GeodeNative REQUIRED COMPONENTS cpp)
 
 add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
diff --git a/examples/cpp/continuousquery/README.md b/examples/cpp/continuousquery/README.md
index f2f9941..59d557b 100644
--- a/examples/cpp/continuousquery/README.md
+++ b/examples/cpp/continuousquery/README.md
@@ -34,7 +34,7 @@
 1. Execute `continuousquery`:
 
   ```
-  $ build/continuousquery
+  $ ./continuousquery
   Executing continuous query
   Create orders
   Putting and changing Order objects in the region
diff --git a/examples/cpp/continuousquery/startserver.sh b/examples/cpp/continuousquery/startserver.sh
index 2c947ea..7342182 100755
--- a/examples/cpp/continuousquery/startserver.sh
+++ b/examples/cpp/continuousquery/startserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/continuousquery/stopserver.sh b/examples/cpp/continuousquery/stopserver.sh
index f406a23..f80cd6e 100755
--- a/examples/cpp/continuousquery/stopserver.sh
+++ b/examples/cpp/continuousquery/stopserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/dataserializable/CMakeLists.txt b/examples/cpp/dataserializable/CMakeLists.txt
index ea1a552..22ac649 100644
--- a/examples/cpp/dataserializable/CMakeLists.txt
+++ b/examples/cpp/dataserializable/CMakeLists.txt
@@ -20,11 +20,6 @@
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
 set(CMAKE_CXX_STANDARD 11)
 
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-    add_compile_options(-m64)
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64")
-endif()
-
 find_package(GeodeNative REQUIRED COMPONENTS cpp)
 
 add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
diff --git a/examples/cpp/dataserializable/README.md b/examples/cpp/dataserializable/README.md
index 9bad0d8..03f5a64 100644
--- a/examples/cpp/dataserializable/README.md
+++ b/examples/cpp/dataserializable/README.md
@@ -35,7 +35,7 @@
 1. Execute `dataserializable`:
 
   ```
-  $ build/dataserializable
+  $ ./dataserializable
   Create orders
   Storing orders in the region
   Getting the orders from the region
diff --git a/examples/cpp/dataserializable/startserver.sh b/examples/cpp/dataserializable/startserver.sh
old mode 100644
new mode 100755
index 2c947ea..7342182
--- a/examples/cpp/dataserializable/startserver.sh
+++ b/examples/cpp/dataserializable/startserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/dataserializable/stopserver.sh b/examples/cpp/dataserializable/stopserver.sh
old mode 100644
new mode 100755
diff --git a/examples/cpp/function-execution/README.md b/examples/cpp/function-execution/README.md
index 394b23c..a20deed 100644
--- a/examples/cpp/function-execution/README.md
+++ b/examples/cpp/function-execution/README.md
@@ -27,170 +27,26 @@
 
   (1) Executing - start locator --name=locator
   ...
-  (2) Executing - start server --name=server
+  (2) Executing - deploy --jar=../../utilities/example.jar
   ...
-(3) Executing - create region --name=example_userinfo --type=PARTITION
+  (3) Executing - start server --name=the-server --server-port=50505
+  ...
+  (4) Executing - create region --name=parition_region --type=PARTITION
 
-  Member | Status
-  ------ | ----------------------------------------------
-  server | Region "/partition_region" created on "the-server"
-  ```
-(1) Executing - start locator --name=locator
-
-...
-Locator in /nc_install/examples/cpp/function-execution/locator on 10.118.33.178[10334] as locator is currently online.
-Process ID: 63773
-Uptime: 2 seconds
-Geode Version: 1.6.0
-Java Version: 1.8.0_162
-Log File: /nc_install/examples/cpp/function-execution/locator/locator.log
-JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
-Class-Path: /apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/apache-geode-1.6.0/lib/geode-dependencies.jar
-
-Successfully connected to: JMX Manager [host=10.118.33.178, port=1099]
-
-Cluster configuration service is up and running.
-
-
-(2) Executing - deploy --jar=../../javaobject.jar
-
-
-
-(3) Executing - start server --name=the-server --server-port=40404
-
-....
-Server in /nc_install/examples/cpp/function-execution/the-server on 10.118.33.178[40404] as the-server is currently online.
-Process ID: 63778
-Uptime: 5 seconds
-Geode Version: 1.6.0
-Java Version: 1.8.0_162
-Log File: /nc_install/examples/cpp/function-execution/the-server/the-server.log
-JVM Arguments: -Dgemfire.default.locators=10.118.33.178[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
-Class-Path: /apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/apache-geode-1.6.0/lib/geode-dependencies.jar
-
-
-(4) Executing - create region --name=partition_region --type=PARTITION
-
-  Member   | Status
----------- | --------------------------------------------------
-the-server | Region "/partition_region" created on "the-server"
-
-
-(5) Executing - start server --name=the-second-server --server-port=50505
-
-....
-Server in /nc_install/examples/cpp/function-execution/the-second-server on 10.118.33.178[50505] as the-second-server is currently online.
-Process ID: 63779
-Uptime: 4 seconds
-Geode Version: 1.6.0
-Java Version: 1.8.0_162
-Log File: /nc_install/examples/cpp/function-execution/the-second-server/the-second-server.log
-JVM Arguments: -Dgemfire.default.locators=10.118.33.178[10334] -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
-Class-Path: /apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/apache-geode-1.6.0/lib/geode-dependencies.jar
-1. Execute `function-execution`:
+  Member     | Status
+  ---------- | ----------------------------------------------
+  the-server | Region "/partition_region" created on "the-server"
+  
+1. Run the `function-execution` example:
 
   ```
+  $ ./function-execution 
+  Result count = 3
 
-  $./function-execution 
-Created CacheFactory
-Created the Region
-test data independent function with result on one server
-get: result count = 17
-get result[0]=VALUE--1
-get result[1]=VALUE--3
-get result[2]=VALUE--5
-get result[3]=VALUE--7
-get result[4]=VALUE--9
-get result[5]=VALUE--11
-get result[6]=VALUE--13
-get result[7]=VALUE--15
-get result[8]=VALUE--17
-get result[9]=VALUE--19
-get result[10]=VALUE--21
-get result[11]=VALUE--23
-get result[12]=VALUE--25
-get result[13]=VALUE--27
-get result[14]=VALUE--29
-get result[15]=VALUE--31
-get result[16]=VALUE--33
-test data independent function without result on one server
-test data independent function with result on all servers
-get: result count = 34
-get result[0]=KEY--1
-get result[1]=KEY--3
-get result[2]=KEY--5
-get result[3]=KEY--7
-get result[4]=KEY--9
-get result[5]=KEY--11
-get result[6]=KEY--13
-get result[7]=KEY--15
-get result[8]=VALUE--17
-get result[9]=VALUE--19
-get result[10]=VALUE--21
-get result[11]=VALUE--23
-get result[12]=VALUE--25
-get result[13]=VALUE--27
-get result[14]=VALUE--29
-get result[15]=VALUE--31
-get result[16]=VALUE--33
-get result[17]=KEY--1
-get result[18]=KEY--3
-get result[19]=KEY--5
-get result[20]=KEY--7
-get result[21]=KEY--9
-get result[22]=KEY--11
-get result[23]=KEY--13
-get result[24]=KEY--15
-get result[25]=KEY--17
-get result[26]=KEY--19
-get result[27]=KEY--21
-get result[28]=KEY--23
-get result[29]=KEY--25
-get result[30]=KEY--27
-get result[31]=KEY--29
-get result[32]=KEY--31
-get result[33]=KEY--33
-test data independent function without result on all servers
-test data dependent function with result
-Execute on Region: result count = 4
-Execute on Region: result count = 34
-Execute on Region: result[0]=KEY--11
-Execute on Region: result[1]=KEY--5
-Execute on Region: result[2]=KEY--17
-Execute on Region: result[3]=KEY--27
-Execute on Region: result[4]=KEY--9
-Execute on Region: result[5]=KEY--29
-Execute on Region: result[6]=KEY--13
-Execute on Region: result[7]=KEY--23
-Execute on Region: result[8]=KEY--15
-Execute on Region: result[9]=KEY--11
-Execute on Region: result[10]=KEY--5
-Execute on Region: result[11]=KEY--17
-Execute on Region: result[12]=KEY--27
-Execute on Region: result[13]=KEY--9
-Execute on Region: result[14]=KEY--29
-Execute on Region: result[15]=KEY--13
-Execute on Region: result[16]=KEY--23
-Execute on Region: result[17]=KEY--15
-Execute on Region: result[18]=KEY--31
-Execute on Region: result[19]=KEY--1
-Execute on Region: result[20]=KEY--33
-Execute on Region: result[21]=KEY--21
-Execute on Region: result[22]=KEY--3
-Execute on Region: result[23]=KEY--7
-Execute on Region: result[24]=KEY--19
-Execute on Region: result[25]=KEY--25
-Execute on Region: result[26]=KEY--31
-Execute on Region: result[27]=KEY--1
-Execute on Region: result[28]=KEY--33
-Execute on Region: result[29]=KEY--21
-Execute on Region: result[30]=KEY--3
-Execute on Region: result[31]=KEY--7
-Execute on Region: result[32]=KEY--19
-Execute on Region: result[33]=KEY--25
-test data dependent function without result
-Closed the Geode Cache  
-```
+       Result[0]=VALUE--1
+       Result[1]=VALUE--2
+       Result[2]=VALUE--3
+  ```
 
 1. Stop the server
 
@@ -199,9 +55,8 @@
   /Users/user/geode/bin/gfsh
   (1) Executing - connect
   ...
-  (2) Executing - stop server --name=server
-  ...
-  (3) Executing - stop locator --name=locator
-  ....
+  (2) Executing - shutdown --include-locators=true
+
+  Shutdown is triggered
   ```
 
diff --git a/examples/cpp/function-execution/main.cpp b/examples/cpp/function-execution/main.cpp
index 6b57734..e3f239f 100644
--- a/examples/cpp/function-execution/main.cpp
+++ b/examples/cpp/function-execution/main.cpp
@@ -16,17 +16,12 @@
  */
 
 /*
- * The Execute Function QuickStart Example.
- *
  * This example takes the following steps:
  *
- * 1. Create a Geode Cache.
- * 2. Create the example Region Programmatically.
+ * 1. Create a Geode Cache, Pool, and example Region Programmatically.
  * 3. Populate some objects on the Region.
- * 4. Create Execute Objects
- * 5. Execute Functions
- * 6. Close the Cache.
- *
+ * 4. Create Execute Object
+ * 5. Execute Function
  */
 #include <iostream>
 #include <memory>
@@ -38,147 +33,113 @@
 #include <geode/FunctionService.hpp>
 #include <geode/CacheableString.hpp>
 
-// Use the "geode" namespace.
-using namespace apache::geode::client;
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableArrayList;
+using apache::geode::client::CacheableKey;
+using apache::geode::client::CacheableString;
+using apache::geode::client::CacheableVector;
+using apache::geode::client::CacheFactory;
+using apache::geode::client::Exception;
+using apache::geode::client::FunctionService;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
 
-const auto getFuncIName = std::string("MultiGetFunctionI");
-const auto putFuncIName = std::string("MultiPutFunctionI");
-const auto getFuncName = std::string("MultiGetFunction");
+const auto getFuncIName = std::string("ExampleMultiGetFunction");
 
-const int EXAMPLE_ITEM_COUNT = 34;
+const int EXAMPLE_SERVER_PORT = 50505;
 
-// The Execute Function QuickStart example.
+const std::vector<std::string> keys = {
+    "KEY--1",
+    "KEY--2",
+    "KEY--3",
+};
+
+const std::vector<std::string> values = {
+    "VALUE--1",
+    "VALUE--2",
+    "VALUE--3"
+};
+
+Cache setupCache() {
+  return CacheFactory()
+      .set("log-level", "none")
+      .create();
+}
+
+void createPool(const Cache& cache) {
+  auto pool = cache.getPoolManager()
+      .createFactory()
+      .addServer("localhost", EXAMPLE_SERVER_PORT)
+      .create("pool");
+}
+
+std::shared_ptr<Region> createRegion(Cache& cache) {
+  auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
+  auto region = regionFactory.setPoolName("pool").create("partition_region");
+
+  return region;
+}
+
+void populateRegion(const std::shared_ptr<Region>& region) {
+  for (int i = 0; i < keys.size(); i++) {
+    region->put(keys[i], values[i]);
+  }
+}
+
+std::shared_ptr<CacheableVector> populateArguments() {
+  auto arguments = CacheableVector::create();
+  for (int i = 0; i < keys.size(); i++) {
+    arguments->push_back(CacheableKey::create(keys[i]));
+  }
+  return arguments;
+}
+
+std::vector<std::string> executeFunctionOnServer(const std::shared_ptr<Region> region,
+    const std::shared_ptr<CacheableVector> arguments) {
+  std::vector<std::string> resultList;
+
+  auto functionService = FunctionService::onServer(region->getRegionService());
+  if(auto executeFunctionResult = functionService.withArgs(arguments).execute(getFuncIName)->getResult()) {
+    for (auto &arrayList: *executeFunctionResult) {
+      for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
+        resultList.push_back(std::dynamic_pointer_cast<CacheableString>(cachedString)->value());
+      }
+    }
+  } else {
+    std::cout << "get executeFunctionResult is NULL\n";
+  }
+
+  return resultList;
+}
+
+void printResults(const std::vector<std::string>& resultList) {
+  std::cout << "Result count = " << resultList.size() << std::endl << std::endl;
+  int i = 0;
+  for (auto &cachedString: resultList) {
+    std::cout << "\tResult[" << i << "]=" << cachedString << std::endl;
+    ++i;
+  }
+}
+
 int main(int argc, char** argv) {
   try {
-    // Create CacheFactory using the settings from the geode.properties file by
-    // default.
-    auto cache = CacheFactory()
-        .set("log-level", "none")
-        .create();
+    auto cache = setupCache();
 
-    std::cout << "Created CacheFactory\n";
+    createPool(cache);
 
-    auto pool = cache.getPoolManager()
-        .createFactory()
-        .setSubscriptionEnabled(true)
-        .addServer("localhost", 50505)
-        .addServer("localhost", 40404)
-        .create("pool");
+    auto region = createRegion(cache);
 
-    // Create the example Region Programmatically
-    auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
-    auto regPtr0 = regionFactory.setPoolName("pool").create("partition_region");
+    populateRegion(region);
 
-    std::cout << "Created the Region\n";
+    auto arguments = populateArguments();
 
-    regPtr0->registerAllKeys();
-    char buf[128];
+    auto resultList = executeFunctionOnServer(region, arguments);
 
-    auto resultList = CacheableVector::create();
-    for (int i = 0; i < EXAMPLE_ITEM_COUNT; i++) {
-      sprintf(buf, "VALUE--%d", i);
-      auto value(CacheableString::create(buf));
-
-      sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
-      regPtr0->put(key, value);
-    }
-
-    auto routingObj = CacheableVector::create();
-    for (int i = 1; i < EXAMPLE_ITEM_COUNT; i+=2) {
-      sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
-      routingObj->push_back(key);
-    }
-
-    std::cout << "test data independent function with result on one server\n";
-    auto exc = FunctionService::onServer(regPtr0->getRegionService());
-    if(auto executeFunctionResult = exc.withArgs(routingObj).execute(getFuncIName)->getResult()) {
-      for (auto &arrayList: *executeFunctionResult) {
-        for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
-          resultList->push_back(cachedString);
-        }
-      }
-      sprintf(buf, "get: result count = %lu\n", resultList->size());
-      std::cout << buf;
-      int i = 0;
-      for (auto &cachedString: *resultList) {
-        sprintf(
-            buf, "get result[%d]=%s\n", i,
-            std::dynamic_pointer_cast<CacheableString>(cachedString)->value().c_str());
-        std::cout << buf;
-        ++i;
-      }
-    } else {
-      std::cout << "get executeFunctionResult is NULL\n";
-    }
-
-    std::cout << "test data independent function without result on one server\n";
-
-    exc.withArgs(routingObj).execute(putFuncIName, std::chrono::milliseconds(15));
-
-    std::cout << "test data independent function with result on all servers\n";
-
-    exc = FunctionService::onServers(regPtr0->getRegionService());
-    if(auto executeFunctionResult = exc.withArgs(routingObj).execute(getFuncIName)->getResult()) {
-      resultList->clear();
-      for (auto &arrayList: *executeFunctionResult) {
-        for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
-          resultList->push_back(cachedString);
-        }
-      }
-      sprintf(buf, "get: result count = %lu\n", resultList->size());
-      std::cout << buf;
-      int i = 0;
-      for (auto &cachedString: *resultList) {
-        sprintf(
-            buf, "get result[%d]=%s\n", i,
-            std::dynamic_pointer_cast<CacheableString>(cachedString)->value().c_str());
-        std::cout << buf;
-        ++i;
-      }
-    } else {
-      std::cout << "get executeFunctionResult is NULL\n";
-    }
-
-
-    std::cout << "test data independent function without result on all servers\n";
-    exc.withArgs(routingObj).execute(putFuncIName, std::chrono::milliseconds(15));
-    std::cout << "test data dependent function with result\n";
-
-    auto args = CacheableBoolean::create(1);
-    exc = FunctionService::onRegion(regPtr0);
-    if(auto executeFunctionResult = exc.withFilter(routingObj)
-        .withArgs(args)
-        .execute(getFuncName)
-        ->getResult()) {
-      resultList->clear();
-      std::cout << "Execute on Region: result count = " << executeFunctionResult->size() << '\n';
-      for (auto &arrayList: *executeFunctionResult) {
-        for (auto &cachedString: *std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
-          resultList->push_back(cachedString);
-        }
-      }
-      sprintf(buf, "Execute on Region: result count = %lu\n", resultList->size());
-      std::cout << buf;
-      int i = 0;
-      for (auto &cachedString: *resultList) {
-        sprintf(
-            buf, "Execute on Region: result[%d]=%s\n", i,
-            std::dynamic_pointer_cast<CacheableString>(cachedString)->value().c_str());
-        std::cout << buf;
-        ++i;
-      }
-    } else {
-      std::cout << "execute on region: executeFunctionResult is NULL\n";
-    }
-
-    return 0;
+    printResults(resultList);
   }
-    // An exception should not occur
   catch (const Exception& geodeExcp) {
     std::cerr << "Function Execution Geode Exception: " << geodeExcp.getMessage() << '\n';
-
     return 1;
   }
 }
+
diff --git a/examples/cpp/function-execution/startserver.sh b/examples/cpp/function-execution/startserver.sh
index 24e2a9f..b5b8562 100755
--- a/examples/cpp/function-execution/startserver.sh
+++ b/examples/cpp/function-execution/startserver.sh
@@ -1,5 +1,3 @@
-#!/bin/env bash
-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -15,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
@@ -29,6 +28,6 @@
     fi
 fi
 
-$GFSH_PATH  -e "start locator --name=locator" -e "deploy --jar=../../javaobject.jar" -e "start server --name=the-server --server-port=40404"  -e "create region --name=partition_region --type=PARTITION" -e "start server --name=the-second-server --server-port=50505"
+$GFSH_PATH  -e "start locator --name=locator" -e "deploy --jar=../../utilities/example.jar" -e "start server --name=the-server --server-port=50505"  -e "create region --name=partition_region --type=PARTITION"
 
 
diff --git a/examples/cpp/function-execution/stopserver.sh b/examples/cpp/function-execution/stopserver.sh
index 7891cf6..a9d0c5b 100755
--- a/examples/cpp/function-execution/stopserver.sh
+++ b/examples/cpp/function-execution/stopserver.sh
@@ -1,5 +1,3 @@
-#!/bin/env bash
-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -15,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/pdxserializable/README.md b/examples/cpp/pdxserializable/README.md
index 785e0b2..7f5e8bd 100644
--- a/examples/cpp/pdxserializable/README.md
+++ b/examples/cpp/pdxserializable/README.md
@@ -35,7 +35,7 @@
 1. Execute `pdxserializable`:
 
   ```
-  $ build/pdxserializable
+  $ ./pdxserializable
   Create orders
   Storing orders in the region
   Getting the orders from the region
diff --git a/examples/cpp/pdxserializable/startserver.sh b/examples/cpp/pdxserializable/startserver.sh
index 2c947ea..7342182 100755
--- a/examples/cpp/pdxserializable/startserver.sh
+++ b/examples/cpp/pdxserializable/startserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/pdxserializable/stopserver.sh b/examples/cpp/pdxserializable/stopserver.sh
index f406a23..f80cd6e 100755
--- a/examples/cpp/pdxserializable/stopserver.sh
+++ b/examples/cpp/pdxserializable/stopserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/pdxserializer/README.md b/examples/cpp/pdxserializer/README.md
index e913d26..eaed594 100644
--- a/examples/cpp/pdxserializer/README.md
+++ b/examples/cpp/pdxserializer/README.md
@@ -35,7 +35,7 @@
 1. Execute `pdxserializer`:
 
   ```
-  $ build/pdxserializer
+  $ ./pdxserializer
   Storing orders in the region
   Getting the orders from the region
   OrderID: 1
diff --git a/examples/cpp/pdxserializer/startserver.sh b/examples/cpp/pdxserializer/startserver.sh
index 2c947ea..7342182 100755
--- a/examples/cpp/pdxserializer/startserver.sh
+++ b/examples/cpp/pdxserializer/startserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/pdxserializer/stopserver.sh b/examples/cpp/pdxserializer/stopserver.sh
index f406a23..f80cd6e 100755
--- a/examples/cpp/pdxserializer/stopserver.sh
+++ b/examples/cpp/pdxserializer/stopserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/put-get-remove/README.md b/examples/cpp/put-get-remove/README.md
index 9de0a6c..9f4bd91 100644
--- a/examples/cpp/put-get-remove/README.md
+++ b/examples/cpp/put-get-remove/README.md
@@ -37,7 +37,7 @@
 1. Execute `put-get-remove`:
 
   ```
-  $ build/put-get-remove
+  $ ./put-get-remove
   Storing id and username in the region
   Getting the user info from the region
     rtimmons = Robert Timmons
diff --git a/examples/cpp/put-get-remove/startserver.sh b/examples/cpp/put-get-remove/startserver.sh
index 70ff419..54e12f0 100755
--- a/examples/cpp/put-get-remove/startserver.sh
+++ b/examples/cpp/put-get-remove/startserver.sh
@@ -1,5 +1,3 @@
-#!/bin/env bash
-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -15,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/put-get-remove/stopserver.sh b/examples/cpp/put-get-remove/stopserver.sh
index 8c914a4..67a0f85 100755
--- a/examples/cpp/put-get-remove/stopserver.sh
+++ b/examples/cpp/put-get-remove/stopserver.sh
@@ -1,5 +1,3 @@
-#!/bin/env bash
-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -15,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/remotequery/CMakeLists.txt b/examples/cpp/remotequery/CMakeLists.txt
index a9d5efc..7743452 100644
--- a/examples/cpp/remotequery/CMakeLists.txt
+++ b/examples/cpp/remotequery/CMakeLists.txt
@@ -20,11 +20,6 @@
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../cmake)
 set(CMAKE_CXX_STANDARD 11)
 
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-    add_compile_options(-m64)
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64")
-endif()
-
 find_package(GeodeNative REQUIRED COMPONENTS cpp)
 
 add_executable(${PROJECT_NAME} main.cpp;Order.cpp;Order.hpp)
diff --git a/examples/cpp/remotequery/README.md b/examples/cpp/remotequery/README.md
index 61bdda0..d47d991 100644
--- a/examples/cpp/remotequery/README.md
+++ b/examples/cpp/remotequery/README.md
@@ -35,7 +35,7 @@
 1. Execute `remotequery`:
 
   ```
-  $ build/remotequery
+  $ ./remotequery
   Create orders
   Storing orders in the region
   Getting the orders from the region
diff --git a/examples/cpp/remotequery/startserver.sh b/examples/cpp/remotequery/startserver.sh
index 2c947ea..7342182 100755
--- a/examples/cpp/remotequery/startserver.sh
+++ b/examples/cpp/remotequery/startserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/remotequery/stopserver.sh b/examples/cpp/remotequery/stopserver.sh
index f406a23..f80cd6e 100755
--- a/examples/cpp/remotequery/stopserver.sh
+++ b/examples/cpp/remotequery/stopserver.sh
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#!/bin/env bash
+#!/usr/bin/env bash
 GFSH_PATH=""
 which gfsh 2> /dev/null
 
diff --git a/examples/cpp/transaction/README.md b/examples/cpp/transaction/README.md
new file mode 100644
index 0000000..51c7d33
--- /dev/null
+++ b/examples/cpp/transaction/README.md
@@ -0,0 +1,61 @@
+# Transaction example
+This is a very simple example showing how to use TransactionManager.  This example shows
+how to begin a transaction, commit a transaction, and rollback a transaction while showing
+exception handling.  We commit two keys and rollback adding a third key and destroying an
+existing key while showing how to handle exceptions.
+
+## Prerequisites
+* An installation of Apache Geode.
+* Apache Geode Native, built and installed.
+* Apache Geode Native examples, built and installed.
+* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
+* `GEODE_HOME/bin` in the execution path.
+
+## Running
+1. Set the current directory to the `transaction` directory in your example workspace.
+
+  ```
+  $ cd workspace/examples/cpp/transaction
+  ```
+
+1. Run the `startserver.sh` script to start the Geode server, create a region, and populate the region with sample data.
+
+  ```
+  $ sh ./startserver.sh
+  /Users/user/geode/bin/gfsh
+
+  (1) Executing - start locator --name=locator
+  ...
+  (2) Executing - start server --name=server
+  ...
+  (3) Executing - create region --name=exampleRegion --type=PARTITION
+
+  Member | Status
+  ------ | ----------------------------------------------
+  server | Region "/exampleRegion" created on "server"
+  ```
+
+1. Execute `transaction`:
+
+  ```
+  $ ./transaction
+    Created cache
+    Created region 'exampleRegion'
+    Rolled back transaction - retrying(4)
+    Rolled back transaction - retrying(3)
+    Rolled back transaction - retrying(2)
+    Committed transaction - exiting
+  ```
+
+1. Stop the server
+
+  ```
+  $ sh ./stopserver.sh
+  /Users/user/geode/bin/gfsh
+  (1) Executing - connect
+  ...
+  (2) Executing - stop server --name=server
+  ...
+  (3) Executing - stop locator --name=locator
+  ....
+  ```
diff --git a/examples/cpp/transaction/main.cpp b/examples/cpp/transaction/main.cpp
new file mode 100644
index 0000000..9104644
--- /dev/null
+++ b/examples/cpp/transaction/main.cpp
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <random>
+
+#include <geode/CacheFactory.hpp>
+#include <geode/CacheTransactionManager.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheFactory;
+using apache::geode::client::CacheTransactionManager;
+using apache::geode::client::RegionShortcut;
+
+auto keys = {
+    "Key1",
+    "Key2",
+    "Key3",
+    "Key4",
+    "Key5",
+    "Key6",
+    "Key7",
+    "Key8",
+    "Key9",
+    "Key10"
+};
+
+
+int getValueFromExternalSystem() {
+  static thread_local std::default_random_engine generator(std::random_device{}());
+  auto value = std::uniform_int_distribution<int32_t>{0, 9}(generator);
+
+  if (!value) {
+    throw "failed to get from external system";
+  }
+
+  return value;
+}
+
+int main(int argc, char** argv) {
+  auto cache = CacheFactory().set("log-level", "none").create();
+  auto poolFactory = cache.getPoolManager().createFactory();
+
+  std::cout << "Created cache" << std::endl;
+
+  poolFactory.addLocator("localhost", 10334);
+  auto pool = poolFactory.create("pool");
+  auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
+  auto region = regionFactory.setPoolName("pool").create("exampleRegion");
+
+  std::cout << "Created region 'exampleRegion'" << std::endl;
+
+  auto transactionManager = cache.getCacheTransactionManager();
+
+  auto retries = 5;
+  while (retries--) {
+    try {
+      transactionManager->begin();
+      for (auto& key : keys) {
+        auto value = getValueFromExternalSystem();
+        region->put(key, value);
+      }
+      transactionManager->commit();
+      std::cout << "Committed transaction - exiting" << std::endl;
+      break;
+    } catch ( ... ) {
+      transactionManager->rollback();
+      std::cout << "Rolled back transaction - retrying(" << retries << ")" << std::endl;
+    }
+  }
+}
+
diff --git a/contrib/pdxautoserializer/src/CMakeLists.txt b/examples/cpp/transaction/startserver.sh
old mode 100644
new mode 100755
similarity index 62%
copy from contrib/pdxautoserializer/src/CMakeLists.txt
copy to examples/cpp/transaction/startserver.sh
index 895cd74..fce5f21
--- a/contrib/pdxautoserializer/src/CMakeLists.txt
+++ b/examples/cpp/transaction/startserver.sh
@@ -4,24 +4,28 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(pdxautoserializer)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
+#!/usr/bin/env bash
+GFSH_PATH=""
+which gfsh 2> /dev/null
 
-add_executable(pdxautoserializer ${SOURCES})
-target_link_libraries(pdxautoserializer
-  PRIVATE
-    antlr
-)
+if [ $? -eq 0 ]; then
+    GFSH_PATH="gfsh"
+else
+    if [ "$GEODE_HOME" == "" ]; then
+        echo "Could not find gfsh. Please set the GEODE_HOME path."
+        echo "e.g. export GEODE_HOME=<path to Geode>"
+    else
+        GFSH_PATH=$GEODE_HOME/bin/gfsh
+    fi
+fi
 
-install(TARGETS pdxautoserializer DESTINATION bin)
-include_directories(${CMAKE_SOURCE_DIR}/../../src/cppcache/include)
+$GFSH_PATH  -e "start locator --name=locator" -e "start server --name=server"  -e "create region --name=exampleRegion --type=PARTITION"
diff --git a/contrib/pdxautoserializer/src/CMakeLists.txt b/examples/cpp/transaction/stopserver.sh
old mode 100644
new mode 100755
similarity index 64%
copy from contrib/pdxautoserializer/src/CMakeLists.txt
copy to examples/cpp/transaction/stopserver.sh
index 895cd74..67a0f85
--- a/contrib/pdxautoserializer/src/CMakeLists.txt
+++ b/examples/cpp/transaction/stopserver.sh
@@ -4,24 +4,28 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(pdxautoserializer)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
+#!/usr/bin/env bash
+GFSH_PATH=""
+which gfsh 2> /dev/null
 
-add_executable(pdxautoserializer ${SOURCES})
-target_link_libraries(pdxautoserializer
-  PRIVATE
-    antlr
-)
+if [ $? -eq 0 ]; then
+    GFSH_PATH="gfsh"
+else
+    if [ "$GEODE_HOME" == "" ]; then
+        echo "Could not find gfsh. Please set the GEODE_HOME path."
+        echo "e.g. export GEODE_HOME=<path to Geode>"
+    else
+        GFSH_PATH=$GEODE_HOME/bin/gfsh
+    fi
+fi
 
-install(TARGETS pdxautoserializer DESTINATION bin)
-include_directories(${CMAKE_SOURCE_DIR}/../../src/cppcache/include)
+$GFSH_PATH -e "connect" -e "stop server --name=server" -e "stop locator --name=locator"
diff --git a/examples/dotnet/AuthInitialize/ExampleAuthInitialize.cs b/examples/dotnet/AuthInitialize/ExampleAuthInitialize.cs
index 583ac23..103e6ff 100644
--- a/examples/dotnet/AuthInitialize/ExampleAuthInitialize.cs
+++ b/examples/dotnet/AuthInitialize/ExampleAuthInitialize.cs
@@ -1,4 +1,21 @@
-using System;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
 using Apache.Geode.Client;
 
 namespace Apache.Geode.Examples.AuthInitialize
@@ -23,8 +40,8 @@
       Console.Out.WriteLine("ExampleAuthInitialize::GetCredentials called");
 
       var credentials = new Properties<string, object>();
-      credentials.Insert("username", "john");
-      credentials.Insert("password", "secret");
+      credentials.Insert("security-username", "root");
+      credentials.Insert("security-password", "root");
       return credentials;
     }
   }
diff --git a/examples/dotnet/AuthInitialize/Program.cs b/examples/dotnet/AuthInitialize/Program.cs
index 91ff1c5..23f8a2e 100644
--- a/examples/dotnet/AuthInitialize/Program.cs
+++ b/examples/dotnet/AuthInitialize/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
diff --git a/examples/dotnet/AuthInitialize/README.md b/examples/dotnet/AuthInitialize/README.md
index c79fc8c..45da800 100644
--- a/examples/dotnet/AuthInitialize/README.md
+++ b/examples/dotnet/AuthInitialize/README.md
@@ -1,24 +1,29 @@
-# AuthInitialize Example
+# AuthInitialize Example
 This example shows how to create and register a custom `IAuthIntialize` authentication
-handler. 
+handler on the client that authenticates against a server that was started with the corresponding authenticator. 
 
 ## Prerequisites
 * Install [Apache Geode](https://geode.apache.org)
 * Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+* Apache Geode Native examples, built and installed.
+* A `GEODE_HOME` environment variable set to the location of the Apache Geode installation.
+* `GEODE_HOME/bin` in the execution path.
 
 ## Running
-* Start Geode Server and create region.
+1. Set the current directory to the `AuthInitialize` directory in your example workspace.
+
   ```
-  gfsh>start locator --name=locator
-  gfsh>start server --name=server
-  gfsh>create region --name=region --type=PARTITION
+  $ cd workspace/examples/dotnet/AuthInitialize
   ```
-* Execute `Apache.Geode.Examples.AuthInitialize.exe`.
-  
-  output:
+
+2. Run the `startserver.ps1` script to start the Geode cluster with authentication and create a region.
+
+3. Execute `AuthInitialize.exe`:
+
   ```
-  ExampleAuthInitialize::ExampleAuthInitialize called
-  ExampleAuthInitialize::GetCredentials called
-  a = 1
-  b = 2
+.\AuthInitialize.exe
+ExampleAuthInitialize::ExampleAuthInitialize called
+ExampleAuthInitialize::GetCredentials called
+a = 1
+b = 2
   ```
diff --git a/examples/dotnet/AuthInitialize/startserver.ps1 b/examples/dotnet/AuthInitialize/startserver.ps1
index 8bbe074..354e7c3 100644
--- a/examples/dotnet/AuthInitialize/startserver.ps1
+++ b/examples/dotnet/AuthInitialize/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
@@ -35,5 +35,11 @@
 
 if ($GFSH_PATH -ne "")
 {
-   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --dir=$PSScriptRoot\server' -e 'create region --name=region --type=PARTITION'"
-}
\ No newline at end of file
+  # Set this variable to include your java object that implements the Authenticator class
+  $RESOLVEDPATH = Resolve-Path -Path "$PSScriptRoot/../../utilities/example.jar"
+
+  # Set this variable to the full name of your Authenticator.create function
+  $AUTHENTICATOR = 'javaobject.SimpleAuthenticator.create'
+
+  Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot\locator' -e 'start server --name=server --classpath=$RESOLVEDPATH --J=-Dgemfire.security-client-authenticator=$AUTHENTICATOR --dir=$PSScriptRoot\server' -e 'create region --name=region --type=PARTITION'"
+}
diff --git a/examples/dotnet/AuthInitialize/stopserver.ps1 b/examples/dotnet/AuthInitialize/stopserver.ps1
index 04da3cf..ec2c218 100644
--- a/examples/dotnet/AuthInitialize/stopserver.ps1
+++ b/examples/dotnet/AuthInitialize/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/BUILD-DOTNET-EXAMPLES.md b/examples/dotnet/BUILD-DOTNET-EXAMPLES.md
deleted file mode 100644
index abc2cea..0000000
--- a/examples/dotnet/BUILD-DOTNET-EXAMPLES.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Geode Native .NET Examples
-
-## Prerequisites
-* Install [Apache Geode](https://geode.apache.org)
-* Install [CMake](https://cmake.org/download/)
-* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
-
-## Examples
-* [Apache.Geode.Examples.AuthInitialize](Apache.Geode.Examples.Cache/README.md)
-* [Apache.Geode.Examples.Cache](Apache.Geode.Examples.Cache/README.md)
-
-## Building the Examples
-
-1. Copy the `examples` directory from the native client installation folder to a folder in your workspace.
-
-1. Use cmake to generate the .sln and .vcxproj files for the examples:
-
-    ```
-    cd workspace\examples\dotnet
-    mkdir build
-    cd build
-    cmake .. -G"Visual Studio 14 2015 Win64" -DGeodeNative_ROOT="<NC-install-root-dir>"
-    ```
-The result is a Visual Studio solution for the .NET examples.
-1. Open the solution file, `examples.sln`, in [Visual Studio 2015](https://www.visualstudio.com/) or newer and build all projects.
-
-
-## Running the Examples
-To run the examples, 
-
-1.  Decide which example to try first. Follow directions in the README file in the source directory for that example to start the server and create a region. 
-
-1. Assuming you are still in Visual Studio, select the desired example as your StartUp project and execute it.
-
-The example's README file describes the expected output.
-
diff --git a/examples/dotnet/CMakeLists.txt b/examples/dotnet/CMakeLists.txt
index e50ff75..aeedcb7 100644
--- a/examples/dotnet/CMakeLists.txt
+++ b/examples/dotnet/CMakeLists.txt
@@ -21,7 +21,6 @@
 
 install(FILES
   ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt
-  BUILD-DOTNET-EXAMPLES.md
   DESTINATION examples/dotnet)
 
 function(add_example)
@@ -56,6 +55,9 @@
 add_example(NAME DataSerializableCs
 	SOURCE Order.cs Program.cs)
 
+add_example(NAME FunctionExecutionCs
+	SOURCE Program.cs)
+
 add_example(NAME PdxAutoSerializer
 	SOURCE Order.cs Program.cs)
 
diff --git a/examples/dotnet/CMakeLists.txt.in b/examples/dotnet/CMakeLists.txt.in
index 5035bec..2257e75 100644
--- a/examples/dotnet/CMakeLists.txt.in
+++ b/examples/dotnet/CMakeLists.txt.in
@@ -20,6 +20,7 @@
 add_subdirectory(AuthInitialize)
 add_subdirectory(ContinuousQueryCs)
 add_subdirectory(DataSerializableCs)
+add_subdirectory(FunctionExecutionCs)
 add_subdirectory(PdxAutoSerializer)
 add_subdirectory(PdxSerializableCs)
 add_subdirectory(PutGetRemove)
diff --git a/examples/dotnet/ContinuousQueryCs/MyCqListener.cs b/examples/dotnet/ContinuousQueryCs/MyCqListener.cs
index d61c065..9d186b4 100644
--- a/examples/dotnet/ContinuousQueryCs/MyCqListener.cs
+++ b/examples/dotnet/ContinuousQueryCs/MyCqListener.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -21,48 +21,48 @@
 
 namespace Apache.Geode.Examples.ContinuousQuery
 {
-    public class MyCqListener<TKey, TResult> : ICqListener<TKey, TResult>
+  public class MyCqListener<TKey, TResult> : ICqListener<TKey, TResult>
+  {
+    public virtual void OnEvent(CqEvent<TKey, TResult> ev)
     {
-        public virtual void OnEvent(CqEvent<TKey, TResult> ev)
-        {
-            Order val = ev.getNewValue() as Order;
-            TKey key = ev.getKey();
-            string operationType = "UNKNOWN";
+      Order val = ev.getNewValue() as Order;
+      TKey key = ev.getKey();
+      string operationType = "UNKNOWN";
 
-            switch (ev.getQueryOperation())
-            {
-                case CqOperation.OP_TYPE_CREATE:
-                    operationType = "CREATE";
-                    break;
-                case CqOperation.OP_TYPE_UPDATE:
-                    operationType = "UPDATE";
-                    break;
-                case CqOperation.OP_TYPE_DESTROY:
-                    operationType = "DESTROY";
-                    break;
-                default:
-                    Console.WriteLine("Unexpected operation encountered {0}", ev.getQueryOperation());
-                    break;
-            }
+      switch (ev.getQueryOperation())
+      {
+        case CqOperation.OP_TYPE_CREATE:
+          operationType = "CREATE";
+          break;
+        case CqOperation.OP_TYPE_UPDATE:
+          operationType = "UPDATE";
+          break;
+        case CqOperation.OP_TYPE_DESTROY:
+          operationType = "DESTROY";
+          break;
+        default:
+          Console.WriteLine("Unexpected operation encountered {0}", ev.getQueryOperation());
+          break;
+      }
 
-            if (val != null)
-            {
-                Console.WriteLine("MyCqListener::OnEvent({0}) called with key {1}, value {2}", operationType, key, val.ToString());
-            }
-            else
-            {
-                Console.WriteLine("MyCqListener::OnEvent({0}) called with key {1}, value null", operationType, key);
-            }
-        }
-
-        public virtual void OnError(CqEvent<TKey, TResult> ev)
-        {
-            Console.WriteLine("MyCqListener::OnError called");
-        }
-
-        public virtual void Close()
-        {
-            Console.WriteLine("MyCqListener::close called");
-        }
+      if (val != null)
+      {
+        Console.WriteLine("MyCqListener::OnEvent({0}) called with key {1}, value {2}", operationType, key, val.ToString());
+      }
+      else
+      {
+        Console.WriteLine("MyCqListener::OnEvent({0}) called with key {1}, value null", operationType, key);
+      }
     }
+
+    public virtual void OnError(CqEvent<TKey, TResult> ev)
+    {
+      Console.WriteLine("MyCqListener::OnError called");
+    }
+
+    public virtual void Close()
+    {
+      Console.WriteLine("MyCqListener::close called");
+    }
+  }
 }
diff --git a/examples/dotnet/ContinuousQueryCs/Order.cs b/examples/dotnet/ContinuousQueryCs/Order.cs
index ecb5875..011f94c 100644
--- a/examples/dotnet/ContinuousQueryCs/Order.cs
+++ b/examples/dotnet/ContinuousQueryCs/Order.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -19,53 +19,53 @@
 
 namespace Apache.Geode.Examples.ContinuousQuery
 {
-    public class Order : IPdxSerializable
+  public class Order : IPdxSerializable
+  {
+    private const string ORDER_ID_KEY_ = "order_id";
+    private const string NAME_KEY_ = "name";
+    private const string QUANTITY_KEY_ = "quantity";
+
+    public long OrderId { get; set; }
+    public string Name { get; set; }
+    public short Quantity { get; set; }
+
+    // A default constructor is required for deserialization
+    public Order() { }
+
+    public Order(int orderId, string name, short quantity)
     {
-        private const string ORDER_ID_KEY_ = "order_id";
-        private const string NAME_KEY_ = "name";
-        private const string QUANTITY_KEY_ = "quantity";
-
-        public long OrderId { get; set; }
-        public string Name { get; set; }
-        public short Quantity { get; set; }
-
-        // A default constructor is required for deserialization
-        public Order() { }
-
-        public Order(int orderId, string name, short quantity)
-        {
-            OrderId = orderId;
-            Name = name;
-            Quantity = quantity;
-        }
-
-        public override string ToString()
-        {
-            return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
-        }
-
-        public void ToData(IPdxWriter output)
-        {
-            output.WriteLong(ORDER_ID_KEY_, OrderId);
-            output.MarkIdentityField(ORDER_ID_KEY_);
-
-            output.WriteString(NAME_KEY_, Name);
-            output.MarkIdentityField(NAME_KEY_);
-
-            output.WriteInt(QUANTITY_KEY_, Quantity);
-            output.MarkIdentityField(QUANTITY_KEY_);
-        }
-
-        public void FromData(IPdxReader input)
-        {
-            OrderId = input.ReadLong(ORDER_ID_KEY_);
-            Name = input.ReadString(NAME_KEY_);
-            Quantity = (short)input.ReadInt(QUANTITY_KEY_);
-        }
-
-        public static IPdxSerializable CreateDeserializable()
-        {
-            return new Order();
-        }
+      OrderId = orderId;
+      Name = name;
+      Quantity = quantity;
     }
+
+    public override string ToString()
+    {
+      return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
+    }
+
+    public void ToData(IPdxWriter output)
+    {
+      output.WriteLong(ORDER_ID_KEY_, OrderId);
+      output.MarkIdentityField(ORDER_ID_KEY_);
+
+      output.WriteString(NAME_KEY_, Name);
+      output.MarkIdentityField(NAME_KEY_);
+
+      output.WriteInt(QUANTITY_KEY_, Quantity);
+      output.MarkIdentityField(QUANTITY_KEY_);
+    }
+
+    public void FromData(IPdxReader input)
+    {
+      OrderId = input.ReadLong(ORDER_ID_KEY_);
+      Name = input.ReadString(NAME_KEY_);
+      Quantity = (short)input.ReadInt(QUANTITY_KEY_);
+    }
+
+    public static IPdxSerializable CreateDeserializable()
+    {
+      return new Order();
+    }
+  }
 }
diff --git a/examples/dotnet/ContinuousQueryCs/Program.cs b/examples/dotnet/ContinuousQueryCs/Program.cs
index 41b3d33..7d826de 100644
--- a/examples/dotnet/ContinuousQueryCs/Program.cs
+++ b/examples/dotnet/ContinuousQueryCs/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -20,72 +20,75 @@
 
 namespace Apache.Geode.Examples.ContinuousQuery
 {
-    public class Program
+  public class Program
+  {
+    public static void Main(string[] args)
     {
-        public static void Main(string[] args)
-        {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "none");
-            var cache = cacheFactory.Create();
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
 
-            Console.WriteLine("Registering for data serialization");
+      Console.WriteLine("Registering for data serialization");
 
-            cache.TypeRegistry.RegisterPdxType(Order.CreateDeserializable);
+      cache.TypeRegistry.RegisterPdxType(Order.CreateDeserializable);
 
-            var poolFactory = cache.GetPoolFactory()
-                .AddLocator("localhost", 10334);
-            var pool = poolFactory
-              .SetSubscriptionEnabled(true)
-              .Create("pool");
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      var pool = poolFactory
+        .SetSubscriptionEnabled(true)
+        .Create("pool");
 
-            var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                .SetPoolName("pool");
-            var orderRegion = regionFactory.Create<string, Order>("example_orderobject");
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var orderRegion = regionFactory.Create<string, Order>("example_orderobject");
 
-            var queryService = pool.GetQueryService();
+      var queryService = pool.GetQueryService();
 
-            var cqAttributesFactory = new CqAttributesFactory<string, Order>();
+      var cqAttributesFactory = new CqAttributesFactory<string, Order>();
 
-            var cqListener = new MyCqListener<string, Order>();
+      var cqListener = new MyCqListener<string, Order>();
 
-            cqAttributesFactory.AddCqListener(cqListener);
+      cqAttributesFactory.AddCqListener(cqListener);
 
-            var cqAttributes = cqAttributesFactory.Create();
-            try {
-              var query = queryService.NewCq("MyCq", "SELECT * FROM /example_orderobject WHERE quantity > 30", cqAttributes, false);
+      var cqAttributes = cqAttributesFactory.Create();
+      try
+      {
+        var query = queryService.NewCq("MyCq", "SELECT * FROM /example_orderobject WHERE quantity > 30", cqAttributes, false);
 
-              Console.WriteLine("Executing continuous query");
-              query.Execute();
-            
-              Console.WriteLine("Create orders");
-              var order1 = new Order(1, "product x", 23);
-              var order2 = new Order(2, "product y", 37);
-              var order3 = new Order(3, "product z", 1);
-              var order4 = new Order(4, "product z", 102);
-              var order5 = new Order(5, "product x", 17);
-              var order6 = new Order(6, "product z", 42);
-            
-              Console.WriteLine("Putting and changing Order objects in the region");
-              orderRegion.Put("Order1", order1);
-              orderRegion.Put("Order2", order2);
-              orderRegion.Put("Order3", order3);
-              orderRegion.Put("Order4", order4);
-              orderRegion.Put("Order5", order5);
-              orderRegion.Put("Order6", order6);
-            
-              orderRegion.Put("Order2", new Order(2, "product y", 45));
-              orderRegion.Put("Order2", new Order(2, "product y", 29));
-              orderRegion.Remove("Order6");
+        Console.WriteLine("Executing continuous query");
+        query.Execute();
 
-              System.Threading.Thread.Sleep(2000);
+        Console.WriteLine("Create orders");
+        var order1 = new Order(1, "product x", 23);
+        var order2 = new Order(2, "product y", 37);
+        var order3 = new Order(3, "product z", 1);
+        var order4 = new Order(4, "product z", 102);
+        var order5 = new Order(5, "product x", 17);
+        var order6 = new Order(6, "product z", 42);
 
-              query.Stop();
-              query.Close();
-            } catch (IllegalStateException ex) {
-              Console.WriteLine(ex.Message);
-            }
-         
-            cache.Close();
-        }
+        Console.WriteLine("Putting and changing Order objects in the region");
+        orderRegion.Put("Order1", order1);
+        orderRegion.Put("Order2", order2);
+        orderRegion.Put("Order3", order3);
+        orderRegion.Put("Order4", order4);
+        orderRegion.Put("Order5", order5);
+        orderRegion.Put("Order6", order6);
+
+        orderRegion.Put("Order2", new Order(2, "product y", 45));
+        orderRegion.Put("Order2", new Order(2, "product y", 29));
+        orderRegion.Remove("Order6");
+
+        System.Threading.Thread.Sleep(2000);
+
+        query.Stop();
+        query.Close();
+      }
+      catch (IllegalStateException ex)
+      {
+        Console.WriteLine(ex.Message);
+      }
+
+      cache.Close();
     }
+  }
 }
diff --git a/examples/dotnet/ContinuousQueryCs/README.md b/examples/dotnet/ContinuousQueryCs/README.md
index d544412..a652043 100644
--- a/examples/dotnet/ContinuousQueryCs/README.md
+++ b/examples/dotnet/ContinuousQueryCs/README.md
@@ -1,4 +1,4 @@
-# ContinuousQuery Example
+# ContinuousQuery Example
 This is a simple example showing how to execute a continuous query on a Goede region.
 
 ## Prerequisites
diff --git a/examples/dotnet/ContinuousQueryCs/startserver.ps1 b/examples/dotnet/ContinuousQueryCs/startserver.ps1
index c3d5735..347eda1 100644
--- a/examples/dotnet/ContinuousQueryCs/startserver.ps1
+++ b/examples/dotnet/ContinuousQueryCs/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/ContinuousQueryCs/stopserver.ps1 b/examples/dotnet/ContinuousQueryCs/stopserver.ps1
index a95b7a7..10d2352 100644
--- a/examples/dotnet/ContinuousQueryCs/stopserver.ps1
+++ b/examples/dotnet/ContinuousQueryCs/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/DataSerializableCs/Order.cs b/examples/dotnet/DataSerializableCs/Order.cs
index e23078f..7fd6fdb 100644
--- a/examples/dotnet/DataSerializableCs/Order.cs
+++ b/examples/dotnet/DataSerializableCs/Order.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
diff --git a/examples/dotnet/DataSerializableCs/Program.cs b/examples/dotnet/DataSerializableCs/Program.cs
index 84e6529..b37010f 100644
--- a/examples/dotnet/DataSerializableCs/Program.cs
+++ b/examples/dotnet/DataSerializableCs/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -20,43 +20,43 @@
 
 namespace Apache.Geode.Examples.Serializer
 {
-    public class Program
+  public class Program
+  {
+    public static void Main(string[] args)
     {
-        public static void Main(string[] args)
-        {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "none");
-            var cache = cacheFactory.Create();
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
 
-            Console.WriteLine("Registering for data serialization");
+      Console.WriteLine("Registering for data serialization");
 
-            cache.TypeRegistry.RegisterType(Order.CreateDeserializable, 7);
+      cache.TypeRegistry.RegisterType(Order.CreateDeserializable, 7);
 
-            var poolFactory = cache.GetPoolFactory()
-                .AddLocator("localhost", 10334);
-            poolFactory.Create("pool");
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      poolFactory.Create("pool");
 
-            var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                .SetPoolName("pool");
-            var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
 
-            Console.WriteLine("Storing order object in the region");
+      Console.WriteLine("Storing order object in the region");
 
-            const int orderKey = 65;
+      const int orderKey = 65;
 
-            var order = new Order(orderKey, "Donuts", 12);
+      var order = new Order(orderKey, "Donuts", 12);
 
-            Console.WriteLine("order to put is " + order);
-            orderRegion.Put(orderKey, order, null);
+      Console.WriteLine("order to put is " + order);
+      orderRegion.Put(orderKey, order, null);
 
-            Console.WriteLine("Successfully put order, getting now...");
-            var orderRetrieved = orderRegion.Get(orderKey, null);
+      Console.WriteLine("Successfully put order, getting now...");
+      var orderRetrieved = orderRegion.Get(orderKey, null);
 
-            Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
+      Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
 
-            cache.Close();
-        }
+      cache.Close();
     }
+  }
 }
 
 
diff --git a/examples/dotnet/DataSerializableCs/startserver.ps1 b/examples/dotnet/DataSerializableCs/startserver.ps1
index c3d5735..347eda1 100644
--- a/examples/dotnet/DataSerializableCs/startserver.ps1
+++ b/examples/dotnet/DataSerializableCs/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/DataSerializableCs/stopserver.ps1 b/examples/dotnet/DataSerializableCs/stopserver.ps1
index a95b7a7..10d2352 100644
--- a/examples/dotnet/DataSerializableCs/stopserver.ps1
+++ b/examples/dotnet/DataSerializableCs/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/FunctionExecutionCs/Program.cs b/examples/dotnet/FunctionExecutionCs/Program.cs
new file mode 100644
index 0000000..3ad385d
--- /dev/null
+++ b/examples/dotnet/FunctionExecutionCs/Program.cs
@@ -0,0 +1,82 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Apache.Geode.Client;
+
+namespace Apache.Geode.Examples.FunctionExecution
+{
+  class Program
+  {
+    static void Main(string[] args)
+    {
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
+
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      var pool = poolFactory.Create("pool");
+
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var region = regionFactory.Create<object, object>("partition_region");
+
+      Console.WriteLine("Storing id and username in the region");
+
+      string rtimmonsKey = "rtimmons";
+      string rtimmonsValue = "Robert Timmons";
+      string scharlesKey = "scharles";
+      string scharlesValue = "Sylvia Charles";
+
+      region.Put(rtimmonsKey, rtimmonsValue, null);
+      region.Put(scharlesKey, scharlesValue, null);
+
+      Console.WriteLine("Getting the user info from the region");
+      var user1 = region.Get(rtimmonsKey, null);
+      var user2 = region.Get(scharlesKey, null);
+
+      Console.WriteLine(rtimmonsKey + " = " + user1);
+      Console.WriteLine(scharlesKey + " = " + user2);
+
+      ArrayList keyArgs = new ArrayList();
+      keyArgs.Add(rtimmonsKey);
+      keyArgs.Add(scharlesKey);
+
+      var exc = Client.FunctionService<object>.OnRegion<object, object>(region);
+
+      Client.IResultCollector<object> rc = exc.WithArgs<object>(keyArgs).Execute("ExampleMultiGetFunction");
+
+      ICollection<object> res = rc.GetResult();
+
+      Console.WriteLine("Function Execution Results:");
+      Console.WriteLine("   Count = {0}", res.Count);
+
+      foreach (List<object> item in res)
+      {
+        foreach (object item2 in item)
+        {
+          Console.WriteLine("   value = {0}", item2.ToString());
+        }
+      }
+
+      cache.Close();
+    }
+  }
+}
diff --git a/examples/dotnet/FunctionExecutionCs/README.md b/examples/dotnet/FunctionExecutionCs/README.md
new file mode 100644
index 0000000..63045e6
--- /dev/null
+++ b/examples/dotnet/FunctionExecutionCs/README.md
@@ -0,0 +1,25 @@
+# FunctionExecution Example
+This example illustrates how to execute server side java functions.
+
+## Prerequisites
+* Install [Apache Geode](https://geode.apache.org)
+* Build and install [Apache Geode Native](https://github.com/apache/geode-native)
+
+## Running
+* Run the following Powershell script which starts the Geode Locator, deploys the jar file containing your function, starts the Geode Server, and creates the region.
+  ```
+  PS> startserver.ps1
+  ```
+* Execute `Apache.Geode.Examples.FunctionExecutionCs.exe`.
+  
+  output:
+  ```
+  Storing id and username in the region
+  Getting the user info from the region
+  rtimmons = Robert Timmons
+  scharles = Sylvia Charles
+  Function Execution Results:
+     Count = 1
+     value = Robert Timmons
+     value = Sylvia Charles
+  ```
diff --git a/examples/dotnet/FunctionExecutionCs/startserver.ps1 b/examples/dotnet/FunctionExecutionCs/startserver.ps1
new file mode 100644
index 0000000..bc38327
--- /dev/null
+++ b/examples/dotnet/FunctionExecutionCs/startserver.ps1
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
+
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'start locator --name=locator --dir=$PSScriptRoot/locator' -e 'deploy --jar=../../utilities/example.jar' -e 'start server --name=the-server --server-port=50505' -e 'create region --name=partition_region --type=PARTITION'"
+}
\ No newline at end of file
diff --git a/examples/dotnet/FunctionExecutionCs/stopserver.ps1 b/examples/dotnet/FunctionExecutionCs/stopserver.ps1
new file mode 100644
index 0000000..742ce8d
--- /dev/null
+++ b/examples/dotnet/FunctionExecutionCs/stopserver.ps1
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+$GFSH_PATH = ""
+if (Get-Command gfsh -ErrorAction SilentlyContinue)
+{
+    $GFSH_PATH = "gfsh"
+}
+else
+{
+    if (-not (Test-Path env:GEODE_HOME))
+    {
+        Write-Host "Could not find gfsh.  Please set the GEODE_HOME path. e.g. "
+        Write-Host "(Powershell) `$env:GEODE_HOME = <path to Geode>"
+        Write-Host " OR"
+        Write-Host "(Command-line) set %GEODE_HOME% = <path to Geode>"
+    }
+    else
+    {
+        $GFSH_PATH = "$env:GEODE_HOME\bin\gfsh.bat"
+    }
+}
+
+if ($GFSH_PATH -ne "")
+{
+   Invoke-Expression "$GFSH_PATH -e 'connect' -e 'shutdown --include-locators=true'"
+}
\ No newline at end of file
diff --git a/examples/dotnet/PdxAutoSerializer/Order.cs b/examples/dotnet/PdxAutoSerializer/Order.cs
index 7ffea67..7635f11 100644
--- a/examples/dotnet/PdxAutoSerializer/Order.cs
+++ b/examples/dotnet/PdxAutoSerializer/Order.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -17,27 +17,27 @@
 
 namespace Apache.Geode.Examples.Serializer
 {
-    public class Order
+  public class Order
+  {
+    public int OrderId { get; set; }
+    public string Name { get; set; }
+    public short Quantity { get; set; }
+
+    // A default constructor is required for reflection based autoserialization
+    public Order() { }
+
+    public Order(int orderId, string name, short quantity)
     {
-        public int OrderId { get; set; }
-        public string Name { get; set; }
-        public short Quantity { get; set; }
-
-        // A default constructor is required for reflection based autoserialization
-        public Order() { }
-
-        public Order(int orderId, string name, short quantity)
-        {
-            OrderId = orderId;
-            Name = name;
-            Quantity = quantity;
-        }
-
-        public override string ToString()
-        {
-            return "Order: [" + OrderId + ", " + Name + ", " + Quantity + "]";
-        }
+      OrderId = orderId;
+      Name = name;
+      Quantity = quantity;
     }
+
+    public override string ToString()
+    {
+      return "Order: [" + OrderId + ", " + Name + ", " + Quantity + "]";
+    }
+  }
 }
 
 
diff --git a/examples/dotnet/PdxAutoSerializer/Program.cs b/examples/dotnet/PdxAutoSerializer/Program.cs
index 2005ec0..2cacc78 100644
--- a/examples/dotnet/PdxAutoSerializer/Program.cs
+++ b/examples/dotnet/PdxAutoSerializer/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -20,43 +20,43 @@
 
 namespace Apache.Geode.Examples.Serializer
 {
-    public class Program
+  public class Program
+  {
+    public static void Main(string[] args)
     {
-        public static void Main(string[] args)
-        {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "none");
-            var cache = cacheFactory.Create();
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
 
-            Console.WriteLine("Registering for reflection-based auto serialization");
+      Console.WriteLine("Registering for reflection-based auto serialization");
 
-            cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer();
+      cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer();
 
-            var poolFactory = cache.GetPoolFactory()
-                .AddLocator("localhost", 10334);
-            poolFactory.Create("pool");
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      poolFactory.Create("pool");
 
-            var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                .SetPoolName("pool");
-            var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
 
-            Console.WriteLine("Storing order object in the region");
+      Console.WriteLine("Storing order object in the region");
 
-            const int orderKey = 65;
+      const int orderKey = 65;
 
-            var order = new Order(orderKey, "Vox AC30", 11);
+      var order = new Order(orderKey, "Vox AC30", 11);
 
-            Console.WriteLine("order to put is " + order);
-            orderRegion.Put(orderKey, order, null);
+      Console.WriteLine("order to put is " + order);
+      orderRegion.Put(orderKey, order, null);
 
-            Console.WriteLine("Successfully put order, getting now...");
-            var orderRetrieved = orderRegion.Get(orderKey, null);
+      Console.WriteLine("Successfully put order, getting now...");
+      var orderRetrieved = orderRegion.Get(orderKey, null);
 
-            Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
+      Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
 
-            cache.Close();
-        }
+      cache.Close();
     }
+  }
 }
 
 
diff --git a/examples/dotnet/PdxAutoSerializer/README.md b/examples/dotnet/PdxAutoSerializer/README.md
index bbe7ecd..26640ba 100644
--- a/examples/dotnet/PdxAutoSerializer/README.md
+++ b/examples/dotnet/PdxAutoSerializer/README.md
@@ -1,4 +1,4 @@
-# PdxAutoSerializer Example
+# PdxAutoSerializer Example
 This is a simple example showing how to register for auto-serialization of custom objects using the ReflectionBasedAutoSerializer class.
 
 ## Prerequisites
diff --git a/examples/dotnet/PdxAutoSerializer/startserver.ps1 b/examples/dotnet/PdxAutoSerializer/startserver.ps1
index c3d5735..347eda1 100644
--- a/examples/dotnet/PdxAutoSerializer/startserver.ps1
+++ b/examples/dotnet/PdxAutoSerializer/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/PdxAutoSerializer/stopserver.ps1 b/examples/dotnet/PdxAutoSerializer/stopserver.ps1
index a95b7a7..10d2352 100644
--- a/examples/dotnet/PdxAutoSerializer/stopserver.ps1
+++ b/examples/dotnet/PdxAutoSerializer/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/PdxSerializableCs/Order.cs b/examples/dotnet/PdxSerializableCs/Order.cs
index 85511fa..968eaf4 100644
--- a/examples/dotnet/PdxSerializableCs/Order.cs
+++ b/examples/dotnet/PdxSerializableCs/Order.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -19,55 +19,55 @@
 
 namespace Apache.Geode.Examples.Serializer
 {
-    public class Order : IPdxSerializable
+  public class Order : IPdxSerializable
+  {
+    private const string ORDER_ID_KEY_ = "order_id";
+    private const string NAME_KEY_ = "name";
+    private const string QUANTITY_KEY_ = "quantity";
+
+    public long OrderId { get; set; }
+    public string Name { get; set; }
+    public short Quantity { get; set; }
+
+    // A default constructor is required for deserialization
+    public Order() { }
+
+    public Order(int orderId, string name, short quantity)
     {
-        private const string ORDER_ID_KEY_ = "order_id";
-        private const string NAME_KEY_ = "name";
-        private const string QUANTITY_KEY_ = "quantity";
-
-        public long OrderId { get; set; }
-        public string Name { get; set; }
-        public short Quantity { get; set; }
-
-        // A default constructor is required for deserialization
-        public Order() { }
-
-        public Order(int orderId, string name, short quantity)
-        {
-            OrderId = orderId;
-            Name = name;
-            Quantity = quantity;
-        }
-
-        public override string ToString()
-        {
-            return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
-        }
-
-        public void ToData(IPdxWriter output)
-        {
-            output.WriteLong(ORDER_ID_KEY_, OrderId);
-            output.MarkIdentityField(ORDER_ID_KEY_);
-
-            output.WriteString(NAME_KEY_, Name);
-            output.MarkIdentityField(NAME_KEY_);
-
-            output.WriteInt(QUANTITY_KEY_, Quantity);
-            output.MarkIdentityField(QUANTITY_KEY_);
-        }
-
-        public void FromData(IPdxReader input)
-        {
-            OrderId = input.ReadLong(ORDER_ID_KEY_);
-            Name = input.ReadString(NAME_KEY_);
-            Quantity = (short)input.ReadInt(QUANTITY_KEY_);
-        }
-
-        public static IPdxSerializable CreateDeserializable()
-        {
-            return new Order();
-        }
+      OrderId = orderId;
+      Name = name;
+      Quantity = quantity;
     }
+
+    public override string ToString()
+    {
+      return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
+    }
+
+    public void ToData(IPdxWriter output)
+    {
+      output.WriteLong(ORDER_ID_KEY_, OrderId);
+      output.MarkIdentityField(ORDER_ID_KEY_);
+
+      output.WriteString(NAME_KEY_, Name);
+      output.MarkIdentityField(NAME_KEY_);
+
+      output.WriteInt(QUANTITY_KEY_, Quantity);
+      output.MarkIdentityField(QUANTITY_KEY_);
+    }
+
+    public void FromData(IPdxReader input)
+    {
+      OrderId = input.ReadLong(ORDER_ID_KEY_);
+      Name = input.ReadString(NAME_KEY_);
+      Quantity = (short)input.ReadInt(QUANTITY_KEY_);
+    }
+
+    public static IPdxSerializable CreateDeserializable()
+    {
+      return new Order();
+    }
+  }
 }
 
 
diff --git a/examples/dotnet/PdxSerializableCs/Program.cs b/examples/dotnet/PdxSerializableCs/Program.cs
index ffed9dd..30a07ef 100644
--- a/examples/dotnet/PdxSerializableCs/Program.cs
+++ b/examples/dotnet/PdxSerializableCs/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -20,43 +20,43 @@
 
 namespace Apache.Geode.Examples.Serializer
 {
-    public class Program
+  public class Program
+  {
+    public static void Main(string[] args)
     {
-        public static void Main(string[] args)
-        {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "none");
-            var cache = cacheFactory.Create();
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
 
-            Console.WriteLine("Registering for data serialization");
+      Console.WriteLine("Registering for data serialization");
 
-            cache.TypeRegistry.RegisterPdxType(Order.CreateDeserializable);
+      cache.TypeRegistry.RegisterPdxType(Order.CreateDeserializable);
 
-            var poolFactory = cache.GetPoolFactory()
-                .AddLocator("localhost", 10334);
-            poolFactory.Create("pool");
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      poolFactory.Create("pool");
 
-            var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                .SetPoolName("pool");
-            var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var orderRegion = regionFactory.Create<int, Order>("example_orderobject");
 
-            Console.WriteLine("Storing order object in the region");
+      Console.WriteLine("Storing order object in the region");
 
-            const int orderKey = 65;
+      const int orderKey = 65;
 
-            var order = new Order(orderKey, "Donuts", 12);
+      var order = new Order(orderKey, "Donuts", 12);
 
-            Console.WriteLine("order to put is " + order);
-            orderRegion.Put(orderKey, order, null);
+      Console.WriteLine("order to put is " + order);
+      orderRegion.Put(orderKey, order, null);
 
-            Console.WriteLine("Successfully put order, getting now...");
-            var orderRetrieved = orderRegion.Get(orderKey, null);
+      Console.WriteLine("Successfully put order, getting now...");
+      var orderRetrieved = orderRegion.Get(orderKey, null);
 
-            Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
+      Console.WriteLine("Order key: " + orderKey + " = " + orderRetrieved);
 
-            cache.Close();
-        }
+      cache.Close();
     }
+  }
 }
 
 
diff --git a/examples/dotnet/PdxSerializableCs/README.md b/examples/dotnet/PdxSerializableCs/README.md
index 4859e84..0ee135e 100644
--- a/examples/dotnet/PdxSerializableCs/README.md
+++ b/examples/dotnet/PdxSerializableCs/README.md
@@ -1,4 +1,4 @@
-# PdxSerializable Example
+# PdxSerializable Example
 This is a simple example showing how to register for serialization of custom objects using the IPDXSerializable class.
 
 ## Prerequisites
diff --git a/examples/dotnet/PdxSerializableCs/startserver.ps1 b/examples/dotnet/PdxSerializableCs/startserver.ps1
index c3d5735..347eda1 100644
--- a/examples/dotnet/PdxSerializableCs/startserver.ps1
+++ b/examples/dotnet/PdxSerializableCs/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/PdxSerializableCs/stopserver.ps1 b/examples/dotnet/PdxSerializableCs/stopserver.ps1
index a95b7a7..10d2352 100644
--- a/examples/dotnet/PdxSerializableCs/stopserver.ps1
+++ b/examples/dotnet/PdxSerializableCs/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/PutGetRemove/Program.cs b/examples/dotnet/PutGetRemove/Program.cs
index 39f4abf..8bbe9f1 100644
--- a/examples/dotnet/PutGetRemove/Program.cs
+++ b/examples/dotnet/PutGetRemove/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
@@ -20,51 +20,51 @@
 
 namespace Apache.Geode.Examples.PutGetRemove
 {
-    class Program
+  class Program
+  {
+    static void Main(string[] args)
     {
-        static void Main(string[] args)
-        {
-            var cacheFactory = new CacheFactory()
-                .Set("log-level", "none");
-            var cache = cacheFactory.Create();
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "none");
+      var cache = cacheFactory.Create();
 
-            var poolFactory = cache.GetPoolFactory()
-                .AddLocator("localhost", 10334);
-            poolFactory.Create("pool");
+      var poolFactory = cache.GetPoolFactory()
+          .AddLocator("localhost", 10334);
+      poolFactory.Create("pool");
 
-            var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-                .SetPoolName("pool");
-            var region = regionFactory.Create<string, string>("example_userinfo");
+      var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
+          .SetPoolName("pool");
+      var region = regionFactory.Create<string, string>("example_userinfo");
 
-            Console.WriteLine("Storing id and username in the region");
+      Console.WriteLine("Storing id and username in the region");
 
-            const string rtimmonsKey = "rtimmons";
-            const string rtimmonsValue = "Robert Timmons";
-            const string scharlesKey = "scharles";
-            const string scharlesValue = "Sylvia Charles";
+      const string rtimmonsKey = "rtimmons";
+      const string rtimmonsValue = "Robert Timmons";
+      const string scharlesKey = "scharles";
+      const string scharlesValue = "Sylvia Charles";
 
-            region.Put(rtimmonsKey, rtimmonsValue, null);
-            region.Put(scharlesKey, scharlesValue, null);
+      region.Put(rtimmonsKey, rtimmonsValue, null);
+      region.Put(scharlesKey, scharlesValue, null);
 
-            Console.WriteLine("Getting the user info from the region");
-            var user1 = region.Get(rtimmonsKey, null);
-            var user2 = region.Get(scharlesKey, null);
+      Console.WriteLine("Getting the user info from the region");
+      var user1 = region.Get(rtimmonsKey, null);
+      var user2 = region.Get(scharlesKey, null);
 
-            Console.WriteLine(rtimmonsKey + " = " + user1);
-            Console.WriteLine(scharlesKey + " = " + user2);
+      Console.WriteLine(rtimmonsKey + " = " + user1);
+      Console.WriteLine(scharlesKey + " = " + user2);
 
-            Console.WriteLine("Removing " + rtimmonsKey + " info from the region");
+      Console.WriteLine("Removing " + rtimmonsKey + " info from the region");
 
-            if (region.Remove(rtimmonsKey))
-            {
-                Console.WriteLine("Info for " + rtimmonsKey + " has been deleted");
-            }
-            else
-            {
-                Console.WriteLine("Info for " + rtimmonsKey + " has not been deleted");
-            }
+      if (region.Remove(rtimmonsKey))
+      {
+        Console.WriteLine("Info for " + rtimmonsKey + " has been deleted");
+      }
+      else
+      {
+        Console.WriteLine("Info for " + rtimmonsKey + " has not been deleted");
+      }
 
-            cache.Close();
-        }
+      cache.Close();
     }
+  }
 }
diff --git a/examples/dotnet/PutGetRemove/README.md b/examples/dotnet/PutGetRemove/README.md
index 0d08e35..66f62cb 100644
--- a/examples/dotnet/PutGetRemove/README.md
+++ b/examples/dotnet/PutGetRemove/README.md
@@ -1,4 +1,4 @@
-# PutGetRemove Example
+# PutGetRemove Example
 This is a very simple example showing how to create a `Cache` using the `CacheFactory`,
 configure a `Pool` with a `PoolFactory`, and configure a `Region` with a `RegionFactory`.
 We then put, get, and remove some primitive data in the region.
diff --git a/examples/dotnet/PutGetRemove/startserver.ps1 b/examples/dotnet/PutGetRemove/startserver.ps1
index bc14e1b..5cec56b 100644
--- a/examples/dotnet/PutGetRemove/startserver.ps1
+++ b/examples/dotnet/PutGetRemove/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/PutGetRemove/stopserver.ps1 b/examples/dotnet/PutGetRemove/stopserver.ps1
index 6ebd665..4857a2d 100644
--- a/examples/dotnet/PutGetRemove/stopserver.ps1
+++ b/examples/dotnet/PutGetRemove/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/RemoteQueryCs/Order.cs b/examples/dotnet/RemoteQueryCs/Order.cs
index 85511fa..20ca913 100644
--- a/examples/dotnet/RemoteQueryCs/Order.cs
+++ b/examples/dotnet/RemoteQueryCs/Order.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
diff --git a/examples/dotnet/RemoteQueryCs/Program.cs b/examples/dotnet/RemoteQueryCs/Program.cs
index 71f2651..997ff6b 100644
--- a/examples/dotnet/RemoteQueryCs/Program.cs
+++ b/examples/dotnet/RemoteQueryCs/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
diff --git a/examples/dotnet/RemoteQueryCs/README.md b/examples/dotnet/RemoteQueryCs/README.md
index 89b2b94..9876dd1 100644
--- a/examples/dotnet/RemoteQueryCs/README.md
+++ b/examples/dotnet/RemoteQueryCs/README.md
@@ -1,4 +1,4 @@
-# RemoteQuery Example
+# RemoteQuery Example
 This is a simple example showing how to execute a query on a remote region.
 
 ## Prerequisites
diff --git a/examples/dotnet/RemoteQueryCs/startserver.ps1 b/examples/dotnet/RemoteQueryCs/startserver.ps1
index 0738fd6..4c5c849 100644
--- a/examples/dotnet/RemoteQueryCs/startserver.ps1
+++ b/examples/dotnet/RemoteQueryCs/startserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/examples/dotnet/RemoteQueryCs/stopserver.ps1 b/examples/dotnet/RemoteQueryCs/stopserver.ps1
index fed864b..5ac5117 100644
--- a/examples/dotnet/RemoteQueryCs/stopserver.ps1
+++ b/examples/dotnet/RemoteQueryCs/stopserver.ps1
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
diff --git a/contrib/pdxautoserializer/src/CMakeLists.txt b/examples/utilities/CMakeLists.txt
similarity index 60%
copy from contrib/pdxautoserializer/src/CMakeLists.txt
copy to examples/utilities/CMakeLists.txt
index 895cd74..0fe49ba 100644
--- a/contrib/pdxautoserializer/src/CMakeLists.txt
+++ b/examples/utilities/CMakeLists.txt
@@ -4,24 +4,26 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(pdxautoserializer)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
+cmake_minimum_required(VERSION 3.10)
 
-add_executable(pdxautoserializer ${SOURCES})
-target_link_libraries(pdxautoserializer
-  PRIVATE
-    antlr
-)
+project(examples LANGUAGES NONE)
 
-install(TARGETS pdxautoserializer DESTINATION bin)
-include_directories(${CMAKE_SOURCE_DIR}/../../src/cppcache/include)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt COPYONLY)
+
+install(FILES
+  ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists.txt
+  ${CMAKE_CURRENT_SOURCE_DIR}/ExampleMultiGetFunction.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/SimpleAuthenticator.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/UserPasswordAuthInit.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/UsernamePrincipal.java
+  DESTINATION examples/utilities)
+
diff --git a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1 b/examples/utilities/CMakeLists.txt.in
similarity index 72%
copy from packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
copy to examples/utilities/CMakeLists.txt.in
index 8cce796..3859d0d 100644
--- a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
+++ b/examples/utilities/CMakeLists.txt.in
@@ -12,9 +12,18 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-$ErrorActionPreference = "Stop"
+cmake_minimum_required (VERSION 3.4)
+project (example)
 
-Import-Module Packer
+set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake)
 
-Install-Package https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu `
-    -MsuPackage .\WindowsBlue-KB3134758-x64.cab
\ No newline at end of file
+find_package(Geode REQUIRED)
+find_package(Java REQUIRED)
+
+include(UseJava)
+
+file(GLOB_RECURSE SOURCES "*.java")
+
+add_jar(example ${SOURCES}
+  INCLUDE_JARS ${Geode_CLASSPATH}
+)
diff --git a/examples/utilities/ExampleMultiGetFunction.java b/examples/utilities/ExampleMultiGetFunction.java
new file mode 100755
index 0000000..dcd689b
--- /dev/null
+++ b/examples/utilities/ExampleMultiGetFunction.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package example;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.cache.Declarable;
+import org.apache.geode.cache.execute.FunctionAdapter;
+import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.execute.ResultSender;
+
+public class ExampleMultiGetFunction extends FunctionAdapter implements Declarable{
+
+  public void execute(FunctionContext context) {
+    ArrayList vals = new ArrayList();
+    if(context.getArguments() instanceof Vector ) {
+       Cache c = null;
+       try {
+         c = CacheFactory.getAnyInstance();
+       }
+       catch (CacheClosedException ex) {
+         vals.add("NoCacheResult");
+         context.getResultSender().lastResult(vals);
+       }
+
+       Region region = c.getRegion("partition_region");
+       Vector keys = (Vector)context.getArguments();
+       System.out.println("Context.getArguments " + keys);
+       Iterator itr = keys.iterator();
+       while (itr.hasNext()) {
+         Object k = itr.next();
+         vals.add(region.get(k));
+         System.out.println("vals " + vals);
+       }
+    }
+    context.getResultSender().lastResult(vals);
+  }
+
+  public String getId() {
+    return "ExampleMultiGetFunction";
+  }
+
+  public void init(Properties arg0) {
+  }
+
+}
diff --git a/examples/utilities/SimpleAuthenticator.java b/examples/utilities/SimpleAuthenticator.java
new file mode 100644
index 0000000..68f0909
--- /dev/null
+++ b/examples/utilities/SimpleAuthenticator.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package javaobject;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import org.apache.geode.LogWriter;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.security.AuthenticationFailedException;
+import org.apache.geode.security.Authenticator;
+import javaobject.UserPasswordAuthInit;
+import javaobject.UsernamePrincipal;
+
+/**
+ * A dummy implementation of the {@link Authenticator} interface that expects a
+ * user name and password allowing authentication depending on the format of the
+ * user name.
+ * 
+ */
+public class SimpleAuthenticator implements Authenticator {
+
+  public static Authenticator create() {
+    return new SimpleAuthenticator();
+  }
+
+  public SimpleAuthenticator() {
+  }
+
+  public void init(Properties systemProps, LogWriter systemLogger,
+      LogWriter securityLogger) throws AuthenticationFailedException {
+  }
+
+  public static boolean testValidName(String userName) {
+
+    return (userName.startsWith("user") || userName.startsWith("reader")
+        || userName.startsWith("writer") || userName.equals("admin")
+        || userName.equals("root") || userName.equals("administrator"));
+  }
+
+  public Principal authenticate(Properties props, DistributedMember member)
+      throws AuthenticationFailedException {
+
+    String userName = props.getProperty(UserPasswordAuthInit.USER_NAME);
+    if (userName == null) {
+      throw new AuthenticationFailedException(
+          "SimpleAuthenticator: user name property ["
+              + UserPasswordAuthInit.USER_NAME + "] not provided");
+    }
+    String password = props.getProperty(UserPasswordAuthInit.PASSWORD);
+    if (password == null) {
+      throw new AuthenticationFailedException(
+          "SimpleAuthenticator: password property ["
+              + UserPasswordAuthInit.PASSWORD + "] not provided");
+    }
+
+    if (userName.equals(password) && testValidName(userName)) {
+      return new UsernamePrincipal(userName);
+    }
+    else {
+      throw new AuthenticationFailedException(
+          "SimpleAuthenticator: Invalid user name [" + userName
+              + "], password supplied.");
+    }
+  }
+
+  public void close() {
+  }
+
+}
diff --git a/examples/utilities/UserPasswordAuthInit.java b/examples/utilities/UserPasswordAuthInit.java
new file mode 100644
index 0000000..d40ba67
--- /dev/null
+++ b/examples/utilities/UserPasswordAuthInit.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package javaobject;
+
+import java.util.Properties;
+
+import org.apache.geode.LogWriter;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.security.AuthInitialize;
+import org.apache.geode.security.AuthenticationFailedException;
+
+/**
+ * An {@link AuthInitialize} implementation that obtains the user name and
+ * password as the credentials from the given set of properties.
+ * 
+ * To use this class the <c>security-client-auth-init</c> property should be
+ * set to the fully qualified name the static <code>create</code> function
+ * viz. <code>templates.security.UserPasswordAuthInit.create</code>
+ *
+ */
+public class UserPasswordAuthInit implements AuthInitialize {
+
+  public static final String USER_NAME = "security-username";
+
+  public static final String PASSWORD = "security-password";
+
+  protected LogWriter securitylog;
+
+  protected LogWriter systemlog;
+
+  public static AuthInitialize create() {
+    return new UserPasswordAuthInit();
+  }
+
+  public void init(LogWriter systemLogger, LogWriter securityLogger)
+      throws AuthenticationFailedException {
+    this.systemlog = systemLogger;
+    this.securitylog = securityLogger;
+  }
+
+  public UserPasswordAuthInit() {
+  }
+
+  public Properties getCredentials(Properties props, DistributedMember server,
+      boolean isPeer) throws AuthenticationFailedException {
+
+    Properties newProps = new Properties();
+    String userName = props.getProperty(USER_NAME);
+    if (userName == null) {
+      throw new AuthenticationFailedException(
+          "UserPasswordAuthInit: user name property [" + USER_NAME
+              + "] not set.");
+    }
+    newProps.setProperty(USER_NAME, userName);
+    String passwd = props.getProperty(PASSWORD);
+    // If password is not provided then use empty string as the password.
+    if (passwd == null) {
+      passwd = "";
+    }
+    newProps.setProperty(PASSWORD, passwd);
+    return newProps;
+  }
+
+  public void close() {
+  }
+
+}
diff --git a/contrib/pdxautoserializer/src/ASCPPInclude.hpp b/examples/utilities/UsernamePrincipal.java
similarity index 61%
copy from contrib/pdxautoserializer/src/ASCPPInclude.hpp
copy to examples/utilities/UsernamePrincipal.java
index 3127313..faeb770 100644
--- a/contrib/pdxautoserializer/src/ASCPPInclude.hpp
+++ b/examples/utilities/UsernamePrincipal.java
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
-#define GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -10,29 +5,39 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *      http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package javaobject;
 
-#define GFINCLUDE
-#define GFEXCLUDE
-#define GFARRAYSIZE(x)
+import java.io.Serializable;
+import java.security.Principal;
 
-// Helper defines to ignore some GNU g++ constructs
-/*
- #define __const const
- #define __volatile__ volatile
- #define __asm__ asm
- #define __restrict
- #define __attribute__(x)
- #define __extension__
- #define __builtin_va_list int
+/**
+ * An implementation of {@link Principal} class for a simple user name.
+ * 
  */
+public class UsernamePrincipal implements Principal, Serializable {
 
-#endif  // GEODE_PDXAUTOSERIALIZER_ASCPPINCLUDE_H_
+  private final String userName;
+
+  public UsernamePrincipal(String userName) {
+    this.userName = userName;
+  }
+
+  public String getName() {
+    return this.userName;
+  }
+
+  @Override
+  public String toString() {
+    return this.userName;
+  }
+
+}
diff --git a/examples/utilities/startserver.sh b/examples/utilities/startserver.sh
new file mode 100755
index 0000000..f26f4b3
--- /dev/null
+++ b/examples/utilities/startserver.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+GFSH_PATH=""
+which gfsh 2> /dev/null
+
+if [ $? -eq 0 ]; then
+    GFSH_PATH="gfsh"
+else
+    if [ "$GEODE_HOME" == "" ]; then
+        echo "Could not find gfsh. Please set the GEODE_HOME path."
+        echo "e.g. export GEODE_HOME=<path to Geode>"
+    else
+        GFSH_PATH=$GEODE_HOME/bin/gfsh
+    fi
+fi
+
+$GFSH_PATH  -e "start locator --name=locator" -e "deploy --jar=../../build/utilities/example.jar" -e "start server --name=the-server --server-port=50505"  -e "create region --name=partition_region --type=PARTITION"
+
+
diff --git a/packer/build-ubuntu.json b/packer/build-ubuntu.json
new file mode 100644
index 0000000..35c48a1
--- /dev/null
+++ b/packer/build-ubuntu.json
@@ -0,0 +1,88 @@
+{
+  "variables":{
+    "region":"us-west-2",
+    "source_ami":"ami-08718fb38f5f50f34",
+    "source_image_name":"X.vmx",
+    "image_name":"build-ubuntu"
+  },
+  "builders":[
+    {
+      "type":"amazon-ebs",
+      "instance_type":"t2.micro",
+      "ami_name":"native-{{user `version`}}-{{user `image_name`}} {{timestamp}}",
+      "access_key":"{{user `aws_access_key`}}",
+      "secret_key":"{{user `aws_secret_key`}}",
+      "region":"{{user `region`}}",
+      "source_ami":"{{user `source_ami`}}",
+      "subnet_id":"{{user `subnet_id`}}",
+      "vpc_id":"{{user `vpc_id`}}",
+      "tags":{
+        "team":"native",
+        "version":"{{user `version`}}",
+        "source_ami":"{{user `source_ami`}}"
+      },
+      "ssh_username":"ubuntu",
+      "ssh_pty":true
+    }
+  ],
+  "provisioners":[
+    {
+      "type":"shell",
+      "script":"ubuntu/wait-for-cloud-init.sh"
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/update.sh"
+      ]
+    },
+    {
+      "type":"file",
+      "source":"ubuntu/files",
+      "destination":"/tmp"
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "inline":[
+        "cp -rv /tmp/files/* /",
+        "rm -rf /tmp/files",
+        "chmod +x /etc/init-user.sh",
+        "chmod +x /usr/local/bin/update-hosts.sh",
+        "systemctl daemon-reload",
+        "systemctl enable update-hosts.service",
+        "systemctl start update-hosts.service"
+      ]
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/add-user-build.sh",
+        "ubuntu/install-packages.sh",
+        "ubuntu/install-coverage-tools.sh",
+        "ubuntu/install-cmake.sh"
+      ]
+    },
+    {
+      "type":"file",
+      "source":"{{user `gemfire_archive`}}",
+      "destination":"gemfire.tar.gz"
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/install-gemfire.sh"
+      ]
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/cleanup.sh"
+      ]
+    }
+  ]
+}
diff --git a/packer/build-windows.json b/packer/build-windows.json
index cde6f43..20020b2 100644
--- a/packer/build-windows.json
+++ b/packer/build-windows.json
@@ -30,59 +30,53 @@
         {
           "device_name":"/dev/sda1",
           "delete_on_termination":true,
-          "volume_size":60
+          "volume_size":100
         }
       ]
     }
   ],
-  "provisioners":[
+  "provisioners": [
     {
-      "pause_before":"30s",
-      "type":"powershell",
-      "inline":[
-        "Install-WindowsFeature -name NET-Framework-Core"
-      ]
-    },
-    {
-      "type":"powershell",
-      "scripts":[
+      "pause_before":"60s",      
+      "type": "powershell",
+      "scripts": [
         "windows/install-dependencies.ps1"
       ]
     },
     {
-      "type":"file",
-      "source":"{{user `gemfire_archive`}}",
-      "destination":"gemfire.tar.gz"
+      "type": "file",
+      "source": "{{user `gemfire_archive`}}",
+      "destination": "gemfire.tar.gz"
     },
     {
-      "type":"powershell",
-      "scripts":[
+      "type": "powershell",
+      "scripts": [
         "windows/install-gemfire.ps1"
       ]
     },
     {
-      "type":"powershell",
-      "scripts":[
+      "type": "powershell",
+      "scripts": [
         "windows/add-user-build.ps1"
       ]
     },
     {
-      "type":"file",
-      "source":"windows/init-user-build.ps1",
-      "destination":"C:/Users/build/init-user-build.ps1"
+      "type": "file",
+      "source": "windows/init-user-build.ps1",
+      "destination": "C:/Users/build/init-user-build.ps1"
     },
     {
-      "type":"powershell",
-      "scripts":[
+      "type": "powershell",
+      "scripts": [
         "windows/cleanup.ps1"
       ]
     },
     {
-      "type":"powershell",
-      "scripts":[
-        "windows/setup-ec2config.ps1"
+      "type": "powershell",
+      "scripts": [
+        "windows/setup-ec2launch.ps1"
       ],
-      "only":[
+      "only": [
         "amazon-ebs"
       ]
     }
diff --git a/packer/dev-windows-2012-r2.json b/packer/dev-windows-2012-r2.json
index 284c7d1..bd3f539 100644
--- a/packer/dev-windows-2012-r2.json
+++ b/packer/dev-windows-2012-r2.json
@@ -3,7 +3,7 @@
     "region":"us-west-2",
     "source_ami":"",
     "source_image_name":"X.vmx",
-    "image_name":"dev-windows-2012-r2"
+    "image_name":"dev-windows-2016"
   },
   "builders":[
     {
diff --git a/packer/rhel/install-cmake.sh b/packer/rhel/install-cmake.sh
index ab3f79e..552faae 100644
--- a/packer/rhel/install-cmake.sh
+++ b/packer/rhel/install-cmake.sh
@@ -19,7 +19,7 @@
 
 tmp=`mktemp`
 
-curl -o ${tmp} -v -L https://cmake.org/files/v3.10/cmake-3.10.3-Linux-x86_64.sh
+curl -o ${tmp} -v -L https://cmake.org/files/v3.12/cmake-3.12.4-Linux-x86_64.sh
 
 bash ${tmp} --skip-license --prefix=/usr/local
 
diff --git a/packer/solaris/changepasswd b/packer/solaris/changepasswd
index 2cfe960..caae9c0 100755
--- a/packer/solaris/changepasswd
+++ b/packer/solaris/changepasswd
@@ -1,4 +1,18 @@
 #!/usr/bin/env expect -f
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
 set force_conservative 0  ;# set to 1 to force conservative mode even if
                           ;# script wasn't run conservatively originally
diff --git a/packer/test-windows-2012-r2.json b/packer/test-windows-2012-r2.json
index 488d696..bfd284b 100644
--- a/packer/test-windows-2012-r2.json
+++ b/packer/test-windows-2012-r2.json
@@ -3,7 +3,7 @@
     "region":"us-west-2",
     "source_ami":"",
     "source_image_name":"X.vmx",
-    "image_name":"test-windows-2012-r2"
+    "image_name":"test-windows-2016"
   },
   "builders":[
     {
diff --git a/packer/test-windows-2012.json b/packer/test-windows-2012.json
index 0763805..bfd284b 100644
--- a/packer/test-windows-2012.json
+++ b/packer/test-windows-2012.json
@@ -3,7 +3,7 @@
     "region":"us-west-2",
     "source_ami":"",
     "source_image_name":"X.vmx",
-    "image_name":"test-windows-2012"
+    "image_name":"test-windows-2016"
   },
   "builders":[
     {
diff --git a/packer/ubuntu-16.04-base.json b/packer/ubuntu-16.04-base.json
new file mode 100644
index 0000000..abdb064
--- /dev/null
+++ b/packer/ubuntu-16.04-base.json
@@ -0,0 +1,48 @@
+{
+  "variables":{
+    "region":"us-west-2",
+    "source_ami":"ami-0afae182eed9d2b46",
+    "source_image_name":"X.vmx",
+    "image_name":"ubuntu-16.04-base"
+  },
+  "builders":[
+    {
+      "type":"amazon-ebs",
+      "instance_type":"t2.micro",
+      "ami_name":"native-{{user `version`}}-{{user `image_name`}} {{timestamp}}",
+      "access_key":"{{user `aws_access_key`}}",
+      "secret_key":"{{user `aws_secret_key`}}",
+      "region":"{{user `region`}}",
+      "source_ami":"{{user `source_ami`}}",
+      "subnet_id":"{{user `subnet_id`}}",
+      "vpc_id":"{{user `vpc_id`}}",
+      "tags":{
+        "team":"native",
+        "version":"{{user `version`}}",
+        "source_ami":"{{user `source_ami`}}"
+      },
+      "ssh_username":"ubuntu",
+      "ssh_pty":true
+    }
+  ],
+  "provisioners":[
+    {
+      "type":"shell",
+      "script":"ubuntu/wait-for-cloud-init.sh"
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/update.sh"
+      ]
+    },
+    {
+      "type":"shell",
+      "execute_command":"{{.Vars}} sudo -E -S bash '{{.Path}}'",
+      "scripts":[
+        "ubuntu/cleanup.sh"
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/add-user-build.sh
old mode 100644
new mode 100755
similarity index 82%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/add-user-build.sh
index b817deb..e3ddd21
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/add-user-build.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,9 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+#set -x -e -o pipefail
+
+useradd -m build
+
+(crontab -l -u build ; echo "@reboot /etc/init-user.sh") | sort - | uniq - | crontab -u build -
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/cleanup.sh
similarity index 86%
rename from contrib/pdxautoserializer/CMakeLists.txt
rename to packer/ubuntu/cleanup.sh
index b817deb..1398249 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/cleanup.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,8 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+apt-get autoclean
+
diff --git a/packer/ubuntu/files/etc/init-user.sh b/packer/ubuntu/files/etc/init-user.sh
new file mode 100644
index 0000000..2ceff71
--- /dev/null
+++ b/packer/ubuntu/files/etc/init-user.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+ATTEMPTS=5
+FAILED=0
+# Fetch public key using HTTP
+while [ ! -f ~/.ssh/authorized_keys ]; do
+    tmp_keys=`mktemp -p . -t authorized_keys.XXXXX` || exit $?
+    curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > $tmp_keys 2>/dev/null
+    if [ $? -eq 0 ]; then
+        grep -f $tmp_keys ~/.ssh/authorized_keys 2>/dev/null
+        if [ $? -eq 0 ]; then
+            echo "AWS public key was already in authorized_keys, not adding it again"
+        else
+            if [ ! -d ~/.ssh ]; then
+                mkdir ~/.ssh
+				chmod 700 ~/.ssh
+				restorecon ~/.ssh
+            fi
+            cat $tmp_keys >> ~/.ssh/authorized_keys
+            chmod 0600 ~/.ssh/authorized_keys
+            restorecon ~/.ssh/authorized_keys
+            echo "Successfully retrieved AWS public key from instance metadata"
+        fi
+    else
+        FAILED=$(($FAILED + 1))
+        if [ $FAILED -ge $ATTEMPTS ]; then
+            echo "Failed to retrieve AWS public key after $FAILED attempts, quitting"
+            rm -f
+            break
+        fi
+        echo "Could not retrieve AWS public key (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."
+        sleep 5
+    fi
+    rm -f $tmp_keys
+done
diff --git a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1 b/packer/ubuntu/files/etc/systemd/system/update-hosts.service
similarity index 75%
rename from packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
rename to packer/ubuntu/files/etc/systemd/system/update-hosts.service
index 8cce796..cd954ce 100644
--- a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
+++ b/packer/ubuntu/files/etc/systemd/system/update-hosts.service
@@ -12,9 +12,15 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-$ErrorActionPreference = "Stop"
 
-Import-Module Packer
+[Unit]
+Description=Ensure an A record exists for local hostname in /etc/hosts
+After=network.target
+After=network-online.target
+Wants=network-online.target
 
-Install-Package https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu `
-    -MsuPackage .\WindowsBlue-KB3134758-x64.cab
\ No newline at end of file
+[Service]
+ExecStart=/usr/local/bin/update-hosts.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/files/usr/local/bin/update-hosts.sh
similarity index 83%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/files/usr/local/bin/update-hosts.sh
index b817deb..43921de 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/files/usr/local/bin/update-hosts.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,8 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+# add hostname to /etc/hosts if not set
+if (! getent hosts `hostname` >/dev/null); then
+  echo `hostname -I` `hostname` >> /etc/hosts
+fi
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/install-cmake.sh
similarity index 78%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/install-cmake.sh
index b817deb..552faae 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/install-cmake.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,13 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+tmp=`mktemp`
+
+curl -o ${tmp} -v -L https://cmake.org/files/v3.12/cmake-3.12.4-Linux-x86_64.sh
+
+bash ${tmp} --skip-license --prefix=/usr/local
+
+rm -f ${tmp}
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/install-coverage-tools.sh
similarity index 84%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/install-coverage-tools.sh
index b817deb..8d268af 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/install-coverage-tools.sh
@@ -1,19 +1,24 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+# for coveralls.io
+pip install cpp-coveralls
+
+# For codecov.ip
+apt-get -y install lcov
\ No newline at end of file
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/install-gemfire.sh
similarity index 86%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/install-gemfire.sh
index b817deb..64382af 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/install-gemfire.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,9 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+mkdir /gemfire
+tar -zxf gemfire.tar.gz -C /gemfire
+rm gemfire.tar.gz
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/install-packages.sh
similarity index 78%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/install-packages.sh
index b817deb..6466945 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/install-packages.sh
@@ -1,19 +1,22 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+apt-get -y install libc++-dev libc++abi-dev wget doxygen openjdk-8-jdk zlib1g-dev graphviz build-essential python python-pip
+
+pip install --upgrade pip
diff --git a/contrib/pdxautoserializer/CMakeLists.txt b/packer/ubuntu/update.sh
similarity index 83%
copy from contrib/pdxautoserializer/CMakeLists.txt
copy to packer/ubuntu/update.sh
index b817deb..13bc1d1 100644
--- a/contrib/pdxautoserializer/CMakeLists.txt
+++ b/packer/ubuntu/update.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,8 +14,8 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-cmake_minimum_required(VERSION 3.4)
-project(geode-native-tools)
 
-add_subdirectory(dependencies)
-add_subdirectory(src)
+set -x -e -o pipefail
+
+export DEBIAN_FRONTEND=noninteractive
+apt update && apt -yq full-upgrade && apt-get -y autoremove
diff --git a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1 b/packer/ubuntu/wait-for-cloud-init.sh
similarity index 73%
copy from packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
copy to packer/ubuntu/wait-for-cloud-init.sh
index 8cce796..86b394c 100644
--- a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
+++ b/packer/ubuntu/wait-for-cloud-init.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -12,9 +14,13 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-$ErrorActionPreference = "Stop"
 
-Import-Module Packer
 
-Install-Package https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu `
-    -MsuPackage .\WindowsBlue-KB3134758-x64.cab
\ No newline at end of file
+#set -x
+set -e
+set -o pipefail
+
+# leaves tail running but we should be restarting anyway
+{ tail -n +1 -f /var/log/cloud-init.log /var/log/cloud-init-output.log & } | sed \
+		-e '/Cloud-init .* finished/q' \
+		-e '/Failed at merging in cloud config/q1'
diff --git a/packer/windows-2012-r2-base.json b/packer/windows-2016-base.json
similarity index 83%
rename from packer/windows-2012-r2-base.json
rename to packer/windows-2016-base.json
index 50ed0c0..cefb0ad 100644
--- a/packer/windows-2012-r2-base.json
+++ b/packer/windows-2016-base.json
@@ -3,7 +3,7 @@
     "region":"us-west-2",
     "source_ami":"",
     "source_image_name":"X.vmx",
-    "image_name":"windows-2012-r2-base"
+    "image_name":"windows-2016-base"
   },
   "builders":[
     {
@@ -36,19 +36,13 @@
     {
       "type":"powershell",
       "scripts":[
-        "windows/install-windows-8.1-2012-r2-wmf-5.ps1"
-      ]
-    },
-    {
-      "type":"powershell",
-      "scripts":[
         "windows/install-chocolatey.ps1"
       ]
     },
     {
       "type":"file",
       "source":"windows/init-ssh.ps1",
-      "destination":"$Env:ProgramFiles/Amazon/Ec2ConfigService/Scripts/init-ssh.ps1"
+      "destination":"$Env:ProgramData/Amazon/EC2-Windows/Launch/Scripts/init-ssh.ps1"
     },
     {
       "type":"powershell",
@@ -65,7 +59,7 @@
     {
       "type":"powershell",
       "scripts":[
-        "windows/setup-ec2config.ps1"
+        "windows/setup-ec2launch.ps1"
       ],
       "only":[
         "amazon-ebs"
diff --git a/packer/windows-2012-r2-vs-2015.json b/packer/windows-2016-vs-2017.json
similarity index 66%
rename from packer/windows-2012-r2-vs-2015.json
rename to packer/windows-2016-vs-2017.json
index f795d92..9ebe9c3 100644
--- a/packer/windows-2012-r2-vs-2015.json
+++ b/packer/windows-2016-vs-2017.json
@@ -3,7 +3,7 @@
     "region":"us-west-2",
     "source_ami":"ami-ac5395cc",
     "source_image_name":"X.vmx",
-    "image_name":"windows-2012-vs-2015"
+    "image_name":"windows-2016-vs-2017"
   },
   "builders":[
     {
@@ -29,36 +29,37 @@
         {
           "device_name":"/dev/sda1",
           "delete_on_termination":true,
-          "volume_size":60
+          "volume_size":100
         }
       ]
     }
   ],
-  "provisioners":[
+  "provisioners": [
     {
-      "pause_before":"30s",
-      "type":"file",
-      "source":"windows/vs-2015-admin.xml",
-      "destination":"vs-2015-admin.xml"
-    },
-    {
-      "type":"powershell",
-      "inline":[
-        "choco install visualstudio2015community -y --ignore-package-exit-codes --ia \"/AdminFile C:\\Users\\Administrator\\vs-2015-admin.xml\""
+      "pause_before":"60s",
+      "type": "powershell",
+      "scripts": [
+        "windows/install-vs-2017-community.ps1"
       ]
     },
     {
-      "type":"powershell",
-      "scripts":[
+      "type": "powershell",
+      "inline": [	
+        "Install-WindowsFeature -name NET-Framework-Core"	
+      ]
+    },
+    {
+      "type": "powershell",
+      "scripts": [
         "windows/cleanup.ps1"
       ]
     },
     {
-      "type":"powershell",
-      "scripts":[
-        "windows/setup-ec2config.ps1"
+      "type": "powershell",
+      "scripts": [
+        "windows/setup-ec2launch.ps1"
       ],
-      "only":[
+      "only": [
         "amazon-ebs"
       ]
     }
diff --git a/packer/windows/Packer.psm1 b/packer/windows/Packer.psm1
index 062e23f..6ca5962 100644
--- a/packer/windows/Packer.psm1
+++ b/packer/windows/Packer.psm1
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 Set-PSDebug -Trace 0
 
 function Install-Package {
diff --git a/packer/windows/add-user-build.ps1 b/packer/windows/add-user-build.ps1
index 042d0e6..31606d6 100644
--- a/packer/windows/add-user-build.ps1
+++ b/packer/windows/add-user-build.ps1
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 $user = "build"
 $pass = "p1votal!"
 
diff --git a/packer/windows/cleanup.ps1 b/packer/windows/cleanup.ps1
index 979a36e..c6a9366 100644
--- a/packer/windows/cleanup.ps1
+++ b/packer/windows/cleanup.ps1
@@ -12,25 +12,10 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 # Remove admin ssh keys
 Remove-Item C:\Users\Administrator\.ssh -Recurse -Force -ErrorAction SilentlyContinue
 
 # Cleanup temp
 Get-ChildItem $env:tmp -Recurse | Remove-Item -Recurse -force -ErrorAction SilentlyContinue
 Get-ChildItem ([environment]::GetEnvironmentVariable("temp","machine")) -Recurse| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
-
-# Cleanup Ec2ConfigService
-Remove-Item $Env:ProgramFiles\Amazon\Ec2ConfigService\Scripts\UserScript.ps1 -Force -ErrorAction SilentlyContinue
-Remove-Item $Env:ProgramFiles\Amazon\Ec2ConfigService\Logs -Recurse -Force -ErrorAction SilentlyContinue
-
-# TODO debuggin
-exit 0
-
-# Cleanup Windows SxS
-Dism.exe /online /Cleanup-Image /StartComponentCleanup
-
-# Cleanup Event Log
-Get-EventLog -List | foreach {Clear-EventLog -Log $_.Log}
-
-# Defrag
-defrag.exe C: /h /u /v /x
diff --git a/packer/windows/init-ssh.ps1 b/packer/windows/init-ssh.ps1
index 71fcb8f..bff7ea1 100644
--- a/packer/windows/init-ssh.ps1
+++ b/packer/windows/init-ssh.ps1
@@ -21,18 +21,9 @@
 
   mkdir -p $ssh -ErrorAction SilentlyContinue
 
-  Invoke-WebRequest -Uri 'http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key' -OutFile $authorized_keys
+  Invoke-WebRequest -Uri "http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key" -OutFile $authorized_keys
 
-  # Give sshd permission to read authorized_keys
-  Import-Module 'C:\Program Files\OpenSSH-Win64\OpenSSHUtils' -force
+  Import-Module "$Env:ProgramFiles\OpenSSH-Win64\OpenSSHUtils" -force
 
-  $currentUserSid = Get-UserSID -User "NT SERVICE\sshd"
-  $account = Get-UserAccount -UserSid $currentUserSid
-  $ace = New-Object System.Security.AccessControl.FileSystemAccessRule `
-                            ($account, "Read", "None", "None", "Allow")
-  $acl = Get-Acl $authorized_keys
-  $acl.AddAccessRule($ace)
-  Enable-Privilege SeRestorePrivilege | out-null
-  Set-Acl -Path $authorized_keys -AclObject $acl -Confirm:$false
-
+  Repair-AuthorizedKeyPermission $authorized_keys -Confirm:$false
 }
diff --git a/packer/windows/install-chocolatey.ps1 b/packer/windows/install-chocolatey.ps1
index 9fa384d..60bdd85 100644
--- a/packer/windows/install-chocolatey.ps1
+++ b/packer/windows/install-chocolatey.ps1
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 $ErrorActionPreference = "Stop"
 
 write-host "Installing Chocolatey"
diff --git a/packer/windows/install-gemfire.ps1 b/packer/windows/install-gemfire.ps1
index 1a4ed54..d228157 100644
--- a/packer/windows/install-gemfire.ps1
+++ b/packer/windows/install-gemfire.ps1
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 $ErrorActionPreference = "Stop"
 Import-Module Packer -Force
 
diff --git a/packer/windows/install-ssh.ps1 b/packer/windows/install-ssh.ps1
index 8cdfa18..0b4165b 100644
--- a/packer/windows/install-ssh.ps1
+++ b/packer/windows/install-ssh.ps1
@@ -18,6 +18,9 @@
 $ErrorActionPreference = "Stop"
 
 write-host "Installing OpenSSH"
-choco install openssh -params '"/SSHServerFeature"' --version 0.0.24.0 -confirm
+choco install openssh -params '/SSHServerFeature' -confirm
 
-schtasks.exe /Create /TN init-ssh /RU SYSTEM /SC ONSTART /TR "powershell.exe -File 'C:\Program Files\Amazon\Ec2ConfigService\Scripts\init-ssh.ps1'"
+(Get-Content -Path $Env:ProgramData\ssh\sshd_config -Raw) -replace '.*Match Group administrators.*','' -replace '.*administrators_authorized_keys.*','' | Set-Content -Path $Env:ProgramData\ssh\sshd_config
+
+schtasks.exe /Create /TN init-ssh /RU SYSTEM /SC ONSTART /TR "powershell.exe -File '${Env:ProgramData}\Amazon\EC2-Windows\Launch\Scripts\init-ssh.ps1'"
+
diff --git a/packer/windows/install-vs-2017-community.ps1 b/packer/windows/install-vs-2017-community.ps1
new file mode 100644
index 0000000..8c0e196
--- /dev/null
+++ b/packer/windows/install-vs-2017-community.ps1
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# TODO AdminDeploy.xml
+# vs_community.exe /AdminFile C:\Users\Administrator\AdminDeployment.xml /Log setup.log /Passive
+
+Set-PSDebug -Trace 0
+
+$vs_community_bootstrapper_uri = "https://download.visualstudio.microsoft.com/download/pr/5df30b3f-9db2-4195-bce3-c5518277da5d/18edc9dd7697111f993c5c06f18b51e5/vs_community.exe"
+$vs_community_bootstrapper = "C:\vs_community.exe"
+
+$args = @('--installPath "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community"'
+          '--add microsoft.net.component.4.targetingpack'
+		  '--add microsoft.net.component.4.5.1.targetingpack'
+		  '--add microsoft.visualstudio.component.debugger.justintime'
+		  '--add microsoft.visualstudio.component.web'
+		  '--add microsoft.visualstudio.component.vc.coreide'
+		  '--add microsoft.visualstudio.component.vc.redist.14.latest'
+		  '--add microsoft.visualstudio.component.graphics.win81'
+		  '--add microsoft.visualstudio.component.vc.cmake.project'
+		  '--add microsoft.visualstudio.component.vc.testadapterforgoogletest'
+		  '--add microsoft.component.vc.runtime.ucrtsdk'
+		  '--add microsoft.visualstudio.component.windows81sdk'
+		  '--add microsoft.visualstudio.component.vc.cli.support'
+		  '--add microsoft.visualstudio.component.windows10sdk.17134'
+		  '--add microsoft.visualstudio.component.windows10sdk.16299.desktop'
+		  '--add microsoft.visualstudio.component.webdeploy'
+		  '--add microsoft.component.pythontools'
+		  '--add component.cpython2.x64'
+		  '--add microsoft.net.component.3.5.developertools'
+		  '--add microsoft.visualstudio.component.typescript.3.0'
+		  '--quiet'
+		  )
+
+Invoke-WebRequest -Uri $vs_community_bootstrapper_uri -OutFile $vs_community_bootstrapper
+
+Start-Process -Filepath $vs_community_bootstrapper -ArgumentList $args -Wait
+
+Exit 0
diff --git a/packer/windows/setup-ec2config.ps1 b/packer/windows/setup-ec2config.ps1
index 4fefd66..04124b1 100644
--- a/packer/windows/setup-ec2config.ps1
+++ b/packer/windows/setup-ec2config.ps1
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
 # Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
 $ec2config = [xml] (get-content 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml')
 ($ec2config.ec2configurationsettings.plugins.plugin | where {$_.name -eq "Ec2SetPassword"}).state = "Enabled"
@@ -20,3 +21,13 @@
 ($ec2config.ec2configurationsettings.plugins.plugin | where {$_.name -eq "Ec2SetComputerName"}).state = "Enabled"
 ($ec2config.ec2configurationsettings.plugins.plugin | where {$_.name -eq "Ec2EventLog"}).state = "Enabled"
 $ec2config.save("C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml")
+$ec2DiskConfig = [xml] (get-content 'C:\Program Files\Amazon\Ec2ConfigService\Settings\DriveLetterConfig.xml')
+$mappingElement = $ec2DiskConfig.SelectNodes("DriveLetterMapping")[0].Mapping;
+if (!$mappingElement) {
+	$mappingElement = $ec2DiskConfig.SelectNodes("DriveLetterMapping")[0].AppendChild($ec2DiskConfig.CreateElement("Mapping"))
+	$volumeNameElement = $mappingElement.AppendChild($ec2DiskConfig.CreateElement("VolumeName"))
+	$volumeName = $volumeNameElement.AppendChild($ec2DiskConfig.CreateTextNode("Temporary Storage 0"))
+	$driveLetterElement = $mappingElement.AppendChild($ec2DiskConfig.CreateElement("DriveLetter"))
+	$driveLetter = $driveLetterElement.AppendChild($ec2DiskConfig.CreateTextNode("D:"))
+	$ec2DiskConfig.save("C:\Program Files\Amazon\Ec2ConfigService\Settings\DriveLetterConfig.xml")
+}
\ No newline at end of file
diff --git a/packer/windows/setup-ec2launch.ps1 b/packer/windows/setup-ec2launch.ps1
new file mode 100644
index 0000000..d48d1ac
--- /dev/null
+++ b/packer/windows/setup-ec2launch.ps1
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+$launchConfig = Get-Content -Path C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json | ConvertFrom-Json
+$launchConfig.adminPasswordType = 'Random'
+$launchConfig.adminPassword = ''
+$launchConfig.setComputerName = ${True}
+$launchConfig.extendBootVolumeSize = ${True}
+$launchConfig.handleUserData = ${True}
+
+Set-Content -Value ($launchConfig | ConvertTo-Json) -Path C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json
+
+C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
+C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule
diff --git a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1 b/packer/windows/uninstall-doxygen.ps1
similarity index 62%
copy from packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
copy to packer/windows/uninstall-doxygen.ps1
index 8cce796..5175f1d 100644
--- a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
+++ b/packer/windows/uninstall-doxygen.ps1
@@ -4,17 +4,20 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-$ErrorActionPreference = "Stop"
 
-Import-Module Packer
+# Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
 
-Install-Package https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu `
-    -MsuPackage .\WindowsBlue-KB3134758-x64.cab
\ No newline at end of file
+$package = 'doxygen.install'
+$uninstallRegKey = 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\doxygen_is1'
+
+Import-Module C:\ProgramData\chocolatey\helpers\chocolateyInstaller.psm1
+$uninstallPath = (Get-ItemProperty $uninstallRegKey UninstallString).UninstallString
+Uninstall-ChocolateyPackage $package 'exe' '/VERYSILENT' $uninstallPath
diff --git a/sqliteimpl/CMakeLists.txt b/sqliteimpl/CMakeLists.txt
index ea81bf2..976b113 100644
--- a/sqliteimpl/CMakeLists.txt
+++ b/sqliteimpl/CMakeLists.txt
@@ -23,8 +23,12 @@
   SqLiteImpl.hpp
 )
 
+if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+  set_source_files_properties(SqLiteImpl.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-result)
+endif()
+
 set_target_properties(SqLiteImpl PROPERTIES
-	FOLDER cpp/test/integration
+  FOLDER cpp/test/integration
 )
 
 include(GenerateExportHeader)
@@ -32,12 +36,12 @@
 
 target_include_directories(SqLiteImpl
   PUBLIC
-	  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
 
 target_link_libraries(SqLiteImpl
   PUBLIC
     apache-geode
-    sqlite
+    SQLite::sqlite3
   PRIVATE
     _WarningsAsError
 )
diff --git a/templates/security/CMakeLists.txt b/templates/security/CMakeLists.txt
index df57aa2..b20760e 100644
--- a/templates/security/CMakeLists.txt
+++ b/templates/security/CMakeLists.txt
@@ -25,7 +25,7 @@
 )
 
 set_target_properties(securityImpl PROPERTIES
-	FOLDER cpp/test/integration
+  FOLDER cpp/test/integration
 )
 
 include(GenerateExportHeader)
@@ -33,12 +33,13 @@
 
 target_include_directories(securityImpl
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_link_libraries(securityImpl
   PUBLIC
     apache-geode
-    crypto
+    OpenSSL::Crypto
   PRIVATE
     _WarningsAsError
 )
diff --git a/templates/security/CMakeLists.txt.forInstall b/templates/security/CMakeLists.txt.forInstall
index 91cfd16..9662c22 100644
--- a/templates/security/CMakeLists.txt.forInstall
+++ b/templates/security/CMakeLists.txt.forInstall
@@ -1,12 +1,12 @@
-#Licensed to the Apache Software Foundation(ASF) under one
-# or more contributor license agreements.See the NOTICE file
-#distributed with this work for additional information
-#regarding copyright ownership.The ASF licenses this file
-#to you under the Apache License, Version 2.0(the
-#"License"); you may not use this file except in compliance
-#with the License.You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
 #
-#http:  // www.apache.org/licenses/LICENSE-2.0
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/tests/cli/FwkClient/App.config b/tests/cli/FwkClient/App.config
index f2cb128..3de0bb8 100644
--- a/tests/cli/FwkClient/App.config
+++ b/tests/cli/FwkClient/App.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
diff --git a/tests/cli/PdxClassLibrary/PdxType.cs b/tests/cli/PdxClassLibrary/PdxType.cs
index bdc86de..c55ca76 100644
--- a/tests/cli/PdxClassLibrary/PdxType.cs
+++ b/tests/cli/PdxClassLibrary/PdxType.cs
@@ -18,6 +18,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Text;
 using Apache.Geode.Client;
 using Apache.Geode.Client.Internal;
@@ -48,13 +49,13 @@
 
     public override bool Equals(object obj)
     {
-      Console.WriteLine("in addredd equal");
+      Debug.WriteLine("in addredd equal");
       if (obj == null)
         return false;
       Address other = obj as Address;
       if (other == null)
         return false;
-      Console.WriteLine("in addredd equal2 " + this.ToString() + " : : " + other.ToString());
+      Debug.WriteLine("in addredd equal2 " + this.ToString() + " : : " + other.ToString());
       if (_aptNumber == other._aptNumber
           && _street == other._street
             && _city == other._city)
@@ -168,7 +169,7 @@
       DateTime n = new DateTime((62135596800000/*epoch*/ + 1310447869154) * 10000, DateTimeKind.Utc);
       m_dateTime = n.ToLocalTime();
 
-      Console.WriteLine(m_dateTime.Ticks);
+      Debug.WriteLine(m_dateTime.Ticks);
 
       m_int16Array = new short[] { 0x2332, 0x4545 };
       m_uint16Array = new short[] { 0x3243, 0x3232 };
@@ -288,13 +289,13 @@
     }
     public static byte[] compareByteArray(byte[] a, byte[] a2)
     {
-      Console.WriteLine("Compare byte array " + a.Length + " ; " + a2.Length);
+      Debug.WriteLine("Compare byte array " + a.Length + " ; " + a2.Length);
       if (a.Length == a2.Length)
       {
         int i = 0;
         while (i < a.Length)
         {
-          Console.WriteLine("Compare byte array " + a[i] + " : " + a2[i]);
+          Debug.WriteLine("Compare byte array " + a[i] + " : " + a2[i]);
           if (a[i] != a2[i])
             break;
           else
@@ -366,7 +367,7 @@
     */
     public static DateTime compareData(DateTime b, DateTime b2)
     {
-      Console.WriteLine("date " + b.Ticks + " : " + b2.Ticks);
+      Debug.WriteLine("date " + b.Ticks + " : " + b2.Ticks);
       //TODO: 
       // return b;
       if ((b.Ticks / 10000L) == (b2.Ticks / 10000L))
@@ -869,8 +870,8 @@
         {
           if (!m_address[i].Equals(addressArray[i]))
           {
-            Console.WriteLine(m_address[i]);
-            Console.WriteLine(addressArray[i]);
+            Debug.WriteLine(m_address[i]);
+            Debug.WriteLine(addressArray[i]);
             throw new Exception("Address array not mateched " + i);
           }
         }
diff --git a/tests/cli/PdxClassLibrary/PdxTypesReflectionTest.cs b/tests/cli/PdxClassLibrary/PdxTypesReflectionTest.cs
index e7c12c3..340c3a8 100755
--- a/tests/cli/PdxClassLibrary/PdxTypesReflectionTest.cs
+++ b/tests/cli/PdxClassLibrary/PdxTypesReflectionTest.cs
@@ -18,6 +18,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Text;
 using Apache.Geode.Client;
 using Apache.Geode.Client.Internal;
@@ -45,13 +46,13 @@
 
     public override bool Equals(object obj)
     {
-      Console.WriteLine("in addreddR equal");
+      Debug.WriteLine("in addreddR equal");
       if (obj == null)
         return false;
       AddressR other = obj as AddressR;
       if (other == null)
         return false;
-      Console.WriteLine("in addreddr equal2 " + this.ToString() + " : : " + other.ToString());
+      Debug.WriteLine("in addreddr equal2 " + this.ToString() + " : : " + other.ToString());
       if (_aptNumber == other._aptNumber
           && _street == other._street
             && _city == other._city)
@@ -148,7 +149,7 @@
 
       long ticks = 634460644691540000L;
       m_dateTime = new DateTime(ticks);
-      Console.WriteLine(m_dateTime.Ticks);
+      Debug.WriteLine(m_dateTime.Ticks);
 
       m_int16Array = new short[] { 0x2332, 0x4545 };
       m_uint16Array = new short[] { 0x3243, 0x3232 };
@@ -283,13 +284,13 @@
     }
     byte[] compareByteArray(byte[] a, byte[] a2)
     {
-      Console.WriteLine("Compare byte array " + a.Length + " ; " + a2.Length);
+      Debug.WriteLine("Compare byte array " + a.Length + " ; " + a2.Length);
       if (a.Length == a2.Length)
       {
         int i = 0;
         while (i < a.Length)
         {
-          Console.WriteLine("Compare byte array " + a[i] + " : " + a2[i]);
+          Debug.WriteLine("Compare byte array " + a[i] + " : " + a2[i]);
           if (a[i] != a2[i])
             break;
           else
@@ -356,7 +357,7 @@
 
     DateTime compareData(DateTime b, DateTime b2)
     {
-      Console.WriteLine("date " + b.Ticks + " : " + b2.Ticks);
+      Debug.WriteLine("date " + b.Ticks + " : " + b2.Ticks);
       //TODO:
       // return b;
       if ((b.Ticks / 10000L) == (b2.Ticks / 10000L))
diff --git a/tests/cpp/fwklib/CMakeLists.txt b/tests/cpp/fwklib/CMakeLists.txt
index f57c01e..8aeec6a 100644
--- a/tests/cpp/fwklib/CMakeLists.txt
+++ b/tests/cpp/fwklib/CMakeLists.txt
@@ -17,7 +17,7 @@
 project(framework LANGUAGES CXX)
 
 add_library(framework STATIC
-	FwkBB.hpp
+  FwkBB.hpp
   FwkBBClient.cpp
   FwkBBClient.hpp
   FwkBBServer.cpp
@@ -26,22 +26,27 @@
   FwkExport.hpp
   FwkLog.cpp
   FwkLog.hpp
-	FwkStrCvt.cpp
+  FwkStrCvt.cpp
   FwkStrCvt.hpp
   GsRandom.cpp
   GsRandom.hpp
   IpcHandler.cpp
   IpcHandler.hpp
-	Service.cpp
+  Service.cpp
   Service.hpp
-	TcpIpc.cpp
+  TcpIpc.cpp
   TcpIpc.hpp
-	TimeBomb.cpp
+  TimeBomb.cpp
   TimeBomb.hpp
-	UDPIpc.cpp
+  UDPIpc.cpp
   UDPIpc.hpp
 )
 
+set_target_properties(framework PROPERTIES
+  CXX_VISIBILITY_PRESET hidden
+  VISIBILITY_INLINES_HIDDEN ON
+)
+
 target_compile_options(framework
   PRIVATE
     # Add PIC flags to link later with shared library
@@ -53,16 +58,16 @@
     # headers for this library are referenced relative to the parent
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
   PRIVATE
-  	$<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
+    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
 )
 
 target_link_libraries(framework
   PUBLIC
     apache-geode
   PRIVATE
-    ACE
-		internal
-	  _WarningsAsError
+    ACE::ACE
+    internal
+    _WarningsAsError
 )
 
 add_clangformat(framework)
diff --git a/tests/cpp/fwklib/FwkBBClient.cpp b/tests/cpp/fwklib/FwkBBClient.cpp
index a80134a..644cbdf 100644
--- a/tests/cpp/fwklib/FwkBBClient.cpp
+++ b/tests/cpp/fwklib/FwkBBClient.cpp
@@ -24,10 +24,11 @@
 
 #include "FwkBBClient.hpp"
 
+#include <ace/OS.h>
+#include <ace/Synch.h>
+
 #include "FwkLog.hpp"
 #include "FwkStrCvt.hpp"
-#include "ace/OS.h"
-#include "ace/Synch.h"
 
 namespace apache {
 namespace geode {
diff --git a/tests/cpp/fwklib/FwkStrCvt.hpp b/tests/cpp/fwklib/FwkStrCvt.hpp
index c0b878f..c7914ce 100644
--- a/tests/cpp/fwklib/FwkStrCvt.hpp
+++ b/tests/cpp/fwklib/FwkStrCvt.hpp
@@ -28,9 +28,9 @@
 
 #include <string>
 
-#include <geode/internal/geode_globals.hpp>
+#include <ace/OS.h>
 
-#include "ace/OS.h"
+#include <geode/internal/geode_globals.hpp>
 
 // ----------------------------------------------------------------------------
 
diff --git a/tests/cpp/fwklib/Service.hpp b/tests/cpp/fwklib/Service.hpp
index 566b12a..fea7d71 100644
--- a/tests/cpp/fwklib/Service.hpp
+++ b/tests/cpp/fwklib/Service.hpp
@@ -25,11 +25,10 @@
 #include <string>
 
 #include <ace/Condition_T.h>
+#include <ace/Task.h>
 
 #include <geode/internal/geode_base.hpp>
 
-#include "ace/Task.h"
-
 namespace apache {
 namespace geode {
 namespace client {
diff --git a/tests/cpp/fwklib/TimeBomb.hpp b/tests/cpp/fwklib/TimeBomb.hpp
index 8b5c1bf..bfb9650 100644
--- a/tests/cpp/fwklib/TimeBomb.hpp
+++ b/tests/cpp/fwklib/TimeBomb.hpp
@@ -23,10 +23,9 @@
 #include <fwklib/FwkLog.hpp>
 
 #include <ace/OS.h>
+#include <ace/Task.h>
 #include <ace/Time_Value.h>
 
-#include "ace/Task.h"
-
 namespace apache {
 namespace geode {
 namespace client {
diff --git a/tests/cpp/security/CMakeLists.txt b/tests/cpp/security/CMakeLists.txt
index e82b470..ce1b499 100644
--- a/tests/cpp/security/CMakeLists.txt
+++ b/tests/cpp/security/CMakeLists.txt
@@ -27,7 +27,7 @@
   PkcsAuthInit.cpp
   PkcsAuthInit.hpp
   PkcsCredentialGenerator.hpp
-		typedefs.hpp
+  typedefs.hpp
   XmlAuthzCredentialGenerator.hpp
 )
 
@@ -36,20 +36,20 @@
 
 target_include_directories(security
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
   PRIVATE
-	$<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
+    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
 )
 
 target_link_libraries(security
   PUBLIC
     framework
     testobject
-    crypto
-    ssl
+    OpenSSL::Crypto
+    OpenSSL::SSL
   PRIVATE
-    ACE
-	_WarningsAsError
+    ACE::ACE
+    _WarningsAsError
 )
 
 add_clangformat(security)
diff --git a/tests/cpp/testobject/CMakeLists.txt b/tests/cpp/testobject/CMakeLists.txt
index eddd919..253b9ce 100644
--- a/tests/cpp/testobject/CMakeLists.txt
+++ b/tests/cpp/testobject/CMakeLists.txt
@@ -73,7 +73,8 @@
 
 target_include_directories(testobject
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_compile_definitions(testobject
   PRIVATE
@@ -89,12 +90,12 @@
 )
 
 target_link_libraries(testobject
-  PUBLIC 
+  PUBLIC
     apache-geode
     framework
   PRIVATE
-    ACE
-	  _WarningsAsError
+    ACE::ACE
+    _WarningsAsError
 )
 
 add_clangformat(testobject)
diff --git a/tests/javaobject/CMakeLists.txt b/tests/javaobject/CMakeLists.txt
index a6f61fd..f65806b 100644
--- a/tests/javaobject/CMakeLists.txt
+++ b/tests/javaobject/CMakeLists.txt
@@ -28,9 +28,3 @@
 
 set(EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/javaobject.jar)
 
-install(DIRECTORY ${COMMON_INCLUDE_DIR} DESTINATION .)
-install(FILES
-        ${EXPORT_FILE_NAME}
-        DESTINATION examples/
-        )
-
diff --git a/xsds/cpp-cache-1.0.xsd b/xsds/cpp-cache-1.0.xsd
index 4a5f3b0..a6c0073 100644
--- a/xsds/cpp-cache-1.0.xsd
+++ b/xsds/cpp-cache-1.0.xsd
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with