You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by xi...@apache.org on 2026/03/23 22:10:34 UTC

(tinkerpop) 05/07: Replace WebSocket with HTTP in .NET driver (#3315)

This is an automated email from the ASF dual-hosted git repository.

xiazcy pushed a commit to branch dotnet-http
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit e4bc587c90878be5d6e0ce5e524f1dba9dd0e628
Author: Yang Xia <55...@users.noreply.github.com>
AuthorDate: Fri Mar 20 11:36:17 2026 -0700

    Replace WebSocket with HTTP in .NET driver (#3315)
    
    Implement non-streaming HTTP in .NET while replacing all WebSocket reference and settings. Message serializers are also updated.
---
 .github/workflows/build-test.yml                   |   68 +-
 gremlin-dotnet/build/generate.groovy               |   11 +-
 gremlin-dotnet/docker-compose.yml                  |   12 +-
 .../src/Gremlin.Net/Driver/Connection.cs           |  371 ++---
 .../src/Gremlin.Net/Driver/ConnectionFactory.cs    |   49 -
 .../src/Gremlin.Net/Driver/ConnectionPool.cs       |  298 ----
 .../Gremlin.Net/Driver/ConnectionPoolSettings.cs   |  146 --
 .../src/Gremlin.Net/Driver/ConnectionSettings.cs   |   88 ++
 .../Driver/Exceptions/ConnectionClosedException.cs |   65 -
 .../Exceptions/ConnectionPoolBusyException.cs      |   60 -
 .../Exceptions/NoConnectionAvailableException.cs   |   56 -
 .../Driver/Exceptions/ResponseException.cs         |   25 +-
 .../Exceptions/ServerUnavailableException.cs       |   45 -
 .../src/Gremlin.Net/Driver/GremlinClient.cs        |  187 +--
 .../Gremlin.Net/Driver/GremlinClientExtensions.cs  |    4 +-
 .../src/Gremlin.Net/Driver/GremlinServer.cs        |   14 +-
 .../src/Gremlin.Net/Driver/IClientWebSocket.cs     |   43 -
 .../src/Gremlin.Net/Driver/IConnection.cs          |   39 -
 .../src/Gremlin.Net/Driver/IConnectionFactory.cs   |   30 -
 .../src/Gremlin.Net/Driver/IMessageSerializer.cs   |    2 +-
 gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs       |   16 +-
 .../Gremlin.Net/Driver/Messages/RequestMessage.cs  |  180 ++-
 .../Gremlin.Net/Driver/Messages/ResponseMessage.cs |   49 +-
 .../Gremlin.Net/Driver/Messages/ResponseResult.cs  |   56 -
 .../Gremlin.Net/Driver/Messages/ResponseStatus.cs  |   72 -
 .../Driver/Messages/ResponseStatusCode.cs          |  157 ---
 .../src/Gremlin.Net/Driver/ProxyClientWebSocket.cs |   81 --
 .../src/Gremlin.Net/Driver/ProxyConnection.cs      |   67 -
 .../Driver/Remote/DriverRemoteConnection.cs        |   55 +-
 .../ResponseHandlerForSingleRequestMessage.cs      |   65 -
 gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs    |   48 +-
 .../src/Gremlin.Net/Driver/WebSocketConnection.cs  |  157 ---
 .../src/Gremlin.Net/Driver/WebSocketSettings.cs    |   58 -
 .../Process/Traversal/GraphTraversal.cs            |    6 +-
 .../Process/Traversal/GraphTraversalSource.cs      |    8 +-
 .../Gremlin.Net/Process/Traversal/GremlinLang.cs   |   15 +
 .../Structure/IO/GraphBinary/DataType.cs           |  166 ---
 .../Structure/IO/GraphBinary/GraphBinaryReader.cs  |  107 --
 .../Structure/IO/GraphBinary/GraphBinaryWriter.cs  |  150 --
 .../Structure/IO/GraphBinary/ITypeSerializer.cs    |  102 --
 .../IO/GraphBinary/ResponseMessageSerializer.cs    |   77 -
 .../Structure/IO/GraphBinary/StreamExtensions.cs   |  281 ----
 .../IO/GraphBinary/TypeSerializerRegistry.cs       |  329 -----
 .../IO/GraphBinary/Types/ArraySerializer.cs        |   65 -
 .../IO/GraphBinary/Types/BigDecimalSerializer.cs   |   95 --
 .../IO/GraphBinary/Types/BigIntegerSerializer.cs   |   62 -
 .../IO/GraphBinary/Types/BulkSetSerializer.cs      |   76 -
 .../IO/GraphBinary/Types/ByteBufferSerializer.cs   |   61 -
 .../IO/GraphBinary/Types/CharSerializer.cs         |   87 --
 .../IO/GraphBinary/Types/ClassSerializer.cs        |   61 -
 .../IO/GraphBinary/Types/CustomTypeSerializer.cs   |   67 -
 .../IO/GraphBinary/Types/DateTimeSerializer.cs     |   67 -
 .../IO/GraphBinary/Types/DurationSerializer.cs     |   61 -
 .../IO/GraphBinary/Types/EdgeSerializer.cs         |   85 --
 .../IO/GraphBinary/Types/EnumSerializer.cs         |  149 --
 .../Structure/IO/GraphBinary/Types/GremlinType.cs  |   49 -
 .../IO/GraphBinary/Types/LambdaSerializer.cs       |   68 -
 .../IO/GraphBinary/Types/ListSerializer.cs         |   70 -
 .../IO/GraphBinary/Types/MapSerializer.cs          |   76 -
 .../GraphBinary/Types/OffsetDateTimeSerializer.cs  |   80 --
 .../Structure/IO/GraphBinary/Types/PSerializer.cs  |  112 --
 .../IO/GraphBinary/Types/PathSerializer.cs         |   74 -
 .../IO/GraphBinary/Types/PropertySerializer.cs     |   68 -
 .../IO/GraphBinary/Types/SetSerializer.cs          |   77 -
 .../IO/GraphBinary/Types/SimpleTypeSerializer.cs   |  125 --
 .../IO/GraphBinary/Types/SingleTypeSerializer.cs   |  122 --
 .../IO/GraphBinary/Types/StringSerializer.cs       |   62 -
 .../IO/GraphBinary/Types/TraversalSerializer.cs    |   60 -
 .../Types/TraversalStrategySerializer.cs           |   62 -
 .../IO/GraphBinary/Types/TraverserSerializer.cs    |   60 -
 .../IO/GraphBinary/Types/TypeSerializer.cs         |   72 -
 .../IO/GraphBinary/Types/UuidSerializer.cs         |  111 --
 .../GraphBinary/Types/VertexPropertySerializer.cs  |   77 -
 .../IO/GraphBinary/Types/VertexSerializer.cs       |   66 -
 .../GraphBinary4MessageSerializer.cs}              |   46 +-
 .../RequestMessageSerializer.cs                    |   26 +-
 .../IO/GraphBinary4/ResponseMessageSerializer.cs   |  106 ++
 .../IO/GraphSON/GraphSONMessageSerializer.cs       |   27 +-
 .../IO/GraphSON/RequestMessageSerializer.cs        |    8 +-
 .../Structure/IO/SerializationTokens.cs            |    4 +-
 .../CompressionBenchmarks.cs                       |   28 +-
 .../MessageSerializerBenchmarks.cs                 |   80 +-
 .../test/Gremlin.Net.Benchmarks/TestMessages.cs    | 1485 +-------------------
 .../Docs/Reference/GremlinVariantsTests.cs         |    9 +-
 .../Docs/Upgrade/Release35Tests.cs                 |    4 +-
 .../Driver/ConnectionPoolTests.cs                  |   91 --
 .../Driver/GremlinClientAuthenticationTests.cs     |  119 --
 .../GremlinClientBehaviorIntegrationTests.cs       |  133 --
 .../Driver/GremlinClientTests.cs                   |  146 +-
 .../Driver/MessagesTests.cs                        |   81 +-
 .../Driver/PropertyDeserializationTests.cs         |   67 +-
 .../Gherkin/CommonSteps.cs                         |   49 +-
 .../Gherkin/GherkinTestRunner.cs                   |   12 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  628 +++++----
 .../Gherkin/ScenarioData.cs                        |  123 +-
 .../GraphTraversalSourceTests.cs                   |    3 +-
 .../DriverRemoteConnection/GraphTraversalTests.cs  |   12 +-
 .../GraphTraversalTransactionTests.cs              |    6 +-
 .../RemoteConnectionFactory.cs                     |    7 +-
 .../Util/RequestMessageProvider.cs                 |   23 +-
 .../Driver/ConnectionPoolSettingsTests.cs          |   70 -
 .../Driver/ConnectionPoolTests.cs                  |  394 ------
 .../Gremlin.Net.UnitTest/Driver/ConnectionTests.cs |  488 +++----
 .../Driver/DriverRemoteConnectionTests.cs          |  169 ++-
 .../Driver/GraphSONMessageSerializerTests.cs       |   24 +-
 .../Driver/GremlinClientTests.cs                   |   58 +-
 .../Driver/GremlinServerTests.cs                   |   24 +-
 .../Driver/Messages/RequestMessageTests.cs         |  110 ++
 .../Driver/RequestMessageBuilderTests.cs           |    9 +-
 .../Process/Remote/RemoteTransactionTests.cs       |   17 +-
 .../Structure/IO/GraphBinary/GraphBinaryTests.cs   |  962 -------------
 .../IO/GraphBinary/Types/Sample/SamplePerson.cs    |   59 -
 .../Types/Sample/SamplePersonSerializer.cs         |  160 ---
 .../Types/Sample/SamplePersonSerializerTests.cs    |  128 --
 .../GraphBinary4MessageSerializerTests.cs}         |   61 +-
 .../GraphBinary4/RequestMessageSerializerTests.cs  |   93 ++
 .../GraphBinary4/ResponseMessageSerializerTests.cs |  210 +++
 117 files changed, 2153 insertions(+), 10548 deletions(-)

diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index d8db010e3a..05d7151c00 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -339,40 +339,40 @@ jobs:
           EXCLUDE="${EXCLUDE_MODULES/,-:gremlin-python},$EXCLUDE_FOR_GLV"
           mvn clean install -pl $EXCLUDE -q -DskipTests -Dci
           mvn verify -pl gremlin-python
-#  dotnet:
-#    name: .NET
-#    timeout-minutes: 20
-#    needs: cache-gremlin-server-docker-image
-#    runs-on: ubuntu-latest
-#    steps:
-#      - uses: actions/checkout@v6
-#      - name: Set up JDK11
-#        uses: actions/setup-java@v5
-#        with:
-#          java-version: '11'
-#          distribution: 'temurin'
-#      - name: Set up .NET 8.0.x
-#        uses: actions/setup-dotnet@v4
-#        with:
-#          dotnet-version: '8.0.x'
-#      - name: Get Cached Server Base Image
-#        uses: actions/cache@v5
-#        id: gremlin-server-test-docker-image
-#        with:
-#          path: |
-#            ./gremlin-server/*
-#            ~/.m2/repository/org/apache/tinkerpop/*
-#          key: ${{ github.sha }}
-#      - name: Load Docker Image
-#        working-directory: ./gremlin-server
-#        run: docker load --input gremlin-server.tar
-#      - name: Build with Maven
-#        run: |
-#          touch gremlin-dotnet/src/.glv
-#          touch gremlin-dotnet/test/.glv
-#          EXCLUDE="${EXCLUDE_MODULES/-:gremlin-dotnet-source,-:gremlin-dotnet-tests,},$EXCLUDE_FOR_GLV"
-#          mvn clean install -pl $EXCLUDE -q -DskipTests -Dci
-#          mvn verify -pl :gremlin-dotnet,:gremlin-dotnet-tests -P gremlin-dotnet
+  dotnet:
+    name: .NET
+    timeout-minutes: 20
+    needs: cache-gremlin-server-docker-image
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v6
+      - name: Set up JDK11
+        uses: actions/setup-java@v5
+        with:
+          java-version: '11'
+          distribution: 'temurin'
+      - name: Set up .NET 8.0.x
+        uses: actions/setup-dotnet@v4
+        with:
+          dotnet-version: '8.0.x'
+      - name: Get Cached Server Base Image
+        uses: actions/cache@v5
+        id: gremlin-server-test-docker-image
+        with:
+          path: |
+            ./gremlin-server/*
+            ~/.m2/repository/org/apache/tinkerpop/*
+          key: ${{ github.sha }}
+      - name: Load Docker Image
+        working-directory: ./gremlin-server
+        run: docker load --input gremlin-server.tar
+      - name: Build with Maven
+        run: |
+          touch gremlin-dotnet/src/.glv
+          touch gremlin-dotnet/test/.glv
+          EXCLUDE="${EXCLUDE_MODULES/-:gremlin-dotnet-source,-:gremlin-dotnet-tests,},$EXCLUDE_FOR_GLV"
+          mvn clean install -pl $EXCLUDE -q -DskipTests -Dci
+          mvn verify -pl :gremlin-dotnet,:gremlin-dotnet-tests -P gremlin-dotnet
   neo4j-gremlin:
     name: neo4j-gremlin
     timeout-minutes: 20
diff --git a/gremlin-dotnet/build/generate.groovy b/gremlin-dotnet/build/generate.groovy
index 27ae264c70..24bc271ad5 100644
--- a/gremlin-dotnet/build/generate.groovy
+++ b/gremlin-dotnet/build/generate.groovy
@@ -139,9 +139,16 @@ radishGremlinFile.withWriter('UTF-8') { Writer writer ->
             '            Func<GraphTraversalSource, IDictionary<string, object>, ITraversal> f = list[0];\n' +
             '            list.RemoveAt(0);\n' +
             '            ITraversal traversal = f.Invoke(g, parameters);\n' +
-            '            foreach (var sideEffect in sideEffects)\n' +
+            '            // Side effects need to be prepended as source steps (before traversal steps).\n' +
+            '            // Build them in a temporary GremlinLang and prepend to the traversal\'s gremlin string.\n' +
+            '            if (sideEffects.Count > 0)\n' +
             '            {\n' +
-            '                traversal.Bytecode.AddSource("withSideEffect", sideEffect.Key, sideEffect.Value);\n' +
+            '                var sideEffectLang = new GremlinLang();\n' +
+            '                foreach (var sideEffect in sideEffects)\n' +
+            '                {\n' +
+            '                    sideEffectLang.AddSource("withSideEffect", sideEffect.Key, sideEffect.Value);\n' +
+            '                }\n' +
+            '                traversal.GremlinLang.Gremlin = sideEffectLang.Gremlin + traversal.GremlinLang.Gremlin;\n' +
             '            }\n' +
             '            return traversal;\n' +
             '        }\n' +
diff --git a/gremlin-dotnet/docker-compose.yml b/gremlin-dotnet/docker-compose.yml
index 3a1859cf84..a2a9343dc1 100644
--- a/gremlin-dotnet/docker-compose.yml
+++ b/gremlin-dotnet/docker-compose.yml
@@ -35,13 +35,11 @@ services:
       - ${HOME}/.m2:/root/.m2
       - ${ABS_PROJECT_HOME}/gremlin-test/target:/opt/gremlin-test
     healthcheck:
-      test: [ "CMD-SHELL", "apk add curl && curl -f http://localhost:45940?gremlin=100-1" ]
+      test: [ "CMD-SHELL", "apk add curl && curl -X POST -d '{\"gremlin\":\"g.inject(1)\"}' http://localhost:45940" ]
       interval: 30s
       timeout: 10s
       retries: 30
       start_period: 30s
-    depends_on:
-      - gremlin-socket-server
 
   gremlin-dotnet-integration-tests:
     container_name: gremlin-dotnet-integration-tests
@@ -49,6 +47,7 @@ services:
     volumes:
       - .:/gremlin-dotnet
       - ../gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features:/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features
+      - ../gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io:/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io
       - ../docker/gremlin-test-server:/gremlin-dotnet/gremlin-test-server
       - ../gremlin-tools/gremlin-socket-server/conf:/gremlin-dotnet/gremlin-socket-server/conf/
     environment:
@@ -72,10 +71,3 @@ services:
     depends_on:
       gremlin-server-test-dotnet:
         condition: service_healthy
-
-  gremlin-socket-server:
-    container_name: gremlin-socket-server
-    image: tinkerpop/gremlin-socket-server:${GREMLIN_SERVER}
-    ports:
-      - "45943:45943"
-
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Connection.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Connection.cs
index 05f92e3aa4..883d1c2bab 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Connection.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Connection.cs
@@ -22,306 +22,173 @@
 #endregion
 
 using System;
-using System.Collections.Concurrent;
 using System.Collections.Generic;
-using System.Text;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Net.Http;
+using System.Net.Http.Headers;
 using System.Threading;
 using System.Threading.Tasks;
 using Gremlin.Net.Driver.Messages;
 using Gremlin.Net.Process;
+using Gremlin.Net.Structure.IO;
 
 namespace Gremlin.Net.Driver
 {
-    internal interface IResponseHandlerForSingleRequestMessage
+    /// <summary>
+    ///     HTTP-based connection that sends requests via HTTP POST to Gremlin Server.
+    /// </summary>
+    internal class Connection : IDisposable
     {
-        void HandleReceived(ResponseMessage<List<object>> received);
-        void Finalize(Dictionary<string, object> statusAttributes);
-        void HandleFailure(Exception objException);
-        void Cancel();
-    }
+        private const string GraphBinaryMimeType = SerializationTokens.GraphBinary4MimeType;
 
-    internal class Connection : IConnection
-    {
-        private readonly IMessageSerializer _messageSerializer;
+        private readonly HttpClient _httpClient;
         private readonly Uri _uri;
-        private readonly IWebSocketConnection _webSocketConnection;
-        private readonly string? _username;
-        private readonly string? _password;
-        private readonly string? _sessionId;
-        private readonly bool _sessionEnabled;
-
-        private readonly ConcurrentQueue<(RequestMessage msg, CancellationToken cancellationToken)> _writeQueue = new();
-
-        private readonly ConcurrentDictionary<Guid, IResponseHandlerForSingleRequestMessage> _callbackByRequestId =
-            new();
-
-        private readonly ConcurrentDictionary<Guid, CancellationTokenRegistration> _cancellationByRequestId = new();
-        private int _connectionState = 0;
-        private int _writeInProgress = 0;
-        private const int Closed = 1;
-
-        public Connection(IWebSocketConnection webSocketConnection, Uri uri, string? username, string? password,
-            IMessageSerializer messageSerializer, string? sessionId)
+        private readonly IMessageSerializer _serializer;
+        private readonly ConnectionSettings _settings;
+        // Interceptor slot reserved for future spec
+        // private readonly IReadOnlyList<Func<HttpRequestMessage, Task>> _interceptors;
+
+        /// <summary>
+        ///     Creates a new HTTP connection. The <see cref="HttpClient"/> is backed by
+        ///     SocketsHttpHandler which manages its own TCP connection pool internally,
+        ///     so a single <see cref="Connection"/> instance handles concurrent requests efficiently.
+        /// </summary>
+        public Connection(Uri uri, IMessageSerializer serializer,
+            ConnectionSettings settings)
         {
             _uri = uri;
-            _username = username;
-            _password = password;
-            _sessionId = sessionId;
-            if (!string.IsNullOrEmpty(sessionId))
-            {
-                _sessionEnabled = true;
-            }
-            _messageSerializer = messageSerializer;
-            _webSocketConnection = webSocketConnection;
-        }
-
-        public async Task ConnectAsync(CancellationToken cancellationToken)
-        {
-            await _webSocketConnection.ConnectAsync(_uri, cancellationToken).ConfigureAwait(false);
-            BeginReceiving();
-        }
-
-        public int NrRequestsInFlight => _callbackByRequestId.Count;
+            _serializer = serializer;
+            _settings = settings;
 
-        public bool IsOpen => _webSocketConnection.IsOpen && Volatile.Read(ref _connectionState) != Closed;
-
-        public Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage, CancellationToken cancellationToken)
-        {
-            var receiver = new ResponseHandlerForSingleRequestMessage<T>();
-            _callbackByRequestId.GetOrAdd(requestMessage.RequestId, receiver);
-
-            _cancellationByRequestId.GetOrAdd(requestMessage.RequestId, cancellationToken.Register(() =>
-            {
-                if (_callbackByRequestId.TryRemove(requestMessage.RequestId, out var responseHandler))
-                {
-                    responseHandler.Cancel();
-                }
-            }));
-            _writeQueue.Enqueue((requestMessage, cancellationToken));
-            BeginSendingMessages();
-            return receiver.Result;
-        }
-
-        private void BeginReceiving()
-        {
-            var state = Volatile.Read(ref _connectionState);
-            if (state == Closed) return;
-            ReceiveMessagesAsync().Forget();
+#if NET6_0_OR_GREATER
+            var handler = new SocketsHttpHandler
+            {
+                PooledConnectionIdleTimeout = settings.IdleConnectionTimeout,
+                MaxConnectionsPerServer = settings.MaxConnectionsPerServer,
+                ConnectTimeout = settings.ConnectionTimeout,
+                KeepAlivePingTimeout = settings.KeepAliveInterval,
+            };
+            _httpClient = new HttpClient(handler);
+#else
+            _httpClient = new HttpClient();
+            _httpClient.Timeout = settings.ConnectionTimeout;
+#endif
         }
 
-        private async Task ReceiveMessagesAsync()
+        /// <summary>
+        ///     Constructor that accepts a pre-configured HttpClient (for testing).
+        /// </summary>
+        internal Connection(Uri uri, IMessageSerializer serializer,
+            ConnectionSettings settings, HttpClient httpClient)
         {
-            while (true)
-            {
-                try
-                {
-                    var received = await _webSocketConnection.ReceiveMessageAsync().ConfigureAwait(false);
-                    await HandleReceivedAsync(received).ConfigureAwait(false);
-                }
-                catch (Exception e)
-                {
-                    await CloseConnectionBecauseOfFailureAsync(e).ConfigureAwait(false);
-                    break;
-                }
-            }
+            _uri = uri;
+            _serializer = serializer;
+            _settings = settings;
+            _httpClient = httpClient;
         }
 
-        private async Task HandleReceivedAsync(byte[] received)
+        public async Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage,
+            CancellationToken cancellationToken = default)
         {
-            var receivedMsg = await _messageSerializer.DeserializeMessageAsync(received).ConfigureAwait(false);
-            if (receivedMsg == null)
-            {
-                throw new InvalidOperationException(
-                    "Received data deserialized into null object message. Cannot operate on it.");
-            }
+            var requestBytes = await _serializer.SerializeMessageAsync(requestMessage, cancellationToken)
+                .ConfigureAwait(false);
 
-            try
-            {
-                HandleReceivedMessage(receivedMsg);
-            }
-            catch (Exception e)
-            {
-                if (receivedMsg!.RequestId != null)
-                {
-                    if(_callbackByRequestId.TryRemove(receivedMsg.RequestId.Value, out var responseHandler))
-                    {
-                        responseHandler?.HandleFailure(e);
-                        
-                    }
-                    if (_cancellationByRequestId.TryRemove(receivedMsg.RequestId.Value, out var cancellation))
-                    {
-                        cancellation.Dispose();
-                    }
-                }
-            }
-        }
+            using var content = new ByteArrayContent(requestBytes);
+            content.Headers.ContentType = new MediaTypeHeaderValue(GraphBinaryMimeType);
 
-        private void HandleReceivedMessage(ResponseMessage<List<object>> receivedMsg)
-        {
-            var status = receivedMsg.Status;
-            status.ThrowIfStatusIndicatesError();
+            using var httpRequest = new HttpRequestMessage(HttpMethod.Post, _uri);
+            httpRequest.Content = content;
+            httpRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(GraphBinaryMimeType));
 
-            if (status.Code == ResponseStatusCode.Authenticate)
+            if (_settings.EnableCompression)
             {
-                Authenticate();
-                return;
+                httpRequest.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
             }
 
-            if (receivedMsg.RequestId == null) return;
-
-            _callbackByRequestId.TryGetValue(receivedMsg.RequestId.Value, out var responseHandler);
-            if (status.Code != ResponseStatusCode.NoContent)
+            if (_settings.EnableUserAgentOnConnect)
             {
-                responseHandler?.HandleReceived(receivedMsg);
+                httpRequest.Headers.TryAddWithoutValidation("User-Agent", Utils.UserAgent);
             }
 
-            if (status.Code == ResponseStatusCode.Success || status.Code == ResponseStatusCode.NoContent)
+            if (_settings.BulkResults)
             {
-                if (_cancellationByRequestId.TryRemove(receivedMsg.RequestId.Value, out var cancellation))
-                {
-                    cancellation.Dispose();
-                }
-                responseHandler?.Finalize(status.Attributes);
-                _callbackByRequestId.TryRemove(receivedMsg.RequestId.Value, out _);
+                httpRequest.Headers.Add("bulkResults", "true");
             }
-        }
 
-        private void Authenticate()
-        {
-            if (string.IsNullOrEmpty(_username) || string.IsNullOrEmpty(_password))
-                throw new InvalidOperationException(
-                    $"The Gremlin Server requires authentication, but no credentials are specified - username: {_username}, password: {_password}.");
-
-            var message = RequestMessage.Build(Tokens.OpsAuthentication).Processor(Tokens.ProcessorTraversal)
-                .AddArgument(Tokens.ArgsSasl, SaslArgument()).Create();
+            // Future: apply interceptors here
 
-            _writeQueue.Enqueue((message, CancellationToken.None));
-            BeginSendingMessages();
-        }
+            using var response = await _httpClient.SendAsync(httpRequest, cancellationToken)
+                .ConfigureAwait(false);
 
-        private string SaslArgument()
-        {
-            var auth = $"\0{_username}\0{_password}";
-            var authBytes = Encoding.UTF8.GetBytes(auth);
-            return Convert.ToBase64String(authBytes);
-        }
+            // If the HTTP status indicates an error and the response is not GraphBinary,
+            // attempt to read the body as a text error message. The server may respond with
+            // a JSON body containing an error field, or plain text. Only when the Content-Type
+            // is GraphBinary do we fall through to normal deserialization so the status footer
+            // in the GB4 response can surface the application-level error.
+            if (!response.IsSuccessStatusCode &&
+                response.Content.Headers.ContentType?.MediaType != GraphBinaryMimeType)
+            {
+                var errorBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
 
-        private void BeginSendingMessages()
-        {
-            if (Interlocked.CompareExchange(ref _writeInProgress, 1, 0) != 0)
-                return;
-            SendMessagesFromQueueAsync().Forget();
-        }
+                // Try to extract the "message" field from a JSON error response
+                var errorMessage = TryExtractJsonError(errorBody)
+                    ?? $"Gremlin Server returned HTTP {(int)response.StatusCode}: {errorBody}";
 
-        private async Task SendMessagesFromQueueAsync()
-        {
-            while (_writeQueue.TryDequeue(out var msg))
-            {
-                try
-                {
-                    await SendMessageAsync(msg.msg, msg.cancellationToken).ConfigureAwait(false);
-                }
-                catch (OperationCanceledException e) when (msg.cancellationToken == e.CancellationToken)
-                {
-                    // Send was cancelled for this message -> silently catch as we want to continue sending from this
-                    //  connection. The task responsible for submitting this message will be cancelled by the
-                    //  `ResponseHandlerForSingleRequestMessage`.
-                }
-                catch (Exception e)
-                {
-                    await CloseConnectionBecauseOfFailureAsync(e).ConfigureAwait(false);
-                    break;
-                }
+                throw new HttpRequestException(errorMessage);
             }
-            Interlocked.CompareExchange(ref _writeInProgress, 0, 1);
 
-            // Since the loop ended and the write in progress was set to 0
-            // a new item could have been added, write queue can contain items at this time
-            if (!_writeQueue.IsEmpty && Interlocked.CompareExchange(ref _writeInProgress, 1, 0) == 0)
-            {
-                await SendMessagesFromQueueAsync().ConfigureAwait(false);
-            }
-        }
+            var responseBytes = await ReadResponseBytesAsync(response).ConfigureAwait(false);
 
-        private async Task CloseConnectionBecauseOfFailureAsync(Exception exception)
-        {
-            EmptyWriteQueue();
-            await CloseAsync().ConfigureAwait(false);
-            NotifyAboutConnectionFailure(exception);
-        }
+            var responseMessage = await _serializer.DeserializeMessageAsync(responseBytes, cancellationToken)
+                .ConfigureAwait(false);
 
-        private void EmptyWriteQueue()
-        {
-            while (_writeQueue.TryDequeue(out _))
-            {
-            }
+            return BuildResultSet<T>(responseMessage);
         }
 
-        private void NotifyAboutConnectionFailure(Exception exception)
+        private static async Task<byte[]> ReadResponseBytesAsync(HttpResponseMessage response)
         {
-            foreach (var cb in _callbackByRequestId.Values)
+            using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
+            if (response.Content.Headers.ContentEncoding.Contains("deflate"))
             {
-                cb.HandleFailure(exception);
+                using var deflateStream = new DeflateStream(stream, CompressionMode.Decompress);
+                using var ms = new MemoryStream();
+                await deflateStream.CopyToAsync(ms).ConfigureAwait(false);
+                return ms.ToArray();
             }
-            _callbackByRequestId.Clear();
-            DisposeCancellationRegistrations();
+            using var memoryStream = new MemoryStream();
+            await stream.CopyToAsync(memoryStream).ConfigureAwait(false);
+            return memoryStream.ToArray();
         }
 
-        private async Task SendMessageAsync(RequestMessage message, CancellationToken cancellationToken)
+        private static ResultSet<T> BuildResultSet<T>(ResponseMessage<List<object>> responseMessage)
         {
-            if (_sessionEnabled)
-            {
-                message = RebuildSessionMessage(message);
-            }
-
-            var serializedMsg = await _messageSerializer.SerializeMessageAsync(message, cancellationToken)
-                .ConfigureAwait(false);
-#if NET6_0_OR_GREATER
-            if (message.Processor == Tokens.OpsAuthentication)
-            {
-                // Don't compress a message that contains credentials to prevent attacks like CRIME or BREACH
-                await _webSocketConnection.SendMessageUncompressedAsync(serializedMsg, cancellationToken).ConfigureAwait(false);
-                return;
-            }
-#endif
-            await _webSocketConnection.SendMessageAsync(serializedMsg, cancellationToken).ConfigureAwait(false);
+            return new ResultSet<T>(
+                responseMessage.Result.Cast<T>().ToList(),
+                new Dictionary<string, object>());
         }
 
-        private RequestMessage RebuildSessionMessage(RequestMessage message)
+        /// <summary>
+        ///     Attempts to extract an error message from a JSON response body.
+        ///     The server sometimes responds with a JSON object containing a "message" field
+        ///     even when it cannot produce a GraphBinary response.
+        /// </summary>
+        private static string? TryExtractJsonError(string body)
         {
-            if (message.Processor == Tokens.OpsAuthentication)
+            try
             {
-                return message;
+                using var doc = System.Text.Json.JsonDocument.Parse(body);
+                if (doc.RootElement.TryGetProperty("message", out var messageProp))
+                {
+                    return messageProp.GetString();
+                }
             }
-
-            var msgBuilder = RequestMessage.Build(message.Operation)
-              .OverrideRequestId(message.RequestId).Processor(Tokens.ProcessorSession);
-            foreach(var kv in message.Arguments)
+            catch
             {
-                msgBuilder.AddArgument(kv.Key, kv.Value);
+                // Not valid JSON — fall through to raw body
             }
-            msgBuilder.AddArgument(Tokens.ArgsSession, _sessionId!);
-            return msgBuilder.Create();
-        }
-
-        public async Task CloseAsync()
-        {
-            Interlocked.Exchange(ref _connectionState, Closed);
-
-            if (_sessionEnabled)
-            {
-                await CloseSession().ConfigureAwait(false);
-            }
-            
-            await _webSocketConnection.CloseAsync().ConfigureAwait(false);
-        }
-
-        private async Task CloseSession()
-        {
-            // build a request to close this session
-            var msg = RequestMessage.Build(Tokens.OpsClose).Processor(Tokens.ProcessorSession).Create();
-
-            await SendMessageAsync(msg, CancellationToken.None).ConfigureAwait(false);
+            return null;
         }
 
         #region IDisposable Support
@@ -340,22 +207,12 @@ namespace Gremlin.Net.Driver
             {
                 if (disposing)
                 {
-                    _webSocketConnection?.Dispose();
-                    DisposeCancellationRegistrations();
+                    _httpClient?.Dispose();
                 }
                 _disposed = true;
             }
         }
 
-        private void DisposeCancellationRegistrations()
-        {
-            foreach (var cancellation in _cancellationByRequestId.Values)
-            {
-                cancellation.Dispose();
-            }
-            _cancellationByRequestId.Clear();
-        }
-
         #endregion
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionFactory.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionFactory.cs
deleted file mode 100644
index 6a9b06f659..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionFactory.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-namespace Gremlin.Net.Driver
-{
-    internal class ConnectionFactory : IConnectionFactory
-    {
-        private readonly WebSocketSettings _webSocketSettings;
-        private readonly GremlinServer _gremlinServer;
-        private readonly string? _sessionId;
-        private readonly IMessageSerializer _messageSerializer;
-
-        public ConnectionFactory(GremlinServer gremlinServer, IMessageSerializer messageSerializer,
-            WebSocketSettings webSocketSettings, string? sessionId)
-        {
-            _gremlinServer = gremlinServer;
-            _messageSerializer = messageSerializer;
-            _sessionId = sessionId;
-            _webSocketSettings = webSocketSettings;
-        }
-
-        public IConnection CreateConnection()
-        {
-            return new Connection(
-                new WebSocketConnection(ProxyClientWebSocket.CreateClientWebSocket(), _webSocketSettings),
-                _gremlinServer.Uri, _gremlinServer.Username, _gremlinServer.Password, _messageSerializer, _sessionId);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
deleted file mode 100644
index 893f70f771..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
+++ /dev/null
@@ -1,298 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver.Exceptions;
-using Gremlin.Net.Process;
-using Microsoft.Extensions.Logging;
-using Polly;
-
-namespace Gremlin.Net.Driver
-{
-    internal class ConnectionPool : IDisposable
-    {
-        private const int ConnectionIndexOverflowLimit = int.MaxValue - 1000000;
-        
-        private readonly IConnectionFactory _connectionFactory;
-        private readonly CopyOnWriteCollection<IConnection> _connections = new CopyOnWriteCollection<IConnection>();
-
-        private readonly ConcurrentDictionary<IConnection, byte> _deadConnections =
-            new ConcurrentDictionary<IConnection, byte>();
-        private readonly ConnectionPoolSettings _settings;
-        private readonly ILogger<ConnectionPool> _logger;
-        private int _connectionIndex;
-        private int _poolState;
-        private const int PoolIdle = 0;
-        private const int PoolPopulationInProgress = 1;
-        private readonly CancellationTokenSource _cts = new CancellationTokenSource();
-
-        public ConnectionPool(IConnectionFactory connectionFactory, ConnectionPoolSettings settings,
-            ILogger<ConnectionPool> logger)
-        {
-            _connectionFactory = connectionFactory;
-            _settings = settings;
-            _logger = logger;
-            ReplaceDeadConnectionsAsync().WaitUnwrap();
-        }
-        
-        public int NrConnections => _connections.Count;
-
-        public IConnection GetAvailableConnection()
-        {
-            var connection = Policy.Handle<ServerUnavailableException>()
-                .WaitAndRetry(_settings.ReconnectionAttempts, ComputeRetrySleepDuration, onRetry:
-                    (_, _, retryCount, _) =>
-                    {
-                        _logger.CouldNotGetConnectionFromPool(retryCount, _settings.ReconnectionAttempts);
-                    })
-                .Execute(GetConnectionFromPool);
-
-            return ProxiedConnection(connection);
-        }
-        
-        private bool IsHealthy => _deadConnections.IsEmpty && _connections.Count == _settings.PoolSize;
-
-        private TimeSpan ComputeRetrySleepDuration(int retryAttemptNr)
-        {
-            return TimeSpan.FromTicks(_settings.ReconnectionBaseDelay.Ticks * (long) Math.Pow(2, retryAttemptNr));
-        }
-        
-        /// <summary>
-        ///     Replaces dead connections.
-        /// </summary>
-        /// <returns>True if the pool was repaired, false if repairing was not necessary.</returns>
-        private async Task<bool> EnsurePoolIsHealthyAsync()
-        {
-            if (IsHealthy) return false;
-            var poolState = Interlocked.CompareExchange(ref _poolState, PoolPopulationInProgress, PoolIdle);
-            if (poolState == PoolPopulationInProgress) return false;
-            try
-            {
-                await ReplaceDeadConnectionsAsync().ConfigureAwait(false);
-            }
-            finally
-            {
-                // We need to remove the PoolPopulationInProgress flag again even if an exception occurred, so we don't block the pool population for ever
-                Interlocked.CompareExchange(ref _poolState, PoolIdle, PoolPopulationInProgress);
-            }
-
-            return true;
-        }
-
-        private async Task ReplaceDeadConnectionsAsync()
-        {
-            RemoveDeadConnections();
-
-            await FillPoolAsync().ConfigureAwait(false);
-        }
-
-        private void RemoveDeadConnections()
-        {
-            if (_deadConnections.IsEmpty) return;
-            
-            foreach (var deadConnection in _deadConnections.Keys)
-            {
-                if (_connections.TryRemove(deadConnection))
-                {
-                    DefinitelyDestroyConnection(deadConnection);
-                }
-            }
-
-            _deadConnections.Clear();
-        }
-
-        private async Task FillPoolAsync()
-        {
-            var nrConnectionsToCreate = _settings.PoolSize - _connections.Count;
-            _logger.FillingPool(nrConnectionsToCreate);
-            var connectionCreationTasks = new List<Task<IConnection>>(nrConnectionsToCreate);
-            try
-            {
-                for (var i = 0; i < nrConnectionsToCreate; i++)
-                {
-                    connectionCreationTasks.Add(CreateNewConnectionAsync());
-                }
-
-                var createdConnections = await Task.WhenAll(connectionCreationTasks).ConfigureAwait(false);
-                _connections.AddRange(createdConnections);
-            }
-            catch (Exception)
-            {
-                // Dispose all connections that were already created
-                foreach (var creationTask in connectionCreationTasks)
-                {
-                    if (creationTask.IsCompleted)
-                        creationTask.Result?.Dispose();
-                }
-                throw;
-            }
-            
-            if (_disposed)
-            {
-                await CloseAndRemoveAllConnectionsAsync().ConfigureAwait(false);
-            }
-        }
-
-        private async Task<IConnection> CreateNewConnectionAsync()
-        {
-            var newConnection = _connectionFactory.CreateConnection();
-            try
-            {
-                await newConnection.ConnectAsync(_cts.Token).ConfigureAwait(false);
-            }
-            catch (Exception)
-            {
-                // Dispose created connection if the connection establishment failed
-                newConnection.Dispose();
-                throw;
-            }
-            return newConnection;
-        }
-
-        private IConnection GetConnectionFromPool()
-        {
-            var connections = _connections.Snapshot;
-            if (connections.Length < _settings.PoolSize)
-            {
-                TriggerReplacementOfDeadConnections();
-            }
-            if (connections.Length == 0) throw new ServerUnavailableException();
-            return TryGetAvailableConnection(connections);
-        }
-        
-        private IConnection TryGetAvailableConnection(IConnection[] connections)
-        {
-            var index = Interlocked.Increment(ref _connectionIndex);
-            ProtectIndexFromOverflowing(index);
-
-            var closedConnections = 0;
-            for (var i = 0; i < connections.Length; i++)
-            {
-                var connection = connections[(index + i) % connections.Length];
-                if (connection.NrRequestsInFlight >= _settings.MaxInProcessPerConnection) continue;
-                if (!connection.IsOpen)
-                {
-                    ReplaceConnection(connection);
-                    closedConnections++;
-                    continue;
-                }
-                return connection;
-            }
-
-            if (connections.Length > closedConnections)
-            {
-                throw new ConnectionPoolBusyException(_settings.PoolSize, _settings.MaxInProcessPerConnection);
-            }
-            else
-            {
-                throw new ServerUnavailableException();
-            }
-        }
-
-        private void ProtectIndexFromOverflowing(int currentIndex)
-        {
-            if (currentIndex > ConnectionIndexOverflowLimit)
-                Interlocked.Exchange(ref _connectionIndex, 0);
-        }
-
-        private void ReplaceConnection(IConnection connection)
-        {
-            RemoveConnectionFromPool(connection);
-            TriggerReplacementOfDeadConnections();
-        }
-        
-        private void RemoveConnectionFromPool(IConnection connection)
-        {
-            _logger.RemovingClosedConnectionFromPool();
-            _deadConnections.TryAdd(connection, 0);
-        }
-
-        private void TriggerReplacementOfDeadConnections()
-        {
-            ReplaceClosedConnectionsAsync().Forget();
-        }
-
-        private async Task ReplaceClosedConnectionsAsync()
-        {
-            var poolWasPopulated = await EnsurePoolIsHealthyAsync().ConfigureAwait(false);
-            // Another connection could have been removed already, check if another population is necessary
-            if (poolWasPopulated && !_disposed)
-                await ReplaceClosedConnectionsAsync().ConfigureAwait(false);
-        }
-
-        private IConnection ProxiedConnection(IConnection connection)
-        {
-            return new ProxyConnection(connection, ReplaceConnectionIfItWasClosed);
-        }
-
-        private void ReplaceConnectionIfItWasClosed(IConnection connection)
-        {
-            if (connection.IsOpen) return;
-            ReplaceConnection(connection);
-        }
-
-        private async Task CloseAndRemoveAllConnectionsAsync()
-        {
-            foreach (var connection in _connections.RemoveAndGetAll())
-            {
-                await connection.CloseAsync().ConfigureAwait(false);
-                DefinitelyDestroyConnection(connection);
-            }
-        }
-
-        private void DefinitelyDestroyConnection(IConnection connection)
-        {
-            connection.Dispose();
-        }
-
-        #region IDisposable Support
-
-        private bool _disposed;
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                {
-                    _cts.Cancel();
-                    CloseAndRemoveAllConnectionsAsync().WaitUnwrap();
-                    _cts.Dispose();
-                }
-                _disposed = true;
-            }
-        }
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPoolSettings.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPoolSettings.cs
deleted file mode 100644
index 94d16330be..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPoolSettings.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using Gremlin.Net.Driver.Exceptions;
-
-namespace Gremlin.Net.Driver
-{
-    /// <summary>
-    ///     Holds settings for the <see cref="ConnectionPool"/>.
-    /// </summary>
-    public class ConnectionPoolSettings
-    {
-        private int _poolSize = DefaultPoolSize;
-        private int _maxInProcessPerConnection = DefaultMaxInProcessPerConnection;
-        private int _reconnectionAttempts = DefaultReconnectionAttempts;
-        private TimeSpan _reconnectionBaseDelay = DefaultReconnectionBaseDelay;
-        private const int DefaultPoolSize = 8;
-        private const int DefaultMaxInProcessPerConnection = 16;
-        private const int DefaultReconnectionAttempts = 4;
-        private static readonly TimeSpan DefaultReconnectionBaseDelay = TimeSpan.FromSeconds(1);
-        internal const bool DefaultEnableUserAgentOnConnect = true;
-
-        /// <summary>
-        ///     Gets or sets the size of the connection pool.
-        /// </summary>
-        /// <exception cref="ArgumentOutOfRangeException">The specified pool size is less than or equal to zero.</exception>
-        /// <remarks>
-        ///     The default value is 8.
-        /// </remarks>
-        public int PoolSize
-        {
-            get => _poolSize;
-            set
-            {
-                if (value <= 0)
-                    throw new ArgumentOutOfRangeException(nameof(PoolSize), $"{nameof(PoolSize)} must be > 0!");
-                _poolSize = value;
-            }
-        }
-
-        /// <summary>
-        ///     Gets or sets the maximum number of in-flight requests that can occur on a connection.
-        /// </summary>
-        /// <exception cref="ArgumentOutOfRangeException">The specified number is less than or equal to zero.</exception>
-        /// <remarks>
-        ///     The default value is 16. A <see cref="ConnectionPoolBusyException" /> is thrown if this limit is reached
-        ///     on all connections when a new request comes in.
-        /// </remarks>
-        public int MaxInProcessPerConnection
-        {
-            get => _maxInProcessPerConnection;
-            set
-            {
-                if (value <= 0)
-                    throw new ArgumentOutOfRangeException(nameof(MaxInProcessPerConnection),
-                        $"{nameof(MaxInProcessPerConnection)} must be > 0!");
-                _maxInProcessPerConnection = value;
-            }
-        }
-
-        /// <summary>
-        ///     Gets or sets the number of attempts to get an open connection from the pool to submit a request.
-        /// </summary>
-        /// <exception cref="ArgumentOutOfRangeException">The number of attempts specified is less than zero.</exception>
-        /// <remarks>
-        ///     The driver always tries to reconnect to a server in the background after it has noticed that a
-        ///     connection is dead. This setting only specifies how often the driver will retry to get an open
-        ///     connection from its pool when no open connection is available to submit a request.  
-        ///     These retries give the driver time to establish new connections to the server that might have been
-        ///     unavailable temporarily or that might have closed the connections, e.g., because they were idle for some
-        ///     time.
-        /// 
-        ///     The default value is 4. A <see cref="ServerUnavailableException" /> is thrown if the server can still
-        ///     not be reached after this many retry attempts.
-        ///
-        ///     Setting this to zero means that the exception is thrown immediately when no open connection is available
-        ///     to submit a request. The driver will however still try to reconnect to the server in the background for
-        ///     subsequent requests.
-        /// </remarks>
-        public int ReconnectionAttempts
-        {
-            get => _reconnectionAttempts;
-            set
-            {
-                if (value < 0)
-                    throw new ArgumentOutOfRangeException(nameof(ReconnectionAttempts),
-                        $"{ReconnectionAttempts} must be >= 0!");
-                _reconnectionAttempts = value;
-            }
-        }
-
-        /// <summary>
-        ///     Gets or sets the base delay used for the exponential backoff for the reconnection attempts.
-        /// </summary>
-        /// <exception cref="ArgumentOutOfRangeException">The specified delay is negative or zero.</exception>
-        /// <remarks>
-        ///     The driver employs an exponential backoff strategy that uses this base delay for its reconnection
-        ///     attempts. With a base delay of 100 ms for example, retries happen after 100 ms, 200 ms, 400 ms, 800 ms,
-        ///     and so on, assuming that enough <see cref="ReconnectionAttempts"/> are configured.
-        ///
-        ///     The default value is 1 second.
-        /// </remarks>
-        public TimeSpan ReconnectionBaseDelay
-        {
-            get => _reconnectionBaseDelay;
-            set
-            {
-                if (value <= TimeSpan.Zero)
-                    throw new ArgumentOutOfRangeException(nameof(ReconnectionBaseDelay),
-                        $"{nameof(ReconnectionBaseDelay)} must be > 0!");
-                _reconnectionBaseDelay = value;
-            }
-        }
-        
-        /// <summary>
-        /// Gets or sets whether a connection pool will send a user agent during web socket handshakes
-        /// </summary>
-        /// <remarks>
-        /// The default value is true. When enabled, user agents will only be sent during the web socket
-        /// handshake. User agent follows the form:
-        /// [Application Name] [GLV Name].[Version] [Language Runtime Version] [OS].[Version] [CPU Architecture]
-        /// </remarks>
-        public bool EnableUserAgentOnConnect  { get;  set; } = DefaultEnableUserAgentOnConnect;
-    }
-}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionSettings.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionSettings.cs
new file mode 100644
index 0000000000..0d8df4a6a7
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionSettings.cs
@@ -0,0 +1,88 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System;
+
+namespace Gremlin.Net.Driver
+{
+    /// <summary>
+    ///     Holds settings for the HTTP connection.
+    /// </summary>
+    public class ConnectionSettings
+    {
+        /// <summary>
+        ///     The default TCP connection timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultConnectionTimeout = TimeSpan.FromSeconds(15);
+
+        /// <summary>
+        ///     The default idle connection timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultIdleConnectionTimeout = TimeSpan.FromSeconds(180);
+
+        /// <summary>
+        ///     The default maximum connections per server.
+        /// </summary>
+        public const int DefaultMaxConnectionsPerServer = 128;
+
+        /// <summary>
+        ///     The default TCP keep-alive probe interval.
+        /// </summary>
+        public static readonly TimeSpan DefaultKeepAliveInterval = TimeSpan.FromSeconds(30);
+
+        /// <summary>
+        ///     Gets or sets the TCP connection timeout.
+        /// </summary>
+        public TimeSpan ConnectionTimeout { get; set; } = DefaultConnectionTimeout;
+
+        /// <summary>
+        ///     Gets or sets how long idle connections stay in the pool before being closed.
+        /// </summary>
+        public TimeSpan IdleConnectionTimeout { get; set; } = DefaultIdleConnectionTimeout;
+
+        /// <summary>
+        ///     Gets or sets the maximum concurrent connections to a single server.
+        /// </summary>
+        public int MaxConnectionsPerServer { get; set; } = DefaultMaxConnectionsPerServer;
+
+        /// <summary>
+        ///     Gets or sets the TCP keep-alive probe interval.
+        /// </summary>
+        public TimeSpan KeepAliveInterval { get; set; } = DefaultKeepAliveInterval;
+
+        /// <summary>
+        ///     Gets or sets whether to request deflate compression.
+        /// </summary>
+        public bool EnableCompression { get; set; } = false;
+
+        /// <summary>
+        ///     Gets or sets whether to send the User-Agent header.
+        /// </summary>
+        public bool EnableUserAgentOnConnect { get; set; } = true;
+
+        /// <summary>
+        ///     Gets or sets whether to send the bulkResults: true header on all requests.
+        /// </summary>
+        public bool BulkResults { get; set; } = false;
+    }
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionClosedException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionClosedException.cs
deleted file mode 100644
index 99912c972d..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionClosedException.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Net.WebSockets;
-
-namespace Gremlin.Net.Driver.Exceptions
-{
-    /// <summary>
-    ///     The exception that is thrown for requests that in-flight when the underlying websocket is closed by the server.
-    ///     Requests that receive this exception will be in a non-deterministic state and may need to be retried.
-    /// </summary>
-    /// <remarks>
-    ///     It is recommended to use the same request retry policy that is applied when a <see cref="System.Net.WebSockets.WebSocketException" />,
-    ///     <see cref="System.Net.Sockets.SocketException"/>, <see cref="System.IO.IOException" />.
-    /// </remarks>
-    public class ConnectionClosedException : Exception
-    {
-        /// <summary>
-        ///     Gets the well-known WebSocket close status code provided by the server.
-        /// </summary>
-        public WebSocketCloseStatus? Status { get; }
-
-        /// <summary>
-        ///     Gets the Websocket closure description provided by the server.
-        /// </summary>
-        public string? Description { get; }
-
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ConnectionClosedException" /> class.
-        /// </summary>
-        public ConnectionClosedException(WebSocketCloseStatus? status, string? description)
-            : base(CreateMessage(status, description))
-        {
-            Status = status;
-            Description = description;
-        }
-
-        private static string CreateMessage(WebSocketCloseStatus? status, string? description)
-        {
-            return $"Connection closed by server. CloseStatus: {status?.ToString() ?? "<none>"}, CloseDescription: {description ?? "<none>"}." +
-                " Any in-progress requests on the connection will be in an unknown state, and may need to be retried.";
-        }
-    }
-}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionPoolBusyException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionPoolBusyException.cs
deleted file mode 100644
index 7c25cf44d0..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionPoolBusyException.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-namespace Gremlin.Net.Driver.Exceptions
-{
-    /// <summary>
-    ///     The exception that is thrown when all connections in the pool have reached their maximum number of in-flight
-    ///     requests.
-    /// </summary>
-    public class ConnectionPoolBusyException : NoConnectionAvailableException
-    {
-        /// <summary>
-        ///     Gets the size of the connection pool.
-        /// </summary>
-        public int PoolSize { get; }
-
-        /// <summary>
-        ///     Gets the maximum number of in-flight requests that can occur on a connection.
-        /// </summary>
-        public int MaxInProcessPerConnection { get; }
-
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ConnectionPoolBusyException" /> class.
-        /// </summary>
-        public ConnectionPoolBusyException(int poolSize, int maxInProcessPerConnection)
-            : base(CreateMessage(poolSize, maxInProcessPerConnection))
-        {
-            PoolSize = poolSize;
-            MaxInProcessPerConnection = maxInProcessPerConnection;
-        }
-
-        private static string CreateMessage(int poolSize, int maxInProcessPerConnection)
-        {
-            return $"All {poolSize} connections have reached their " +
-                   $"{nameof(ConnectionPoolSettings.MaxInProcessPerConnection)} limit of {maxInProcessPerConnection}." +
-                   $" Consider increasing either the {nameof(ConnectionPoolSettings.PoolSize)} or the " +
-                   $"{nameof(ConnectionPoolSettings.MaxInProcessPerConnection)} limit.";
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/NoConnectionAvailableException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/NoConnectionAvailableException.cs
deleted file mode 100644
index 51f231fbbd..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/NoConnectionAvailableException.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-
-namespace Gremlin.Net.Driver.Exceptions
-{
-    /// <summary>
-    ///     The exception that is thrown when no connection is available to service a request.
-    /// </summary>
-    public class NoConnectionAvailableException : Exception
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="NoConnectionAvailableException" /> class.
-        /// </summary>
-        public NoConnectionAvailableException()
-        {
-        }
-
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="NoConnectionAvailableException" /> class.
-        /// </summary>
-        public NoConnectionAvailableException(string message)
-            : base(message)
-        {
-        }
-
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="NoConnectionAvailableException" /> class.
-        /// </summary>
-        public NoConnectionAvailableException(string message, Exception inner)
-            : base(message, inner)
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs
index 08e6f2bdca..0dbac9c12a 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs
@@ -22,8 +22,6 @@
 #endregion
 
 using System;
-using System.Collections.Generic;
-using Gremlin.Net.Driver.Messages;
 
 namespace Gremlin.Net.Driver.Exceptions
 {
@@ -35,25 +33,24 @@ namespace Gremlin.Net.Driver.Exceptions
         /// <summary>
         ///     Initializes a new instance of the <see cref="ResponseException" /> class.
         /// </summary>
-        /// <param name="statusCode">The status code returned by the server.</param>
-        /// <param name="statusAttributes">The status attributes from the gremlin response.</param>
-        /// <param name="message">The error message string.</param>
-        public ResponseException(ResponseStatusCode statusCode,
-                                 IReadOnlyDictionary<string, object> statusAttributes,
-                                 string message) : base(message)
+        /// <param name="statusCode">The status code from the GraphBinary status footer.</param>
+        /// <param name="statusMessage">The status message from the server.</param>
+        /// <param name="serverException">The exception class name from the server, if provided.</param>
+        public ResponseException(int statusCode, string? statusMessage, string? serverException)
+            : base(statusMessage ?? $"Server error: {statusCode}")
         {
             StatusCode = statusCode;
-            StatusAttributes = statusAttributes;
+            ServerException = serverException;
         }
 
         /// <summary>
-        ///     Gets the status code returned from the server.
+        ///     Gets the status code from the GraphBinary status footer.
         /// </summary>
-        public ResponseStatusCode StatusCode { get; }
+        public int StatusCode { get; }
 
         /// <summary>
-        ///     Gets the status attributes from the gremlin response
+        ///     Gets the exception class name from the server, if provided.
         /// </summary>
-        public IReadOnlyDictionary<string, object> StatusAttributes { get; }
+        public string? ServerException { get; }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ServerUnavailableException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ServerUnavailableException.cs
deleted file mode 100644
index bf8bfdf7df..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ServerUnavailableException.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-namespace Gremlin.Net.Driver.Exceptions
-{
-    /// <summary>
-    ///     The exception that is thrown when no connection is available to the <see cref="GremlinServer"/>.
-    /// </summary>
-    public class ServerUnavailableException : NoConnectionAvailableException
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ServerUnavailableException" /> class.
-        /// </summary>
-        public ServerUnavailableException()
-            : base(CreateMessage())
-        {
-        }
-
-        private static string CreateMessage()
-        {
-            return
-                "No connection to the server available which most likely means that the server is completely unavailable.";
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClient.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClient.cs
index 6589d9c725..b5b43faccf 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClient.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClient.cs
@@ -22,13 +22,10 @@
 #endregion
 
 using System;
-using System.Net.WebSockets;
 using System.Threading;
 using System.Threading.Tasks;
 using Gremlin.Net.Driver.Messages;
-using Gremlin.Net.Structure.IO;
-using Gremlin.Net.Structure.IO.GraphBinary;
-using Gremlin.Net.Structure.IO.GraphSON;
+using Gremlin.Net.Structure.IO.GraphBinary4;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging.Abstractions;
 
@@ -39,111 +36,9 @@ namespace Gremlin.Net.Driver
     /// </summary>
     public class GremlinClient : IGremlinClient
     {
-        private readonly ConnectionPool _connectionPool;
-        
-        internal ILoggerFactory LoggerFactory { get; }
-
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="GremlinClient" /> class for the specified Gremlin Server.
-        /// </summary>
-        /// <param name="gremlinServer">The <see cref="GremlinServer" /> the requests should be sent to.</param>
-        /// <param name="graphSONReader">A <see cref="GraphSONReader" /> instance to read received GraphSON data.</param>
-        /// <param name="graphSONWriter">a <see cref="GraphSONWriter" /> instance to write GraphSON data.</param>
-        /// <param name="connectionPoolSettings">The <see cref="ConnectionPoolSettings" /> for the connection pool.</param>
-        /// <param name="webSocketConfiguration">
-        ///     A delegate that will be invoked with the <see cref="ClientWebSocketOptions" />
-        ///     object used to configure WebSocket connections.
-        /// </param>
-        /// <param name="sessionId">The session Id if Gremlin Client in session mode, defaults to null as session-less Client.</param>
-        [Obsolete("This constructor is obsolete. Use the constructor that takes a IMessageSerializer instead.")]
-        public GremlinClient(GremlinServer gremlinServer, GraphSONReader graphSONReader, GraphSONWriter graphSONWriter,
-            ConnectionPoolSettings? connectionPoolSettings = null,
-            Action<ClientWebSocketOptions>? webSocketConfiguration = null, string? sessionId = null)
-            : this(gremlinServer, graphSONReader, graphSONWriter, SerializationTokens.GraphSON3MimeType,
-                connectionPoolSettings, webSocketConfiguration, sessionId)
-        {
-        }
-        
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="GremlinClient" /> class for the specified Gremlin Server.
-        /// </summary>
-        /// <param name="gremlinServer">The <see cref="GremlinServer" /> the requests should be sent to.</param>
-        /// <param name="graphSONReader">A <see cref="GraphSONReader" /> instance to read received GraphSON data.</param>
-        /// <param name="graphSONWriter">a <see cref="GraphSONWriter" /> instance to write GraphSON data.</param>
-        /// <param name="mimeType">The GraphSON version mime type, defaults to latest supported by the server.</param>
-        /// <param name="connectionPoolSettings">The <see cref="ConnectionPoolSettings" /> for the connection pool.</param>
-        /// <param name="webSocketConfiguration">
-        ///     A delegate that will be invoked with the <see cref="ClientWebSocketOptions" />
-        ///     object used to configure WebSocket connections.
-        /// </param>
-        /// <param name="sessionId">The session Id if Gremlin Client in session mode, defaults to null as session-less Client.</param>
-        [Obsolete("This constructor is obsolete. Use the constructor that takes a IMessageSerializer instead.")]
-        public GremlinClient(GremlinServer gremlinServer, GraphSONReader? graphSONReader, GraphSONWriter? graphSONWriter,
-            string mimeType, ConnectionPoolSettings? connectionPoolSettings = null,
-            Action<ClientWebSocketOptions>? webSocketConfiguration = null, string? sessionId = null)
-        {
-            IMessageSerializer messageSerializer;
-            switch (mimeType)
-            {
-                case SerializationTokens.GraphSON3MimeType:
-                    VerifyGraphSONArgumentTypeForMimeType<GraphSON3Reader>(graphSONReader, nameof(graphSONReader),
-                        mimeType);
-                    VerifyGraphSONArgumentTypeForMimeType<GraphSON3Writer>(graphSONWriter, nameof(graphSONWriter),
-                        mimeType);
-                    messageSerializer = new GraphSON3MessageSerializer(
-                        (GraphSON3Reader?) graphSONReader ?? new GraphSON3Reader(),
-                        (GraphSON3Writer?) graphSONWriter ?? new GraphSON3Writer());
-                    break;
-                case SerializationTokens.GraphSON2MimeType:
-                    VerifyGraphSONArgumentTypeForMimeType<GraphSON2Reader>(graphSONReader, nameof(graphSONReader),
-                        mimeType);
-                    VerifyGraphSONArgumentTypeForMimeType<GraphSON2Writer>(graphSONWriter, nameof(graphSONWriter),
-                        mimeType);
-                    messageSerializer = new GraphSON2MessageSerializer(
-                        (GraphSON2Reader?) graphSONReader ?? new GraphSON2Reader(),
-                        (GraphSON2Writer?) graphSONWriter ?? new GraphSON2Writer());
-                    break;
-                default:
-                    throw new ArgumentException(nameof(mimeType), $"{mimeType} not supported");
-            }
-
-            var connectionFactory =
-                new ConnectionFactory(gremlinServer, messageSerializer,
-                    new WebSocketSettings
-                    {
-                        WebSocketConfigurationCallback = webSocketConfiguration,
-                        EnableUserAgentOnConnect = connectionPoolSettings?.EnableUserAgentOnConnect ?? ConnectionPoolSettings.DefaultEnableUserAgentOnConnect
-                    }, sessionId);
-
-            // make sure one connection in pool as session mode
-            if (!string.IsNullOrEmpty(sessionId))
-            {
-                if (connectionPoolSettings != null)
-                {
-                    if (connectionPoolSettings.PoolSize != 1)
-                        throw new ArgumentOutOfRangeException(nameof(connectionPoolSettings), "PoolSize must be 1 in session mode!");
-                }
-                else
-                {
-                    connectionPoolSettings = new ConnectionPoolSettings {PoolSize = 1};
-                }
-            }
-
-            LoggerFactory = NullLoggerFactory.Instance;
+        private readonly Connection _connection;
 
-            _connectionPool = new ConnectionPool(connectionFactory,
-                connectionPoolSettings ?? new ConnectionPoolSettings(), LoggerFactory.CreateLogger<ConnectionPool>());
-        }
-
-        private static void VerifyGraphSONArgumentTypeForMimeType<T>(object? argument, string argumentName,
-            string mimeType)
-        {
-            if (argument != null && argument is not T)
-            {
-                throw new ArgumentException(
-                    $"{argumentName} is not a {typeof(T).Name} but the mime type is: {mimeType}", argumentName);
-            }
-        }
+        internal ILoggerFactory LoggerFactory { get; }
 
         /// <summary>
         ///     Initializes a new instance of the <see cref="GremlinClient" /> class for the specified Gremlin Server.
@@ -153,69 +48,33 @@ namespace Gremlin.Net.Driver
         ///     A <see cref="IMessageSerializer" /> instance to serialize messages sent to and received
         ///     from the server.
         /// </param>
-        /// <param name="connectionPoolSettings">The <see cref="ConnectionPoolSettings" /> for the connection pool.</param>
-        /// <param name="webSocketConfiguration">
-        ///     A delegate that will be invoked with the <see cref="ClientWebSocketOptions" />
-        ///     object used to configure WebSocket connections.
-        /// </param>
-        /// <param name="sessionId">The session Id if Gremlin Client in session mode, defaults to null as session-less Client.</param>
-        /// <param name="disableCompression">
-        ///     Whether to disable compression. Compression is only supported since .NET 6.
-        ///     There it is also enabled by default.
-        /// 
-        ///     Note that compression might make your application susceptible to attacks like CRIME/BREACH. Compression
-        ///     should therefore be turned off if your application sends sensitive data to the server as well as data
-        ///     that could potentially be controlled by an untrusted user.
-        /// </param>
+        /// <param name="connectionSettings">The <see cref="ConnectionSettings" /> for the HTTP connection.</param>
         /// <param name="loggerFactory">A factory to create loggers. If not provided, then nothing will be logged.</param>
+        // Interceptor slot reserved for future spec:
+        // IReadOnlyList<Func<HttpRequestMessage, Task>>? interceptors = null,
         public GremlinClient(GremlinServer gremlinServer, IMessageSerializer? messageSerializer = null,
-            ConnectionPoolSettings? connectionPoolSettings = null,
-            Action<ClientWebSocketOptions>? webSocketConfiguration = null, string? sessionId = null,
-            bool disableCompression = false, ILoggerFactory? loggerFactory = null)
+            ConnectionSettings? connectionSettings = null,
+            ILoggerFactory? loggerFactory = null)
         {
-            messageSerializer ??= new GraphBinaryMessageSerializer();
-            var webSocketSettings = new WebSocketSettings
-            {
-                WebSocketConfigurationCallback = webSocketConfiguration,
-                EnableUserAgentOnConnect = connectionPoolSettings?.EnableUserAgentOnConnect ?? ConnectionPoolSettings.DefaultEnableUserAgentOnConnect
-#if NET6_0_OR_GREATER
-                , UseCompression = !disableCompression
-#endif
-            };
-            var connectionFactory =
-                new ConnectionFactory(gremlinServer, messageSerializer, webSocketSettings, sessionId);
-
-            // make sure one connection in pool as session mode
-            if (!string.IsNullOrEmpty(sessionId))
-            {
-                if (connectionPoolSettings != null)
-                {
-                    if (connectionPoolSettings.PoolSize != 1)
-                        throw new ArgumentOutOfRangeException(nameof(connectionPoolSettings),
-                            "PoolSize must be 1 in session mode!");
-                }
-                else
-                {
-                    connectionPoolSettings = new ConnectionPoolSettings {PoolSize = 1};
-                }
-            }
-
+            messageSerializer ??= new GraphBinary4MessageSerializer();
+            connectionSettings ??= new ConnectionSettings();
             LoggerFactory = loggerFactory ?? NullLoggerFactory.Instance;
 
-            _connectionPool = new ConnectionPool(connectionFactory,
-                connectionPoolSettings ?? new ConnectionPoolSettings(), LoggerFactory.CreateLogger<ConnectionPool>());
-        }
+            _connection = new Connection(
+                gremlinServer.Uri,
+                messageSerializer,
+                connectionSettings);
 
-        /// <summary>
-        ///     Gets the number of open connections.
-        /// </summary>
-        public int NrConnections => _connectionPool.NrConnections;
+            var logger = LoggerFactory.CreateLogger<GremlinClient>();
+            logger.InitializedHttpConnection(gremlinServer.Uri);
+        }
 
         /// <inheritdoc />
-        public async Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage, CancellationToken cancellationToken = default)
+        public async Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage,
+            CancellationToken cancellationToken = default)
         {
-            using var connection = _connectionPool.GetAvailableConnection();
-            return await connection.SubmitAsync<T>(requestMessage, cancellationToken).ConfigureAwait(false);
+            return await _connection.SubmitAsync<T>(requestMessage, cancellationToken)
+                .ConfigureAwait(false);
         }
 
         #region IDisposable Support
@@ -238,11 +97,11 @@ namespace Gremlin.Net.Driver
             if (!_disposed)
             {
                 if (disposing)
-                    _connectionPool?.Dispose();
+                    _connection?.Dispose();
                 _disposed = true;
             }
         }
 
         #endregion
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClientExtensions.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClientExtensions.cs
index 40cdd77e00..176def707f 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClientExtensions.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinClientExtensions.cs
@@ -141,9 +141,9 @@ namespace Gremlin.Net.Driver
             Dictionary<string, object>? bindings = null,
             CancellationToken cancellationToken = default)
         {
-            var msgBuilder = RequestMessage.Build(Tokens.OpsEval).AddArgument(Tokens.ArgsGremlin, requestScript);
+            var msgBuilder = RequestMessage.Build(requestScript);
             if (bindings != null)
-                msgBuilder.AddArgument(Tokens.ArgsBindings, bindings);
+                msgBuilder.AddBindings(bindings);
             var msg = msgBuilder.Create();
             return await gremlinClient.SubmitAsync<T>(msg, cancellationToken).ConfigureAwait(false);
         }
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinServer.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinServer.cs
index f8cf8bf8ff..b17b8836ad 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinServer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/GremlinServer.cs
@@ -38,10 +38,11 @@ namespace Gremlin.Net.Driver
         /// <param name="enableSsl">Specifies whether SSL should be enabled.</param>
         /// <param name="username">The username to submit on requests that require authentication.</param>
         /// <param name="password">The password to submit on requests that require authentication.</param>
+        /// <param name="path">The path to the Gremlin endpoint on the server.</param>
         public GremlinServer(string hostname = "localhost", int port = 8182, bool enableSsl = false,
-            string? username = null, string? password = null)
+            string? username = null, string? password = null, string path = "/gremlin")
         {
-            Uri = CreateUri(hostname, port, enableSsl);
+            Uri = CreateUri(hostname, port, enableSsl, path);
             Username = username;
             Password = password;
         }
@@ -49,7 +50,6 @@ namespace Gremlin.Net.Driver
         /// <summary>
         ///     Gets the URI of the Gremlin Server.
         /// </summary>
-        /// <value>The WebSocket <see cref="System.Uri" /> that the Gremlin Server responds to.</value>
         public Uri Uri { get; }
 
         /// <summary>
@@ -62,10 +62,10 @@ namespace Gremlin.Net.Driver
         /// </summary>
         public string? Password { get; }
 
-        private Uri CreateUri(string hostname, int port, bool enableSsl)
+        private static Uri CreateUri(string hostname, int port, bool enableSsl, string path)
         {
-            var scheme = enableSsl ? "wss" : "ws";
-            return new Uri($"{scheme}://{hostname}:{port}/gremlin");
+            var scheme = enableSsl ? "https" : "http";
+            return new Uri($"{scheme}://{hostname}:{port}{path}");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/IClientWebSocket.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/IClientWebSocket.cs
deleted file mode 100644
index 29150a77b5..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/IClientWebSocket.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Net.WebSockets;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Driver
-{
-    internal interface IClientWebSocket : IDisposable
-    {
-        WebSocketState State { get; }
-        ClientWebSocketOptions Options { get; }
-        Task CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken);
-        Task ConnectAsync(Uri uri, CancellationToken cancellationToken);
-        Task<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken);
-        Task SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken);
-#if NET6_0_OR_GREATER
-        ValueTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, WebSocketMessageFlags messageFlags, CancellationToken cancellationToken);
-#endif
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/IConnection.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/IConnection.cs
deleted file mode 100644
index 26791762fe..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/IConnection.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver.Messages;
-
-namespace Gremlin.Net.Driver
-{
-    internal interface IConnection : IDisposable
-    {
-        Task ConnectAsync(CancellationToken cancellationToken);
-        Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage, CancellationToken cancellationToken);
-        int NrRequestsInFlight { get; }
-        bool IsOpen { get; }
-        Task CloseAsync();
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/IConnectionFactory.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/IConnectionFactory.cs
deleted file mode 100644
index 52fa46b0b0..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/IConnectionFactory.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-namespace Gremlin.Net.Driver
-{
-    internal interface IConnectionFactory
-    {
-        IConnection CreateConnection();
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/IMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/IMessageSerializer.cs
index 5a0032ceb6..afb65b05fb 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/IMessageSerializer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/IMessageSerializer.cs
@@ -48,7 +48,7 @@ namespace Gremlin.Net.Driver
         /// <param name="message">The serialized message to deserialize.</param>
         /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
         /// <returns>The deserialized <see cref="ResponseMessage{T}"/>.</returns>
-        Task<ResponseMessage<List<object>>?> DeserializeMessageAsync(byte[] message,
+        Task<ResponseMessage<List<object>>> DeserializeMessageAsync(byte[] message,
             CancellationToken cancellationToken = default);
     }
 }
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs
index f83b040591..a90049d0c3 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs
@@ -29,18 +29,10 @@ namespace Gremlin.Net.Driver
 {
     internal static partial class Log
     {
-        [LoggerMessage(20000, LogLevel.Information, "Creating {nrConnections} new connections")]
-        public static partial void FillingPool(this ILogger logger, int nrConnections);
-
-        [LoggerMessage(20001, LogLevel.Warning,
-            "Could not get a connection from the pool. Will try again. Retry {retryCount} of {maxRetries}")]
-        public static partial void CouldNotGetConnectionFromPool(this ILogger logger, int retryCount, int maxRetries);
-
-        [LoggerMessage(20002, LogLevel.Information,
-            "A connection was closed. Removing it from the pool so it can be replaced.")]
-        public static partial void RemovingClosedConnectionFromPool(this ILogger logger);
+        [LoggerMessage(20000, LogLevel.Information, "Initialized HTTP connections to {uri}")]
+        public static partial void InitializedHttpConnection(this ILogger logger, Uri uri);
         
-        [LoggerMessage(20003, LogLevel.Debug, "Submitting GremlinLang {gremlinLang} for request: {requestId}")]
-        public static partial void SubmittingGremlinLang(this ILogger logger, GremlinLang gremlinLang, Guid requestId);
+        [LoggerMessage(20001, LogLevel.Debug, "Submitting GremlinLang {gremlinLang}")]
+        public static partial void SubmittingGremlinLang(this ILogger logger, GremlinLang gremlinLang);
     }
 }
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/RequestMessage.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/RequestMessage.cs
index 0d1f284ab5..f599a532d6 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/RequestMessage.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/RequestMessage.cs
@@ -27,55 +27,38 @@ using System.Collections.Generic;
 namespace Gremlin.Net.Driver.Messages
 {
     /// <summary>
-    ///     The model for a request message sent to the server.
+    ///     The model for a 4.0 request message sent to the server.
     /// </summary>
     public class RequestMessage
     {
-        private RequestMessage(Guid requestId, string operation, string processor, Dictionary<string, object> arguments)
+        private RequestMessage(string gremlin, Dictionary<string, object> fields)
         {
-            RequestId = requestId;
-            Operation = operation;
-            Processor = processor;
-            Arguments = arguments;
+            Gremlin = gremlin ?? throw new ArgumentNullException(nameof(gremlin));
+            Fields = fields;
+            if (!Fields.ContainsKey(Tokens.ArgsLanguage))
+            {
+                Fields[Tokens.ArgsLanguage] = "gremlin-lang";
+            }
         }
 
         /// <summary>
-        ///     Gets the ID of this request message.
-        /// </summary>
-        /// <value>A UUID representing the unique identification for the request.</value>
-        public Guid RequestId { get; }
-
-        /// <summary>
-        ///     Gets the name of the operation that should be executed by the Gremlin Server.
-        /// </summary>
-        /// <value>
-        ///     The name of the "operation" to execute based on the available OpProcessor configured in the Gremlin Server. This
-        ///     defaults to "eval" which evaluates a request script.
-        /// </value>
-        public string Operation { get; }
-
-        /// <summary>
-        ///     Gets the name of the OpProcessor to utilize.
+        ///     Gets the Gremlin query string.
         /// </summary>
-        /// <value>
-        ///     The name of the OpProcessor to utilize. This defaults to an empty string which represents the default
-        ///     OpProcessor for evaluating scripts.
-        /// </value>
-        public string Processor { get; }
+        public string Gremlin { get; }
 
         /// <summary>
-        ///     Gets arguments of the <see cref="RequestMessage" />.
+        ///     Gets the fields map containing language, g, bindings, and other options.
         /// </summary>
-        public Dictionary<string, object> Arguments { get; }
+        public Dictionary<string, object> Fields { get; }
 
         /// <summary>
         ///     Initializes a <see cref="Builder" /> to build a <see cref="RequestMessage" />.
         /// </summary>
-        /// <param name="operation">The name of the OpProcessor to utilize.</param>
+        /// <param name="gremlin">The Gremlin query string.</param>
         /// <returns>A <see cref="Builder" /> to build a <see cref="RequestMessage" />.</returns>
-        public static Builder Build(string operation)
+        public static Builder Build(string gremlin)
         {
-            return new Builder(operation);
+            return new Builder(gremlin);
         }
 
         /// <summary>
@@ -83,50 +66,134 @@ namespace Gremlin.Net.Driver.Messages
         /// </summary>
         public class Builder
         {
-            private const string DefaultProcessor = "";
-            private readonly Dictionary<string, object> _arguments = new Dictionary<string, object>();
-            private readonly string _operation;
-            private string _processor = DefaultProcessor;
-            private Guid _requestId = Guid.NewGuid();
+            private readonly string _gremlin;
+            private readonly Dictionary<string, object> _fields = new Dictionary<string, object>();
+            private readonly Dictionary<string, object> _bindings = new Dictionary<string, object>();
+
+            internal Builder(string gremlin)
+            {
+                _gremlin = gremlin;
+            }
+
+            /// <summary>
+            ///     Sets the traversal source name.
+            /// </summary>
+            /// <param name="g">The traversal source name.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddG(string g)
+            {
+                _fields[Tokens.ArgsG] = g;
+                return this;
+            }
+
+            /// <summary>
+            ///     Adds a single binding parameter.
+            /// </summary>
+            /// <param name="key">The binding key.</param>
+            /// <param name="val">The binding value.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddBinding(string key, object val)
+            {
+                _bindings[key] = val;
+                return this;
+            }
+
+            /// <summary>
+            ///     Adds multiple binding parameters.
+            /// </summary>
+            /// <param name="bindings">The bindings to add.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddBindings(Dictionary<string, object> bindings)
+            {
+                foreach (var kvp in bindings)
+                {
+                    _bindings[kvp.Key] = kvp.Value;
+                }
+                return this;
+            }
+
+            /// <summary>
+            ///     Adds a field to the request message.
+            /// </summary>
+            /// <param name="key">The field key.</param>
+            /// <param name="value">The field value.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddField(string key, object value)
+            {
+                _fields[key] = value;
+                return this;
+            }
+
+            /// <summary>
+            ///     Checks whether a field has been set.
+            /// </summary>
+            /// <param name="key">The field key to check.</param>
+            /// <returns>True if the field exists.</returns>
+            public bool HasField(string key) => _fields.ContainsKey(key);
+
+            /// <summary>
+            ///     Sets the evaluation timeout for this request.
+            /// </summary>
+            /// <param name="timeout">The timeout value.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddEvaluationTimeout(object timeout)
+            {
+                _fields[Tokens.ArgsEvalTimeout] = timeout;
+                return this;
+            }
 
-            internal Builder(string operation)
+            /// <summary>
+            ///     Sets the batch size for this request.
+            /// </summary>
+            /// <param name="batchSize">The batch size value.</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddBatchSize(object batchSize)
             {
-                _operation = operation;
+                _fields[Tokens.ArgsBatchSize] = batchSize;
+                return this;
+            }
+
+            /// <summary>
+            ///     Sets the materializeProperties option for this request.
+            /// </summary>
+            /// <param name="materializeProperties">The materializeProperties value (e.g. "all" or "tokens").</param>
+            /// <returns>The <see cref="Builder" />.</returns>
+            public Builder AddMaterializeProperties(string materializeProperties)
+            {
+                _fields[Tokens.ArgMaterializeProperties] = materializeProperties;
+                return this;
             }
 
             /// <summary>
-            ///     If this value is not set in the builder then the <see cref="RequestMessage.Processor" /> defaults to
-            ///     the standard op processor (empty string).
+            ///     Sets the user agent for this request.
             /// </summary>
-            /// <param name="processor">The name of the processor.</param>
+            /// <param name="userAgent">The user agent string.</param>
             /// <returns>The <see cref="Builder" />.</returns>
-            public Builder Processor(string processor)
+            public Builder AddUserAgent(string userAgent)
             {
-                _processor = processor;
+                _fields[Tokens.ArgsUserAgent] = userAgent;
                 return this;
             }
 
             /// <summary>
-            ///     Overrides the request identifier with a specified one, otherwise the
-            ///     <see cref="Builder" /> will randomly generate a <see cref="Guid" />.
+            ///     Sets the bulk results option for this request.
             /// </summary>
-            /// <param name="requestId">The request identifier to use.</param>
+            /// <param name="bulkResults">The bulk results value.</param>
             /// <returns>The <see cref="Builder" />.</returns>
-            public Builder OverrideRequestId(Guid requestId)
+            public Builder AddBulkResults(object bulkResults)
             {
-                _requestId = requestId;
+                _fields[Tokens.ArgsBulkResults] = bulkResults;
                 return this;
             }
 
             /// <summary>
-            ///     Adds and argument to the <see cref="RequestMessage" />.
+            ///     Sets the language for this request.
             /// </summary>
-            /// <param name="key">The key of the argument.</param>
-            /// <param name="value">The value of the argument.</param>
+            /// <param name="language">The language identifier (e.g. "gremlin-lang").</param>
             /// <returns>The <see cref="Builder" />.</returns>
-            public Builder AddArgument(string key, object value)
+            public Builder AddLanguage(string language)
             {
-                _arguments.Add(key, value);
+                _fields[Tokens.ArgsLanguage] = language;
                 return this;
             }
 
@@ -136,8 +203,9 @@ namespace Gremlin.Net.Driver.Messages
             /// <returns>The built <see cref="RequestMessage" />.</returns>
             public RequestMessage Create()
             {
-                return new RequestMessage(_requestId, _operation, _processor, _arguments);
+                _fields[Tokens.ArgsBindings] = _bindings;
+                return new RequestMessage(_gremlin, _fields);
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseMessage.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseMessage.cs
index 7da49920ef..f05e5c56a1 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseMessage.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseMessage.cs
@@ -21,42 +21,55 @@
 
 #endregion
 
-using System;
-
 namespace Gremlin.Net.Driver.Messages
 {
     /// <summary>
-    ///     The message returned from the server.
+    ///     The 4.0 response message returned from the server.
     /// </summary>
-    /// <typeparam name="T">The type of the data returned.</typeparam>
+    /// <typeparam name="T">The type of the result data.</typeparam>
     public record ResponseMessage<T>
     {
         /// <summary>
         ///     Initializes a new instance of the <see cref="ResponseMessage{T}" /> record.
         /// </summary>
-        /// <param name="requestId">The identifier of the <see cref="RequestMessage"/> that generated this <see cref="ResponseMessage{T}"/>.</param>
-        /// <param name="status">Status information about this <see cref="ResponseMessage{T}"/>.</param>
-        /// <param name="result">The result with its data and optional meta information.</param>
-        public ResponseMessage(Guid? requestId, ResponseStatus status, ResponseResult<T> result)
+        /// <param name="bulked">Whether the response contains bulked results.</param>
+        /// <param name="result">The deserialized result data.</param>
+        /// <param name="statusCode">The status code from the GraphBinary response status (after the end-of-stream marker).</param>
+        /// <param name="statusMessage">Optional status message from the GraphBinary response status.</param>
+        /// <param name="exception">Optional exception string from the GraphBinary response status.</param>
+        public ResponseMessage(bool bulked, T result, int statusCode,
+            string? statusMessage, string? exception)
         {
-            RequestId = requestId;
-            Status = status;
+            Bulked = bulked;
             Result = result;
+            StatusCode = statusCode;
+            StatusMessage = statusMessage;
+            Exception = exception;
         }
-        
+
+        /// <summary>
+        ///     Gets whether the response contains bulked results.
+        /// </summary>
+        public bool Bulked { get; }
+
+        /// <summary>
+        ///     Gets the deserialized result data.
+        /// </summary>
+        public T Result { get; }
+
         /// <summary>
-        ///     Gets the identifier of the <see cref="RequestMessage"/> that generated this <see cref="ResponseMessage{T}"/>.
+        ///     Gets the status code from the GraphBinary response status (200 = success).
         /// </summary>
-        public Guid? RequestId { get; }
+        public int StatusCode { get; }
 
         /// <summary>
-        ///     Gets status information about this <see cref="ResponseMessage{T}"/>.
+        ///     Gets the optional status message from the GraphBinary response status.
         /// </summary>
-        public ResponseStatus Status { get; }
+        public string? StatusMessage { get; }
 
         /// <summary>
-        ///     Gets the result with its data and optional meta information.
+        ///     Gets the optional exception string from the GraphBinary response status.
         /// </summary>
-        public ResponseResult<T> Result { get; set; }
+        public string? Exception { get; }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseResult.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseResult.cs
deleted file mode 100644
index 2f11b4f723..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseResult.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections.Generic;
-
-namespace Gremlin.Net.Driver.Messages
-{
-    /// <summary>
-    ///     Represents the result as a response to a <see cref="RequestMessage"/> sent as part of a
-    ///     <see cref="ResponseMessage{T}"/> by the server.
-    /// </summary>
-    /// <typeparam name="T">The type of the <see cref="Data"/>.</typeparam>
-    public record ResponseResult<T>
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ResponseResult{T}" /> record.
-        /// </summary>
-        /// <param name="data">The data of this result.</param>
-        /// <param name="meta">The (optional) meta data of this result.</param>
-        public ResponseResult(T? data, Dictionary<string, object>? meta = null)
-        {
-            Data = data;
-            Meta = meta ?? new Dictionary<string, object>();
-        }
-        
-        /// <summary>
-        ///     Gets the data of this result.
-        /// </summary>
-        public T? Data { get; }
-
-        /// <summary>
-        ///     Gets meta data of this result.
-        /// </summary>
-        public Dictionary<string, object> Meta { get; }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatus.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatus.cs
deleted file mode 100644
index 794525d47a..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatus.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections.Generic;
-using Gremlin.Net.Driver.Exceptions;
-
-namespace Gremlin.Net.Driver.Messages
-{
-    /// <summary>
-    ///     Represents status information of a <see cref="ResponseMessage{T}"/>.
-    /// </summary>
-    public record ResponseStatus
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ResponseStatus" /> record.
-        /// </summary>
-        /// <param name="code">The <see cref="ResponseStatusCode" />.</param>
-        /// <param name="attributes">The (optional) attributes with protocol-level information.</param>
-        /// <param name="message">The (optional) message which is just a human-readable string usually associated with errors.</param>
-        public ResponseStatus(ResponseStatusCode code, Dictionary<string, object>? attributes = null,
-            string? message = null)
-        {
-            Code = code;
-            Attributes = attributes ?? new Dictionary<string, object>();
-            Message = message;
-        }
-        
-        /// <summary>
-        ///     Gets the <see cref="ResponseStatusCode"/>.
-        /// </summary>
-        public ResponseStatusCode Code { get; }
-
-        /// <summary>
-        ///     Gets the attributes <see cref="Dictionary{TKey,TValue}"/> with protocol-level information.
-        /// </summary>
-        public Dictionary<string, object> Attributes { get; }
-
-        /// <summary>
-        ///     Gets the message which is just a human-readable string usually associated with errors.
-        /// </summary>
-        public string? Message { get; }
-    }
-
-    internal static class ResponseStatusExtensions
-    {
-        public static void ThrowIfStatusIndicatesError(this ResponseStatus status)
-        {
-            if (status.Code.IndicatesError())
-                throw new ResponseException(status.Code, status.Attributes, $"{status.Code}: {status.Message}");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatusCode.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatusCode.cs
deleted file mode 100644
index 12cf386fa7..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatusCode.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-
-namespace Gremlin.Net.Driver.Messages
-{
-    /// <summary>
-    ///     Represents the various status codes that Gremlin Server returns.
-    /// </summary>
-    public enum ResponseStatusCode
-    {
-        /// <summary>
-        ///     The server successfully processed a request to completion - there are no messages remaining in this
-        ///     stream.
-        /// </summary>
-        Success = 200,
-        
-        /// <summary>
-        ///     The server processed the request but there is no result to return (e.g. an Iterator with no elements)
-        ///     - there are no messages remaining in this stream.
-        /// </summary>
-        NoContent = 204,
-        
-        /// <summary>
-        ///     The server successfully returned some content, but there is more in the stream to arrive - wait for a
-        ///     SUCCESS to signify the end of the stream.
-        /// </summary>
-        PartialContent = 206,
-
-        /// <summary>
-        ///     The request attempted to access resources that the requesting user did not have access to.
-        /// </summary>
-        Unauthorized = 401,
-
-        /// <summary>
-        ///     The server could authenticate the request, but will not fulfill it.  This is a general purpose code that
-        ///     would typically be returned if the request is authenticated but not authorized to do what it is doing.
-        /// </summary>
-        Forbidden = 403,
-
-        /// <summary>
-        ///     A challenge from the server for the client to authenticate its request.
-        /// </summary>
-        Authenticate = 407,
-
-        /// <summary>
-        ///     Indicates that too many requests have been sent in a given amount of time.
-        /// </summary>
-        TooManyRequests = 429,
-
-        /// <summary>
-        ///    The request message contains objects that were not serializable on the client side.
-        /// </summary>
-        ClientSerializationError = 497,
-
-        /// <summary>
-        ///     The request message was not properly formatted which means it could not be parsed at all or the "op" code
-        ///     was not recognized such that Gremlin Server could properly route it for processing. Check the message format
-        ///     and retry the request.
-        /// </summary>
-        MalformedRequest = 498,
-
-        /// <summary>
-        ///     The request message was parseable, but the arguments supplied in the message were in conflict or incomplete.
-        ///     Check the message format and retry the request.
-        /// </summary>
-        InvalidRequestArguments = 499,
-
-        /// <summary>
-        ///     A general server error occurred that prevented the request from being processed.
-        /// </summary>
-        ServerError = 500,
-
-        /// <summary>
-        ///     A server error that is produced when the fail()-step is triggered.
-        /// </summary>
-        ServerErrorFailStep = 595,
-
-        /// <summary>
-        ///     A server error that indicates that the client should retry the request. A graph will typically return this error
-        ///     when a transaction fails due to a locking exception or some other sort of concurrent modification. In other
-        ///     words, the request was likely valid but the state of the server at the particular time the request arrived
-        ///     could not be processed to success, but could be at a later moment.
-        /// </summary>
-        ServerErrorTemporary = 596,
-
-        /// <summary>
-        ///     The request submitted for processing evaluated by the server with errors and could not be processed.
-        ///     Check the script or remote traversal submitted for errors or other problems and then resubmit.
-        /// </summary>
-        ServerEvaluationError = 597,
-
-        /// <summary>
-        ///     The server exceeded one of the timeout settings for the request and could therefore only partially responded
-        ///     or did not respond at all.
-        /// </summary>
-        ServerTimeout = 598,
-
-        /// <summary>
-        ///     The server was not capable of serializing an object that was returned from the script supplied on the request.
-        ///     Either transform the object into something Gremlin Server can process within the script or install mapper
-        ///     serialization classes to Gremlin Server.
-        /// </summary>
-        ServerSerializationError = 599
-    }
-
-    internal static class ResponseStatusCodeExtensions
-    {
-        public static bool IndicatesError(this ResponseStatusCode statusCode)
-        {
-            switch (statusCode)
-            {
-                case ResponseStatusCode.Success:
-                case ResponseStatusCode.NoContent:
-                case ResponseStatusCode.PartialContent:
-                case ResponseStatusCode.Authenticate:
-                    return false;
-                case ResponseStatusCode.Unauthorized:
-                case ResponseStatusCode.Forbidden:
-                case ResponseStatusCode.TooManyRequests:
-                case ResponseStatusCode.ClientSerializationError:
-                case ResponseStatusCode.MalformedRequest:
-                case ResponseStatusCode.InvalidRequestArguments:
-                case ResponseStatusCode.ServerError:
-                case ResponseStatusCode.ServerErrorFailStep:
-                case ResponseStatusCode.ServerErrorTemporary:
-                case ResponseStatusCode.ServerEvaluationError:
-                case ResponseStatusCode.ServerTimeout:
-                case ResponseStatusCode.ServerSerializationError:
-                    return true;
-                default:
-                    throw new ArgumentOutOfRangeException(nameof(statusCode), statusCode, null);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyClientWebSocket.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyClientWebSocket.cs
deleted file mode 100644
index 6b8b0e0802..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyClientWebSocket.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Net.WebSockets;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Driver
-{
-    internal class ProxyClientWebSocket : IClientWebSocket
-    {
-        private readonly ClientWebSocket _client;
-
-        public ProxyClientWebSocket(ClientWebSocket client)
-        {
-            _client = client;
-        }
-
-        public WebSocketState State => _client.State;
-
-        public ClientWebSocketOptions Options => _client.Options;
-
-        public static IClientWebSocket CreateClientWebSocket()
-        {
-            return new ProxyClientWebSocket(new ClientWebSocket());
-        }
-
-        public Task CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
-        {
-            return _client.CloseAsync(closeStatus, statusDescription, cancellationToken);
-        }
-
-        public Task ConnectAsync(Uri uri, CancellationToken cancellationToken)
-        {
-            return _client.ConnectAsync(uri, cancellationToken);
-        }
-
-        public void Dispose()
-        {
-            _client.Dispose();
-        }
-
-        public Task<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken)
-        {
-            return _client.ReceiveAsync(buffer, cancellationToken);
-        }
-
-        public Task SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)
-        {
-            return _client.SendAsync(buffer, messageType, endOfMessage, cancellationToken);
-        }
-
-#if NET6_0_OR_GREATER
-            public ValueTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, WebSocketMessageFlags messageFlags, CancellationToken cancellationToken)
-            {
-                return _client.SendAsync(buffer, messageType, messageFlags, cancellationToken);
-            }
-#endif
-    }
-}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyConnection.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyConnection.cs
deleted file mode 100644
index a7c3dab45a..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ProxyConnection.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver.Messages;
-
-namespace Gremlin.Net.Driver
-{
-    internal sealed class ProxyConnection : IConnection
-    {
-        public IConnection ProxiedConnection { get; }
-        private readonly Action<IConnection> _releaseAction;
-
-        public ProxyConnection(IConnection proxiedConnection, Action<IConnection> releaseAction)
-        {
-            ProxiedConnection = proxiedConnection;
-            _releaseAction = releaseAction;
-        }
-
-        public async Task ConnectAsync(CancellationToken cancellationToken)
-        {
-            await ProxiedConnection.ConnectAsync(cancellationToken).ConfigureAwait(false);
-        }
-
-        public async Task<ResultSet<T>> SubmitAsync<T>(RequestMessage requestMessage,
-            CancellationToken cancellationToken)
-        {
-            return await ProxiedConnection.SubmitAsync<T>(requestMessage, cancellationToken).ConfigureAwait(false);
-        }
-
-        public int NrRequestsInFlight => ProxiedConnection.NrRequestsInFlight;
-
-        public bool IsOpen => ProxiedConnection.IsOpen;
-
-        public async Task CloseAsync()
-        {
-            await ProxiedConnection.CloseAsync().ConfigureAwait(false);
-        }
-
-        public void Dispose()
-        {
-            _releaseAction(ProxiedConnection);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Remote/DriverRemoteConnection.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Remote/DriverRemoteConnection.cs
index c8a6e5d03f..4ddb326db8 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Remote/DriverRemoteConnection.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Remote/DriverRemoteConnection.cs
@@ -43,23 +43,13 @@ namespace Gremlin.Net.Driver.Remote
         private readonly string _traversalSource;
         private readonly ILogger<DriverRemoteConnection> _logger;
 
-        /// <summary>
-        /// Filter on these keys provided to OptionsStrategy and apply them to the request. Note that
-        /// "scriptEvaluationTimeout" was deprecated in 3.3.9 but still supported in server implementations and will
-        /// be removed in later versions. 
-        /// </summary>
-        private readonly List<string> _allowedKeys = new()
-        {
-            Tokens.ArgsEvalTimeout, "scriptEvaluationTimeout", Tokens.ArgsBatchSize,
-            Tokens.RequestId, Tokens.ArgsUserAgent, Tokens.ArgMaterializeProperties
-        };
-
-        private readonly string? _sessionId;
-        private string Processor => IsSessionBound ? Tokens.ProcessorSession : Tokens.ProcessorTraversal;
+        // All OptionsStrategy keys are passed through to the request fields.
+        // The server filters out options that don't apply, and this allows
+        // providers to use custom request fields via the Client directly or DRC.
 
         /// <inheritdoc />
-        public bool IsSessionBound => _sessionId != null;
-        
+        public bool IsSessionBound => false;
+
         /// <summary>
         ///     Initializes a new <see cref="IRemoteConnection" />.
         /// </summary>
@@ -82,11 +72,11 @@ namespace Gremlin.Net.Driver.Remote
         /// <param name="traversalSource">The name of the traversal source on the server to bind to.</param>
         /// <exception cref="ArgumentNullException">Thrown when client or the traversalSource is null.</exception>
         public DriverRemoteConnection(IGremlinClient client, string traversalSource = "g")
-            : this(client, traversalSource, null)
+            : this(client, traversalSource, logger: null)
         {
         }
 
-        private DriverRemoteConnection(IGremlinClient client, string traversalSource, string? sessionId = null,
+        private DriverRemoteConnection(IGremlinClient client, string traversalSource,
             ILogger<DriverRemoteConnection>? logger = null)
         {
             _client = client ?? throw new ArgumentNullException(nameof(client));
@@ -101,7 +91,6 @@ namespace Gremlin.Net.Driver.Remote
                 logger = loggerFactory.CreateLogger<DriverRemoteConnection>();
             }
             _logger = logger;
-            _sessionId = sessionId;
         }
 
         /// <summary>
@@ -113,30 +102,26 @@ namespace Gremlin.Net.Driver.Remote
         public async Task<ITraversal<TStart, TEnd>> SubmitAsync<TStart, TEnd>(GremlinLang gremlinLang,
             CancellationToken cancellationToken = default)
         {
+            _logger.SubmittingGremlinLang(gremlinLang);
             gremlinLang.AddG(_traversalSource);
 
-            var requestId = Guid.NewGuid();
-            var requestMsg =
-                RequestMessage.Build(Tokens.OpsEval)
-                    .Processor(Processor)
-                    .OverrideRequestId(requestId)
-                    .AddArgument(Tokens.ArgsGremlin, gremlinLang.GetGremlin())
-                    .AddArgument(Tokens.ArgsBindings, gremlinLang.Parameters);
+            var requestMsg = RequestMessage.Build(gremlinLang.GetGremlin())
+                .AddG(_traversalSource)
+                .AddBindings(gremlinLang.Parameters);
 
             foreach (var optionsStrategy in gremlinLang.OptionsStrategies)
             {
                 foreach (var pair in optionsStrategy.Configuration)
                 {
-                    if (_allowedKeys.Contains(pair.Key))
-                    {
-                        requestMsg.AddArgument(pair.Key, pair.Value);
-                    }
+                    requestMsg.AddField(pair.Key, pair.Value);
                 }
             }
 
-            if (IsSessionBound)
+            // Default bulkResults to "true" if not set per-request
+            // (consistent with Java RequestOptions.fromGremlinLang and Python extract_request_options)
+            if (!requestMsg.HasField(Tokens.ArgsBulkResults))
             {
-                requestMsg.AddArgument(Tokens.ArgsSession, _sessionId!);
+                requestMsg.AddField(Tokens.ArgsBulkResults, "true");
             }
 
             var resultSet = await _client.SubmitAsync<Traverser>(requestMsg.Create(), cancellationToken)
@@ -145,10 +130,12 @@ namespace Gremlin.Net.Driver.Remote
         }
 
         /// <inheritdoc />
+        /// <remarks>
+        ///     Transaction support over HTTP is not yet implemented. This will be addressed in a future release.
+        /// </remarks>
         public RemoteTransaction Tx(GraphTraversalSource g)
         {
-            var session = new DriverRemoteConnection(_client, _traversalSource, Guid.NewGuid().ToString(), _logger);
-            return new RemoteTransaction(session, g);
+            throw new NotSupportedException("Transaction support over HTTP is not yet implemented.");
         }
 
         /// <inheritdoc />
@@ -157,4 +144,4 @@ namespace Gremlin.Net.Driver.Remote
             _client?.Dispose();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ResponseHandlerForSingleRequestMessage.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ResponseHandlerForSingleRequestMessage.cs
deleted file mode 100644
index 91ae8f6304..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ResponseHandlerForSingleRequestMessage.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver.Messages;
-
-namespace Gremlin.Net.Driver
-{
-    internal class ResponseHandlerForSingleRequestMessage<T> : IResponseHandlerForSingleRequestMessage
-    {
-        public Task<ResultSet<T>> Result => _tcs.Task;
-
-        private readonly TaskCompletionSource<ResultSet<T>> _tcs =
-            new(TaskCreationOptions.RunContinuationsAsynchronously);
-        
-        private readonly List<T> _result = new();
-
-        public void HandleReceived(ResponseMessage<List<object>> received)
-        {
-            foreach (var d in received.Result.Data!)
-            {
-                _result.Add((T) d);
-            }
-        }
-
-        public void Finalize(Dictionary<string, object> statusAttributes)
-        {
-            var resultSet =
-                new ResultSet<T>(_result, statusAttributes);
-            _tcs.TrySetResult(resultSet);
-        }
-
-        public void HandleFailure(Exception objException)
-        {
-            _tcs.TrySetException(objException);
-        }
-
-        public void Cancel()
-        {
-            _tcs.SetCanceled();
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs
index adb88759cf..fd94e24a77 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs
@@ -40,31 +40,6 @@ namespace Gremlin.Net.Driver
         /// </summary>
         public const string RequestId = "requestId";
 
-        /// <summary>
-        ///     Operation used by the client to authenticate itself.
-        /// </summary>
-        public const string OpsAuthentication = "authentication";
-
-        /// <summary>
-        ///     Operation used to evaluate a Gremlin script provided as a string.
-        /// </summary>
-        public const string OpsEval = "eval";
-
-        /// <summary>
-        ///     Operation used to get all the keys of all side-effects as produced by a previously executed Traversal.
-        /// </summary>
-        public const string OpsClose = "close";
-
-        /// <summary>
-        ///     Default OpProcessor.
-        /// </summary>
-        public const string ProcessorTraversal = "traversal";
-
-        /// <summary>
-        ///     Session OpProcessor.
-        /// </summary>
-        public const string ProcessorSession = "session";
-
         /// <summary>
         ///     Argument name that allows the definition of the number of items each ResponseMessage should
         ///     contain from a particular result - overrides the resultIterationBatchSize server setting.
@@ -77,22 +52,11 @@ namespace Gremlin.Net.Driver
         /// </summary>
         public const string ArgsBindings = "bindings";
 
-        /// <summary>
-        ///     Argument name that allows definition of alias names for Graph and TraversalSource objects on the
-        ///     remote system.
-        /// </summary>
-        public const string ArgsAliases = "aliases";
-
         /// <summary>
         ///     Argument name that corresponds to the Gremlin to evaluate.
         /// </summary>
         public const string ArgsGremlin = "gremlin";
 
-        /// <summary>
-        ///     Argument name that allows to define the id of session.
-        /// </summary>
-        public const string ArgsSession = "session";
-
         /// <summary>
         ///     Argument name that allows a value that is a custom string that the user can pass to a server that
         ///     might accept it for purpose of identifying the kind of client it came from.
@@ -117,9 +81,13 @@ namespace Gremlin.Net.Driver
         public const string ArgMaterializeProperties = "materializeProperties";
 
         /// <summary>
-        ///     Argument name for the response to the server authentication challenge. This value is dependent on the SASL
-        ///     authentication mechanism required by the server.
+        ///     Argument name for the traversal source alias.
+        /// </summary>
+        public const string ArgsG = "g";
+
+        /// <summary>
+        ///     Argument name for bulk results mode.
         /// </summary>
-        public const string ArgsSasl = "sasl";
+        public const string ArgsBulkResults = "bulkResults";
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketConnection.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketConnection.cs
deleted file mode 100644
index 945ae80e37..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketConnection.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using Gremlin.Net.Driver.Exceptions;
-using System;
-using System.IO;
-using System.Net.WebSockets;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process;
-
-namespace Gremlin.Net.Driver
-{
-    internal interface IWebSocketConnection : IDisposable
-    {
-        Task ConnectAsync(Uri uri, CancellationToken cancellationToken);
-        Task CloseAsync();
-        Task SendMessageAsync(byte[] message, CancellationToken cancellationToken);
-#if NET6_0_OR_GREATER
-        Task SendMessageUncompressedAsync(byte[] message, CancellationToken cancellationToken);
-#endif
-        Task<byte[]> ReceiveMessageAsync();
-        bool IsOpen { get; }
-    }
-
-    internal class WebSocketConnection : IWebSocketConnection
-    {
-        private const int ReceiveBufferSize = 1024;
-        private const WebSocketMessageType MessageType = WebSocketMessageType.Binary;
-        private readonly IClientWebSocket _client;
-        private const string userAgentHeaderName = "User-Agent";
-
-        public WebSocketConnection(IClientWebSocket client, WebSocketSettings settings)
-        {
-            if (settings.EnableUserAgentOnConnect)
-            {
-                client.Options.SetRequestHeader(userAgentHeaderName, Utils.UserAgent);
-            }
-            _client = client;
-
-#if NET6_0_OR_GREATER
-            if (settings.UseCompression)
-            {
-                _client.Options.DangerousDeflateOptions = settings.CompressionOptions;
-            }
-#endif
-            settings.WebSocketConfigurationCallback?.Invoke(_client.Options);
-        }
-
-        public async Task ConnectAsync(Uri uri, CancellationToken cancellationToken)
-        {
-            await _client.ConnectAsync(uri, cancellationToken).ConfigureAwait(false);
-        }
-
-        public async Task CloseAsync()
-        {
-            if (CloseAlreadyInitiated) return;
-
-            try
-            {
-                await
-                    _client.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None)
-                        .ConfigureAwait(false);
-            }
-            catch (Exception)
-            {
-                // Swallow exceptions silently as there is nothing to do when closing fails
-            }
-        }
-
-        private bool CloseAlreadyInitiated => _client.State == WebSocketState.Closed ||
-                                            _client.State == WebSocketState.Aborted ||
-                                            _client.State == WebSocketState.CloseSent;
-        
-#if NET6_0_OR_GREATER
-        public async Task SendMessageUncompressedAsync(byte[] message, CancellationToken cancellationToken)
-        {
-            await _client.SendAsync(new ArraySegment<byte>(message), MessageType,
-                    WebSocketMessageFlags.EndOfMessage | WebSocketMessageFlags.DisableCompression,
-                    cancellationToken)
-                .ConfigureAwait(false);
-        }
-#endif
-        
-        public async Task SendMessageAsync(byte[] message, CancellationToken cancellationToken)
-        {
-            await
-                _client.SendAsync(new ArraySegment<byte>(message), MessageType, true, cancellationToken)
-                    .ConfigureAwait(false);
-        }
-
-        public async Task<byte[]> ReceiveMessageAsync()
-        {
-            using var ms = new MemoryStream();
-            WebSocketReceiveResult received;
-            var buffer = new byte[ReceiveBufferSize];
-
-            do
-            {
-                var receiveBuffer = new ArraySegment<byte>(buffer);
-                received = await _client.ReceiveAsync(receiveBuffer, CancellationToken.None).ConfigureAwait(false);
-                if (received.MessageType == WebSocketMessageType.Close)
-                {
-                    throw new ConnectionClosedException(received.CloseStatus, received.CloseStatusDescription);
-                }
-
-                ms.Write(receiveBuffer.Array!, receiveBuffer.Offset, received.Count);
-            } while (!received.EndOfMessage);
-
-            return ms.ToArray();
-        }
-
-        public bool IsOpen => _client.State == WebSocketState.Open;
-
-        #region IDisposable Support
-
-        private bool _disposed;
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                    _client?.Dispose();
-                _disposed = true;
-            }
-        }
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketSettings.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketSettings.cs
deleted file mode 100644
index 20ce851de8..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketSettings.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Net.WebSockets;
-
-namespace Gremlin.Net.Driver
-{
-    /// <summary>
-    ///     Holds settings for WebSocket connections.
-    /// </summary>
-    internal class WebSocketSettings
-    {
-        // We currently only use this internally so we don't have to pass these values through the different layers
-        // all the way down to the WebSocketConnection class. We can make this public however when we refactor the
-        // configuration in general.
-        
-        /// <summary>
-        ///     Gets or sets the delegate that will be invoked with the <see cref="ClientWebSocketOptions" />
-        ///     object used to configure WebSocket connections.
-        /// </summary>
-        public Action<ClientWebSocketOptions>? WebSocketConfigurationCallback { get; set; }
-
-        public bool EnableUserAgentOnConnect { get; set; }
-
-#if NET6_0_OR_GREATER
-        /// <summary>
-        ///     Gets or sets whether compressions will be used. The default is true. (Only available since .NET 6.)
-        /// </summary>
-        public bool UseCompression { get; set; } = true;
-
-        /// <summary>
-        ///     Gets or sets compression options. (Only available since .SET 6.)
-        /// </summary>
-        public WebSocketDeflateOptions CompressionOptions { get; set; } = new WebSocketDeflateOptions();
-#endif
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
index 80d7ffece6..de01df3367 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
@@ -1459,10 +1459,10 @@ namespace Gremlin.Net.Process.Traversal
         /// </summary>
         public GraphTraversal<TStart, Edge> MergeE (IDictionary<object,object?>? m)
         {
-            if (m != null && m.TryGetValue(Direction.Out, out var outValue) && outValue is Vertex outV) {
+            if (m != null && m.ContainsKey(Direction.Out) && m[Direction.Out] is Vertex outV) {
                 m[Direction.Out] = outV.Id;
             }
-            if (m != null && m.TryGetValue(Direction.In, out var inValue) && inValue is Vertex inV) {
+            if (m != null && m.ContainsKey(Direction.In) && m[Direction.In] is Vertex inV) {
                 m[Direction.In] = inV.Id;
             }
             GremlinLang.AddStep("mergeE", m);
@@ -1809,7 +1809,7 @@ namespace Gremlin.Net.Process.Traversal
         /// </summary>
         public GraphTraversal<TStart, TEnd> Property(Cardinality cardinality, IDictionary<object, object> map)
         {
-            if (map == null) throw new ArgumentNullException(nameof(map));
+            if (map == null) return Wrap<TStart, TEnd>(this);
 
             foreach (var entry in map)
             {
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs
index b629c831f5..581882f490 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs
@@ -75,8 +75,8 @@ namespace Gremlin.Net.Process.Traversal
             GremlinLang = gremlinLang;
         }
 
-        public GraphTraversalSource(ICollection<ITraversalStrategy> traversalStrategies, GremlinLang gremlinLang,
-            IRemoteConnection connection)
+        public GraphTraversalSource(ICollection<ITraversalStrategy> traversalStrategies,
+            GremlinLang gremlinLang, IRemoteConnection connection)
             : this(traversalStrategies.Where(strategy => strategy.GetType() != typeof(RemoteStrategy)).ToList(),
                 gremlinLang)
         {
@@ -369,10 +369,10 @@ namespace Gremlin.Net.Process.Traversal
         /// </summary>
         public GraphTraversal<Edge, Edge> MergeE(IDictionary<object,object?>? m)
         {
-            if (m != null && m[Direction.Out] is Vertex outV) {
+            if (m != null && m.ContainsKey(Direction.Out) && m[Direction.Out] is Vertex outV) {
                 m[Direction.Out] = outV.Id;
             }
-            if (m != null && m[Direction.In] is Vertex inV) {
+            if (m != null && m.ContainsKey(Direction.In) && m[Direction.In] is Vertex inV) {
                 m[Direction.In] = inV.Id;
             }
             var traversal = new GraphTraversal<Edge, Edge>(TraversalStrategies, GremlinLang.Clone());
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
index e4cd199348..f6df5bc87b 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
@@ -132,6 +132,21 @@ namespace Gremlin.Net.Process.Traversal
         ///     Gets a value indicating whether this GremlinLang has no content.
         /// </summary>
         public bool IsEmpty => _gremlin.Length == 0;
+        
+        /// <summary>
+        ///     Gets or sets the raw gremlin string content (without the "g" prefix).
+        ///     This is intended for test infrastructure use only, such as prepending
+        ///     source steps like withSideEffect after traversal construction.
+        /// </summary>
+        internal string Gremlin
+        {
+            get => _gremlin.ToString();
+            set
+            {
+                _gremlin.Clear();
+                _gremlin.Append(value);
+            }
+        }
 
         /// <summary>
         ///     Resets the static parameter counter. Intended for test determinism.
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/DataType.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/DataType.cs
deleted file mode 100644
index 4b823c8a88..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/DataType.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Represents a GraphBinary data type.
-    /// </summary>
-    public class DataType : IEquatable<DataType>
-    {
-#pragma warning disable 1591
-        public static readonly DataType Int = new DataType(0x01);
-        public static readonly DataType Long = new DataType(0x02);
-        public static readonly DataType String = new DataType(0x03);
-        public static readonly DataType Date = new DataType(0x04);
-        public static readonly DataType Timestamp = new DataType(0x05);
-        public static readonly DataType Class = new DataType(0x06);
-        public static readonly DataType Double = new DataType(0x07);
-        public static readonly DataType Float = new DataType(0x08);
-        public static readonly DataType List = new DataType(0x09);
-        public static readonly DataType Map = new DataType(0X0A);
-        public static readonly DataType Set = new DataType(0X0B);
-        public static readonly DataType Uuid = new DataType(0X0C);
-        public static readonly DataType Edge = new DataType(0x0D);
-        public static readonly DataType Path = new DataType(0x0E);
-        public static readonly DataType Property = new DataType(0x0F);
-        
-        public static readonly DataType Vertex = new DataType(0x11);
-        public static readonly DataType VertexProperty = new DataType(0x12);
-        public static readonly DataType Barrier = new DataType(0x13);
-        public static readonly DataType Cardinality = new DataType(0x16);
-        public static readonly DataType Column = new DataType(0x17);
-        public static readonly DataType Direction = new DataType(0x18);
-        public static readonly DataType DT = new DataType(0x2F);
-        public static readonly DataType GType = new DataType(0x30);
-        public static readonly DataType Merge = new DataType(0x2E);
-        public static readonly DataType Operator = new DataType(0x19);
-        public static readonly DataType Order = new DataType(0x1A);
-        public static readonly DataType Pick = new DataType(0x1B);
-        public static readonly DataType Pop = new DataType(0x1C);
-        public static readonly DataType Lambda = new DataType(0x1D);
-        public static readonly DataType P = new DataType(0x1E);
-        public static readonly DataType Scope = new DataType(0x1F);
-        public static readonly DataType T = new DataType(0x20);
-        public static readonly DataType Traverser = new DataType(0x21);
-        public static readonly DataType BigDecimal = new DataType(0x22);
-        public static readonly DataType BigInteger = new DataType(0x23);
-        public static readonly DataType Byte = new DataType(0x24);
-        public static readonly DataType ByteBuffer = new DataType(0x25);
-        public static readonly DataType Short = new DataType(0x26);
-        public static readonly DataType Boolean = new DataType(0x27);
-        public static readonly DataType TextP = new DataType(0x28);
-        public static readonly DataType TraversalStrategy = new DataType(0x29);
-        public static readonly DataType BulkSet = new DataType(0x2A);
-        // TODO: Support metrics and traversal metrics
-        public static readonly DataType Char = new DataType(0x80);
-        public static readonly DataType Duration = new DataType(0x81);
-        public static readonly DataType OffsetDateTime = new DataType(0x88);
-#pragma warning restore 1591
-
-        /// <summary>
-        /// A custom type, represented as a blob value.
-        /// </summary>
-        public static readonly DataType Custom = new DataType(0);
-        
-        /// <summary>
-        /// A null value for an unspecified Object value.
-        /// </summary>
-        public static readonly DataType UnspecifiedNull = new DataType(0xFE);
-
-        private DataType(int code)
-        {
-            TypeCode = (byte) code;
-        }
-        
-        /// <summary>
-        ///     Gets the type code of this data type.
-        /// </summary>
-        public byte TypeCode { get; }
-
-        /// <summary>
-        /// Creates a new <see cref="DataType"/> instance for the given type code.
-        /// </summary>
-        public static DataType FromTypeCode(int code)
-        {
-            return new DataType(code);
-        }
-
-        /// <inheritdoc />
-        public bool Equals(DataType? other)
-        {
-            if (ReferenceEquals(null, other)) return false;
-            if (ReferenceEquals(this, other)) return true;
-            return TypeCode == other.TypeCode;
-        }
-
-        /// <inheritdoc />
-        public override bool Equals(object? obj)
-        {
-            if (ReferenceEquals(null, obj)) return false;
-            if (ReferenceEquals(this, obj)) return true;
-            if (obj.GetType() != GetType()) return false;
-            return Equals((DataType) obj);
-        }
-
-        /// <inheritdoc />
-        public override int GetHashCode()
-        {
-            return TypeCode.GetHashCode();
-        }
-
-        /// <summary>
-        /// Determines whether two specified <see cref="DataType"/> have the same values.
-        /// </summary>
-        public static bool operator ==(DataType first, DataType second)
-        {
-            if (ReferenceEquals(null, first))
-            {
-                if (ReferenceEquals(null, second))
-                {
-                    return true;
-                }
-
-                return false;
-            }
-
-            return first.Equals(second);
-        }
-
-        /// <summary>
-        /// Determines whether two specified <see cref="DataType"/> have different values.
-        /// </summary>
-        public static bool operator !=(DataType first, DataType second)
-        {
-            return !(first == second);
-        }
-
-        /// <inheritdoc />
-        public override string ToString()
-        {
-            return $"DataType{{ TypeCode = {TypeCode} }}";
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryReader.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryReader.cs
deleted file mode 100644
index d2d8baef18..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryReader.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Allows to deserialize objects from GraphBinary.
-    /// </summary>
-    public class GraphBinaryReader
-    {
-        private readonly TypeSerializerRegistry _registry;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="GraphBinaryReader" /> class.
-        /// </summary>
-        /// <param name="registry">The <see cref="TypeSerializerRegistry"/> to use for deserialization.</param>
-        public GraphBinaryReader(TypeSerializerRegistry? registry = null)
-        {
-            _registry = registry ?? TypeSerializerRegistry.Instance;
-        }
-
-        /// <summary>
-        /// Reads only the value for a specific type <typeparamref name="T"/>.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <typeparam name="T">The type of the object to read.</typeparam>
-        /// <returns>The read value.</returns>
-        public async Task<object?> ReadNullableValueAsync<T>(Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            var typedSerializer = _registry.GetSerializerFor(typeof(T));
-            return await typedSerializer.ReadNullableValueAsync(stream, this, cancellationToken)
-                .ConfigureAwait(false);
-        }
-        
-        /// <summary>
-        /// Reads only the value for a specific type <typeparamref name="T"/>.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <typeparam name="T">The type of the object to read.</typeparam>
-        /// <returns>The read value.</returns>
-        public async Task<object> ReadNonNullableValueAsync<T>(Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            var typedSerializer = _registry.GetSerializerFor(typeof(T));
-            return await typedSerializer.ReadNonNullableValueAsync(stream, this, cancellationToken)
-                .ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Reads the type code, information and value with fully-qualified format.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read value.</returns>
-        public async Task<object?> ReadAsync(Stream stream, CancellationToken cancellationToken = default)
-        {
-            var type = DataType.FromTypeCode(await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false));
-
-            if (type == DataType.UnspecifiedNull)
-            {
-                await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false); // read value byte to advance the index
-                return null;
-            }
-
-            ITypeSerializer typeSerializer;
-            if (type != DataType.Custom)
-            {
-                typeSerializer = _registry.GetSerializerFor(type);
-            }
-            else
-            {
-                var customTypeName = (string)await ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                    .ConfigureAwait(false);
-                typeSerializer = _registry.GetSerializerForCustomType(customTypeName);
-            }
-            
-            return await typeSerializer.ReadAsync(stream, this, cancellationToken).ConfigureAwait(false);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryWriter.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryWriter.cs
deleted file mode 100644
index 7d0153c280..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryWriter.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Structure.IO.GraphBinary.Types;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Allows to serialize objects to GraphBinary.
-    /// </summary>
-    public class GraphBinaryWriter
-    {
-        private const byte ValueFlagNull = 1;
-        private const byte ValueFlagNone = 0;
-
-        /// <summary>
-        /// A <see cref="byte"/> representing the version of the GraphBinary specification.
-        /// </summary>
-        public const byte VersionByte = 0x81;
-
-        private static readonly byte[] UnspecifiedNullBytes = {DataType.UnspecifiedNull.TypeCode, 0x01};
-        private static readonly byte[] CustomTypeCodeBytes = { DataType.Custom.TypeCode };
-
-        private readonly TypeSerializerRegistry _registry;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="GraphBinaryWriter" /> class.
-        /// </summary>
-        /// <param name="registry">The <see cref="TypeSerializerRegistry"/> to use for serialization.</param>
-        public GraphBinaryWriter(TypeSerializerRegistry? registry = null)
-        {
-            _registry = registry ?? TypeSerializerRegistry.Instance;
-        }
-
-        /// <summary>
-        /// Writes a nullable value without including type information.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteNullableValueAsync(object? value, Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            if (value == null)
-            {
-                await WriteValueFlagNullAsync(stream, cancellationToken).ConfigureAwait(false);
-                return;
-            }
-            
-            var valueType = value.GetType();
-            var serializer = _registry.GetSerializerFor(valueType);
-            await serializer.WriteNullableValueAsync(value, stream, this, cancellationToken).ConfigureAwait(false);
-        }
-        
-        /// <summary>
-        /// Writes a non-nullable value without including type information.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteNonNullableValueAsync(object value, Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            if (value == null) throw new IOException($"{nameof(value)} cannot be null");
-            var valueType = value.GetType();
-            var serializer = _registry.GetSerializerFor(valueType);
-            await serializer.WriteNonNullableValueAsync(value, stream, this, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Writes an object in fully-qualified format, containing {type_code}{type_info}{value_flag}{value}.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteAsync(object? value, Stream stream, CancellationToken cancellationToken = default)
-        {
-            if (value == null)
-            {
-                await stream.WriteAsync(UnspecifiedNullBytes, cancellationToken).ConfigureAwait(false);
-                return;
-            }
-
-            var valueType = value.GetType();
-            var serializer = _registry.GetSerializerFor(valueType);
-
-            if (serializer is CustomTypeSerializer customTypeSerializer)
-            {
-                await stream.WriteAsync(CustomTypeCodeBytes, cancellationToken).ConfigureAwait(false);
-                await WriteNonNullableValueAsync(customTypeSerializer.TypeName, stream, cancellationToken)
-                    .ConfigureAwait(false);
-                await customTypeSerializer.WriteAsync(value, stream, this, cancellationToken).ConfigureAwait(false);
-                return;
-            }
-
-            await stream.WriteByteAsync(serializer.DataType.TypeCode, cancellationToken).ConfigureAwait(false);
-            await serializer.WriteAsync(value, stream, this, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Writes a single byte representing the null value_flag.
-        /// </summary>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteValueFlagNullAsync(Stream stream, CancellationToken cancellationToken = default)
-        {
-            await stream.WriteByteAsync(ValueFlagNull, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Writes a single byte with value 0, representing an unset value_flag.
-        /// </summary>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteValueFlagNoneAsync(Stream stream, CancellationToken cancellationToken = default) {
-            await stream.WriteByteAsync(ValueFlagNone, cancellationToken).ConfigureAwait(false);
-        }
-
-        
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ITypeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ITypeSerializer.cs
deleted file mode 100644
index 5503c63647..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ITypeSerializer.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Represents a serializer for a certain type.
-    /// </summary>
-    public interface ITypeSerializer
-    {
-        /// <summary>
-        /// Gets the <see cref="DataType"/> that supported by this serializer.
-        /// </summary>
-        DataType DataType { get; }
-
-        /// <summary>
-        /// Writes the type code, information and value to a stream.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="writer">A <see cref="GraphBinaryWriter"/> that can be used to write nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        Task WriteAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <summary>
-        /// Writes the nullable value to a stream, composed by the value flag and the sequence of bytes.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="writer">A <see cref="GraphBinaryWriter"/> that can be used to write nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        Task WriteNullableValueAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-        
-        /// <summary>
-        /// Writes the non-nullable value to a stream, composed by the value flag and the sequence of bytes.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="writer">A <see cref="GraphBinaryWriter"/> that can be used to write nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        Task WriteNonNullableValueAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <summary>
-        /// Reads the type information and value from the stream.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="reader">A <see cref="GraphBinaryReader"/> that can be used to read nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read value.</returns>
-        Task<object?> ReadAsync(Stream stream, GraphBinaryReader reader, CancellationToken cancellationToken = default);
-
-        /// <summary>
-        /// Reads the value from the stream (not the type information).
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="reader">A <see cref="GraphBinaryReader"/> that can be used to read nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read value.</returns>
-        Task<object?> ReadNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-
-        /// <summary>
-        /// Reads the value from the stream (not the type information).
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="reader">A <see cref="GraphBinaryReader"/> that can be used to read nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read value.</returns>
-        Task<object> ReadNonNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ResponseMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ResponseMessageSerializer.cs
deleted file mode 100644
index 49c8ad29e8..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ResponseMessageSerializer.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver.Messages;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Allows to deserialize a <see cref="ResponseMessage{T}"/>.
-    /// </summary>
-    public class ResponseMessageSerializer
-    {
-        /// <summary>
-        /// Reads a response message from the stream.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="reader">A <see cref="GraphBinaryReader"/> that can be used to read nested values.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read response message.</returns>
-        public async Task<ResponseMessage<List<object>>> ReadValueAsync(MemoryStream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var version = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false) & 0xff;
-
-            if (version >> 7 != 1)
-            {
-                // This is an indication that the response stream was incorrectly built
-                // Or the stream offsets are wrong
-                throw new IOException("The most significant bit should be set according to the format");
-            }
-
-            var requestId =
-                (Guid?)await reader.ReadNullableValueAsync<Guid>(stream, cancellationToken).ConfigureAwait(false);
-            var code = (ResponseStatusCode)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var message = (string?)await reader.ReadNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var dictObj = await reader
-                .ReadNonNullableValueAsync<Dictionary<string, object>>(stream, cancellationToken).ConfigureAwait(false);
-            var attributes = (Dictionary<string, object>)dictObj;
-
-            var status = new ResponseStatus(code, attributes, message);
-
-            var meta = (Dictionary<string, object>)await reader
-                .ReadNonNullableValueAsync<Dictionary<string, object>>(stream, cancellationToken).ConfigureAwait(false);
-            var data = (List<object>?)await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var result = new ResponseResult<List<object>>(data, meta);
-
-            return new ResponseMessage<List<object>>(requestId, status, result);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/StreamExtensions.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/StreamExtensions.cs
deleted file mode 100644
index 0b21e9197f..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/StreamExtensions.cs
+++ /dev/null
@@ -1,281 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    ///     Provides extension methods for <see cref="Stream" /> that are mostly useful when implementing GraphBinary
-    ///     serializers.
-    /// </summary>
-    public static class StreamExtensions
-    {
-        /// <summary>
-        ///     Asynchronously writes a <see cref="byte"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="byte"/> to.</param>
-        /// <param name="value">The <see cref="byte"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteByteAsync(this Stream stream, byte value,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteAsync(new[] {value}, 0, 1, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="byte"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="byte"/>.</returns>
-        public static async Task<byte> ReadByteAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            var readBuffer = new byte[1];
-            await stream.ReadAsync(readBuffer, 0, 1, cancellationToken).ConfigureAwait(false);
-            return readBuffer[0];
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="sbyte"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="sbyte"/> to.</param>
-        /// <param name="value">The <see cref="sbyte"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteSByteAsync(this Stream stream, sbyte value,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteByteAsync((byte)value, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="sbyte"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="sbyte"/>.</returns>
-        public static async Task<sbyte> ReadSByteAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            return (sbyte)await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes an <see cref="int"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="int"/> to.</param>
-        /// <param name="value">The <see cref="int"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteIntAsync(this Stream stream, int value,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = BitConverter.GetBytes(value);
-            await stream.WriteAsync(new[] { bytes[3], bytes[2], bytes[1], bytes[0] }, 0, 4, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads an <see cref="int"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="int"/>.</returns>
-        public static async Task<int> ReadIntAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[4];
-            await stream.ReadAsync(bytes, 0, 4, cancellationToken).ConfigureAwait(false);
-            return BitConverter.ToInt32(new []{bytes[3], bytes[2], bytes[1], bytes[0]}, 0);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="long"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="long"/> to.</param>
-        /// <param name="value">The <see cref="long"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteLongAsync(this Stream stream, long value,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = BitConverter.GetBytes(value);
-            await stream
-                .WriteAsync(new[] { bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0] }, 0,
-                    8, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="long"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="long"/>.</returns>
-        public static async Task<long> ReadLongAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[8];
-            await stream.ReadAsync(bytes, 0, 8, cancellationToken).ConfigureAwait(false);
-            return BitConverter.ToInt64(
-                new[] {bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]}, 0);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="float"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="float"/> to.</param>
-        /// <param name="value">The <see cref="float"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteFloatAsync(this Stream stream, float value,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = BitConverter.GetBytes(value);
-            await stream.WriteAsync(new[] { bytes[3], bytes[2], bytes[1], bytes[0] }, 0, 4, cancellationToken)
-                .ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="float"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="float"/>.</returns>
-        public static async Task<float> ReadFloatAsync(this Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[4];
-            await stream.ReadAsync(bytes, 0, 4, cancellationToken).ConfigureAwait(false);
-            return BitConverter.ToSingle(new []{bytes[3], bytes[2], bytes[1], bytes[0]}, 0);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="double"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="double"/> to.</param>
-        /// <param name="value">The <see cref="double"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteDoubleAsync(this Stream stream, double value,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = BitConverter.GetBytes(value);
-            await stream
-                .WriteAsync(new[] {bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]}, 0,
-                    8, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="double"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="double"/>.</returns>
-        public static async Task<double> ReadDoubleAsync(this Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[8];
-            await stream.ReadAsync(bytes, 0, 8, cancellationToken).ConfigureAwait(false);
-            return BitConverter.ToDouble(
-                new[] {bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]}, 0);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="short"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="short"/> to.</param>
-        /// <param name="value">The <see cref="short"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteShortAsync(this Stream stream, short value,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = BitConverter.GetBytes(value);
-            await stream.WriteAsync(new[] { bytes[1], bytes[0] }, 0, 2, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="short"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="short"/>.</returns>
-        public static async Task<short> ReadShortAsync(this Stream stream,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[2];
-            await stream.ReadAsync(bytes, 0, 2, cancellationToken).ConfigureAwait(false);
-            return BitConverter.ToInt16(new []{bytes[1], bytes[0]}, 0);
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="bool"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="bool"/> to.</param>
-        /// <param name="value">The <see cref="bool"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteBoolAsync(this Stream stream, bool value,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteByteAsync((byte)(value ? 1 : 0), cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="bool"/> from a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="bool"/>.</returns>
-        public static async Task<bool> ReadBoolAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            var b = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            return b switch
-            {
-                1 => true,
-                0 => false,
-                _ => throw new IOException($"Cannot read byte {b} as a boolean.")
-            };
-        }
-
-        /// <summary>
-        ///     Asynchronously writes a <see cref="T:byte[]"/> to a <see cref="Stream"/>.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to write the <see cref="T:byte[]"/> to.</param>
-        /// <param name="value">The <see cref="T:byte[]"/> to write.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        public static async Task WriteAsync(this Stream stream, byte[] value,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteAsync(value, 0, value.Length, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        ///     Asynchronously reads a <see cref="T:byte[]"/> from a <see cref="Stream"/> into a buffer.
-        /// </summary>
-        /// <param name="stream">The <see cref="Stream"/> to read from.</param>
-        /// <param name="count">The number of bytes to read.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read <see cref="T:byte[]"/>.</returns>
-        public static async Task<byte[]> ReadAsync(this Stream stream, int count,
-            CancellationToken cancellationToken = default)
-        {
-            var buffer = new byte[count];
-            await stream.ReadAsync(buffer, 0, count, cancellationToken).ConfigureAwait(false);
-            return buffer;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/TypeSerializerRegistry.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/TypeSerializerRegistry.cs
deleted file mode 100644
index acd2edcfc4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/TypeSerializerRegistry.cs
+++ /dev/null
@@ -1,329 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.IO;
-using System.Linq;
-using System.Numerics;
-using Gremlin.Net.Process.Traversal;
-using Gremlin.Net.Process.Traversal.Strategy;
-using Gremlin.Net.Structure.IO.GraphBinary.Types;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary
-{
-    /// <summary>
-    /// Provides GraphBinary serializers for different types.
-    /// </summary>
-    public class TypeSerializerRegistry
-    {
-        private readonly Dictionary<Type, ITypeSerializer> _serializerByType =
-            new Dictionary<Type, ITypeSerializer>
-            {
-                {typeof(int), SingleTypeSerializers.IntSerializer},
-                {typeof(long), SingleTypeSerializers.LongSerializer},
-                {typeof(string), new StringSerializer()},
-                {typeof(DateTimeOffset), new OffsetDateTimeSerializer()},
-                {typeof(GremlinType), new ClassSerializer()},
-                {typeof(Type), new TypeSerializer()},
-                {typeof(double), SingleTypeSerializers.DoubleSerializer},
-                {typeof(float), SingleTypeSerializers.FloatSerializer},
-                {typeof(Guid), new UuidSerializer()},
-                {typeof(Edge), new EdgeSerializer()},
-                {typeof(Path), new PathSerializer()},
-                {typeof(Property), new PropertySerializer()},
-                {typeof(Vertex), new VertexSerializer()},
-                {typeof(VertexProperty), new VertexPropertySerializer()},
-                {typeof(Barrier), EnumSerializers.BarrierSerializer},
-                {typeof(ITraversal), new TraversalSerializer()},
-                {typeof(Cardinality), EnumSerializers.CardinalitySerializer},
-                {typeof(Column), EnumSerializers.ColumnSerializer},
-                {typeof(Direction), EnumSerializers.DirectionSerializer},
-                {typeof(DT), EnumSerializers.DTSerializer},
-                {typeof(GType), EnumSerializers.GTypeSerializer},
-                {typeof(Merge), EnumSerializers.MergeSerializer},
-                {typeof(Operator), EnumSerializers.OperatorSerializer},
-                {typeof(Order), EnumSerializers.OrderSerializer},
-                {typeof(Pick), EnumSerializers.PickSerializer},
-                {typeof(Pop), EnumSerializers.PopSerializer},
-                {typeof(ILambda), new LambdaSerializer()},
-                {typeof(P), new PSerializer(DataType.P)},
-                {typeof(Scope), EnumSerializers.ScopeSerializer},
-                {typeof(T), EnumSerializers.TSerializer},
-                {typeof(Traverser), new TraverserSerializer()},
-                {typeof(decimal), new BigDecimalSerializer()},
-                {typeof(BigInteger), new BigIntegerSerializer()},
-                {typeof(sbyte), SingleTypeSerializers.ByteSerializer},
-                {typeof(byte[]), new ByteBufferSerializer()},
-                {typeof(short), SingleTypeSerializers.ShortSerializer},
-                {typeof(bool), SingleTypeSerializers.BooleanSerializer},
-                {typeof(TextP), new PSerializer(DataType.TextP)},
-                {typeof(AbstractTraversalStrategy), new TraversalStrategySerializer()},
-                {typeof(char), new CharSerializer()},
-                {typeof(TimeSpan), new DurationSerializer()},
-            };
-
-        private readonly Dictionary<DataType, ITypeSerializer> _serializerByDataType =
-            new Dictionary<DataType, ITypeSerializer>
-            {
-                {DataType.Int, SingleTypeSerializers.IntSerializer},
-                {DataType.Long, SingleTypeSerializers.LongSerializer},
-                {DataType.String, new StringSerializer()},
-                {DataType.Date, DateTimeSerializer.DateSerializer},
-                {DataType.Timestamp, DateTimeSerializer.TimestampSerializer},
-                {DataType.Class, new ClassSerializer()},
-                {DataType.Double, SingleTypeSerializers.DoubleSerializer},
-                {DataType.Float, SingleTypeSerializers.FloatSerializer},
-                {DataType.List, new ListSerializer<object>()},
-                {DataType.Map, new MapSerializer<object, object>()},
-                {DataType.Set, new SetSerializer<HashSet<object?>, object>()},
-                {DataType.Uuid, new UuidSerializer()},
-                {DataType.Edge, new EdgeSerializer()},
-                {DataType.Path, new PathSerializer()},
-                {DataType.Property, new PropertySerializer()},
-                {DataType.Vertex, new VertexSerializer()},
-                {DataType.VertexProperty, new VertexPropertySerializer()},
-                {DataType.Barrier, EnumSerializers.BarrierSerializer},
-                {DataType.Cardinality, EnumSerializers.CardinalitySerializer},
-                {DataType.Column, EnumSerializers.ColumnSerializer},
-                {DataType.Direction, EnumSerializers.DirectionSerializer},
-                {DataType.DT, EnumSerializers.DTSerializer},
-                {DataType.GType, EnumSerializers.GTypeSerializer},
-                {DataType.Merge, EnumSerializers.MergeSerializer},
-                {DataType.Operator, EnumSerializers.OperatorSerializer},
-                {DataType.Order, EnumSerializers.OrderSerializer},
-                {DataType.Pick, EnumSerializers.PickSerializer},
-                {DataType.Pop, EnumSerializers.PopSerializer},
-                {DataType.Lambda, new LambdaSerializer()},
-                {DataType.P, new PSerializer(DataType.P)},
-                {DataType.Scope, EnumSerializers.ScopeSerializer},
-                {DataType.T, EnumSerializers.TSerializer},
-                {DataType.Traverser, new TraverserSerializer()},
-                {DataType.BigDecimal, new BigDecimalSerializer()},
-                {DataType.BigInteger, new BigIntegerSerializer()},
-                {DataType.Byte, SingleTypeSerializers.ByteSerializer},
-                {DataType.ByteBuffer, new ByteBufferSerializer()},
-                {DataType.Short, SingleTypeSerializers.ShortSerializer},
-                {DataType.Boolean, SingleTypeSerializers.BooleanSerializer},
-                {DataType.TextP, new PSerializer(DataType.TextP)},
-                {DataType.TraversalStrategy, new TraversalStrategySerializer()},
-                {DataType.BulkSet, new BulkSetSerializer<List<object>>()},
-                {DataType.Char, new CharSerializer()},
-                {DataType.Duration, new DurationSerializer()},
-                {DataType.OffsetDateTime, new OffsetDateTimeSerializer()},
-            };
-
-        private readonly Dictionary<string, CustomTypeSerializer> _serializerByCustomTypeName =
-            new Dictionary<string, CustomTypeSerializer>();
-
-        private TypeSerializerRegistry(List<CustomTypeRegistryEntry> customTypeEntries)
-        {
-            foreach (var entry in customTypeEntries)
-            {
-                _serializerByType[entry.Type] = entry.TypeSerializer;
-                _serializerByCustomTypeName[entry.CustomTypeName] = entry.TypeSerializer;
-            }
-        }
-
-        /// <summary>
-        /// Provides a default <see cref="TypeSerializerRegistry"/> instance.
-        /// </summary>
-        public static readonly TypeSerializerRegistry Instance = Build().Create();
-
-        /// <summary>
-        /// Builds a <see cref="TypeSerializerRegistry"/>.
-        /// </summary>
-        public static Builder Build() => new Builder();
-
-        /// <summary>
-        /// Gets a serializer for the given type of the value to be serialized.
-        /// </summary>
-        /// <param name="valueType">Type of the value to be serialized.</param>
-        /// <returns>A serializer for the provided type.</returns>
-        /// <exception cref="InvalidOperationException">Thrown when no serializer can be found for the type.</exception>
-        public ITypeSerializer GetSerializerFor(Type valueType)
-        {
-            if (_serializerByType.TryGetValue(valueType, out var serializerForType))
-            {
-                return serializerForType;
-            }
-
-            if (IsDictionaryType(valueType, out var dictKeyType, out var dictValueType))
-            {
-                var serializerType = typeof(MapSerializer<,>).MakeGenericType(dictKeyType, dictValueType);
-                var serializer = (ITypeSerializer?) Activator.CreateInstance(serializerType);
-                _serializerByType[valueType] = serializer ??
-                                               throw new IOException(
-                                                   $"Cannot create a serializer for the dictionary type {valueType}.");
-                return serializer;
-            }
-
-            if (IsSetType(valueType))
-            {
-                var memberType = valueType.GetGenericArguments()[0];
-                var serializerType = typeof(SetSerializer<,>).MakeGenericType(valueType, memberType);
-                var serializer = (ITypeSerializer?) Activator.CreateInstance(serializerType);
-                _serializerByType[valueType] = serializer ??
-                                               throw new IOException(
-                                                   $"Cannot create a serializer for the set type {valueType}.");
-                return serializer;
-            }
-
-            if (valueType.IsArray)
-            {
-                var memberType = valueType.GetElementType();
-                var serializerType = typeof(ArraySerializer<>).MakeGenericType(memberType!);
-                var serializer = (ITypeSerializer?) Activator.CreateInstance(serializerType);
-                _serializerByType[valueType] = serializer ??
-                                               throw new IOException(
-                                                   $"Cannot create a serializer for the array type {valueType}.");
-                return serializer;
-            }
-
-            if (IsListType(valueType))
-            {
-                var memberType = valueType.GetGenericArguments()[0];
-                var serializerType = typeof(ListSerializer<>).MakeGenericType(memberType);
-                var serializer = (ITypeSerializer?) Activator.CreateInstance(serializerType);
-                _serializerByType[valueType] = serializer ??
-                                               throw new IOException(
-                                                   $"Cannot create a serializer for the list type {valueType}.");
-                return serializer;
-            }
-
-            foreach (var supportedType in new List<Type>(_serializerByType.Keys))
-            {
-                if (supportedType.IsAssignableFrom(valueType))
-                {
-                    var serializer = _serializerByType[supportedType];
-                    _serializerByType[valueType] = serializer;
-                    return serializer;
-                }
-            }
-
-            throw new InvalidOperationException($"No serializer found for type '{valueType}'.");
-        }
-
-        private static bool IsDictionaryType(Type type, [NotNullWhen(returnValue: true)] out Type? keyType,
-            [NotNullWhen(returnValue: true)] out Type? valueType)
-        {
-            var maybeInterfaceType = type
-                .GetInterfaces()
-                .FirstOrDefault(implementedInterfaceType => implementedInterfaceType.IsConstructedGenericType && implementedInterfaceType.GetGenericTypeDefinition() == typeof(IDictionary<,>));
-
-            if (maybeInterfaceType is { } interfaceType)
-            {
-                keyType = interfaceType.GetGenericArguments()[0];
-                valueType = interfaceType.GetGenericArguments()[1];
-
-                return true;
-            }
-
-            keyType = null;
-            valueType = null;
-
-            return false;
-        }
-
-        private static bool IsSetType(Type type)
-        {
-            return type.GetInterfaces().Any(implementedInterface => implementedInterface.IsConstructedGenericType &&
-                                                                    implementedInterface.GetGenericTypeDefinition() ==
-                                                                    typeof(ISet<>));
-        }
-
-        private static bool IsListType(Type type)
-        {
-            return type.GetInterfaces().Any(implementedInterface => implementedInterface.IsConstructedGenericType &&
-                                                                    implementedInterface.GetGenericTypeDefinition() ==
-                                                                    typeof(IList<>));
-        }
-
-        /// <summary>
-        /// Gets a serializer for the given GraphBinary type.
-        /// </summary>
-        /// <param name="type">The GraphBinary type that should be (de)serialized.</param>
-        /// <returns>A serializer for the provided GraphBinary type.</returns>
-        public ITypeSerializer GetSerializerFor(DataType type)
-        {
-            if (type == DataType.Custom)
-                throw new ArgumentException("Custom type serializers can not be retrieved using this method");
-
-            return _serializerByDataType[type];
-        }
-
-        /// <summary>
-        /// Gets a serializer for the given custom type name.
-        /// </summary>
-        /// <param name="typeName">The custom type name.</param>
-        /// <returns>A serializer for the provided custom type name.</returns>
-        public CustomTypeSerializer GetSerializerForCustomType(string typeName)
-        {
-            return _serializerByCustomTypeName.TryGetValue(typeName, out var serializer)
-                ? serializer
-                : throw new InvalidOperationException($"No serializer found for type '{typeName}'.");
-        }
-
-        /// <summary>
-        /// The builder of a <see cref="TypeSerializerRegistry"/>.
-        /// </summary>
-        public class Builder
-        {
-            private readonly List<CustomTypeRegistryEntry> _list = new List<CustomTypeRegistryEntry>();
-
-            /// <summary>
-            /// Creates the <see cref="TypeSerializerRegistry"/>.
-            /// </summary>
-            public TypeSerializerRegistry Create() => new TypeSerializerRegistry(_list);
-
-            /// <summary>
-            /// Adds a serializer for a custom type.
-            /// </summary>
-            /// <param name="type">The custom type supported by the serializer.</param>
-            /// <param name="serializer">The serializer for the custom type.</param>
-            public Builder AddCustomType(Type type, CustomTypeSerializer serializer)
-            {
-                if (serializer == null) throw new ArgumentNullException(nameof(serializer));
-                if (serializer.TypeName == null)
-                    throw new ArgumentException("serializer custom type name can not be null");
-
-                _list.Add(new CustomTypeRegistryEntry(type, serializer));
-                return this;
-            }
-        }
-
-        private class CustomTypeRegistryEntry
-        {
-            public Type Type { get; }
-            public CustomTypeSerializer TypeSerializer { get; }
-
-            public CustomTypeRegistryEntry(Type type, CustomTypeSerializer typeSerializer)
-            {
-                Type = type;
-                TypeSerializer = typeSerializer;
-            }
-            public string CustomTypeName => TypeSerializer.TypeName;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ArraySerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ArraySerializer.cs
deleted file mode 100644
index 4287cf1d41..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ArraySerializer.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer that serializes .NET arrays to GraphBinary lists.
-    /// </summary>
-    /// <typeparam name="TMember">The type of elements in the array.</typeparam>
-    public class ArraySerializer<TMember> : SimpleTypeSerializer<TMember[]>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ArraySerializer{TMember}" /> class.
-        /// </summary>
-        public ArraySerializer() : base(DataType.List)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(TMember[] value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Length, stream, cancellationToken).ConfigureAwait(false);
-            
-            foreach (var item in value)
-            {
-                await writer.WriteAsync(item, stream, cancellationToken).ConfigureAwait(false);
-            }
-        }
-        
-        /// <summary>
-        /// Currently not supported as GraphBinary has no array data type.
-        /// </summary>
-        protected override Task<TMember[]> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotImplementedException("Reading an array is not supported");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigDecimalSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigDecimalSerializer.cs
deleted file mode 100644
index 672e8c1af4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigDecimalSerializer.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Numerics;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer that serializes <see cref="decimal"/> values as BigDecimal in GraphBinary.
-    /// </summary>
-    public class BigDecimalSerializer : SimpleTypeSerializer<decimal>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="BigDecimalSerializer" /> class.
-        /// </summary>
-        public BigDecimalSerializer() : base(DataType.BigDecimal)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(decimal value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var (unscaledValue, scale) = GetUnscaledValueAndScale(value);
-            await writer.WriteNonNullableValueAsync(scale, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(unscaledValue, stream, cancellationToken).ConfigureAwait(false);
-        }
-        
-        private static (BigInteger, int) GetUnscaledValueAndScale(decimal input)
-        {
-            var parts = decimal.GetBits(input);
-
-            var sign = (parts[3] & 0x80000000) != 0;
-            
-            var scale = (parts[3] >> 16) & 0x7F;
-
-            var lowBytes = BitConverter.GetBytes(parts[0]);
-            var middleBytes = BitConverter.GetBytes(parts[1]);
-            var highBytes = BitConverter.GetBytes(parts[2]);
-            var valueBytes = new byte[12];
-            lowBytes.CopyTo(valueBytes, 0);
-            middleBytes.CopyTo(valueBytes, 4);
-            highBytes.CopyTo(valueBytes, 8);
-            var bigInt = new BigInteger(valueBytes);
-
-            if (sign)
-            {
-                bigInt = -bigInt;
-            }
-            
-            return (bigInt, scale);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<decimal> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var scale = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var unscaled = (BigInteger)await reader.ReadNonNullableValueAsync<BigInteger>(stream, cancellationToken)
-                .ConfigureAwait(false);
-
-            return ConvertScaleAndUnscaledValue(scale, unscaled);
-        }
-
-        private static decimal ConvertScaleAndUnscaledValue(int scale, BigInteger unscaledValue)
-        {
-            return (decimal) unscaledValue * (decimal) Math.Pow(10, -scale);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigIntegerSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigIntegerSerializer.cs
deleted file mode 100644
index 13dd24eb5f..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigIntegerSerializer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Linq;
-using System.Numerics;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for <see cref="BigInteger"/> values.
-    /// </summary>
-    public class BigIntegerSerializer : SimpleTypeSerializer<BigInteger>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="BigIntegerSerializer" /> class.
-        /// </summary>
-        public BigIntegerSerializer() : base(DataType.BigInteger)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(BigInteger value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = value.ToByteArray().Reverse().ToArray();
-            await writer.WriteNonNullableValueAsync(bytes.Length, stream, cancellationToken).ConfigureAwait(false);
-            await stream.WriteAsync(bytes, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<BigInteger> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-            var bytes = await stream.ReadAsync(length, cancellationToken).ConfigureAwait(false);
-            return new BigInteger(bytes.Reverse().ToArray());
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BulkSetSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BulkSetSerializer.cs
deleted file mode 100644
index 63172a546f..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BulkSetSerializer.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for the GraphBinary type BulkSet that gets converted to <typeparamref name="TList"/>.
-    /// </summary>
-    /// <typeparam name="TList">The type of the list to convert the BulkSet into.</typeparam>
-    public class BulkSetSerializer<TList> : SimpleTypeSerializer<TList>
-        where TList : IList, new()
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="BulkSetSerializer{TList}" /> class.
-        /// </summary>
-        public BulkSetSerializer() : base(DataType.BulkSet)
-        {
-        }
-
-        
-        /// <summary>
-        /// Currently not supported.
-        /// </summary>
-        protected override Task WriteValueAsync(TList value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            throw new System.NotImplementedException("Writing a BulkSet is not supported");
-        }
-
-        /// <inheritdoc />
-        protected override async Task<TList> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-
-            var result = new TList();
-            for (var i = 0; i < length; i++)
-            {
-                var value = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-                var bulk = (long)await reader.ReadNonNullableValueAsync<long>(stream, cancellationToken)
-                    .ConfigureAwait(false);
-                for (var j = 0; j < bulk; j++)
-                {
-                    result.Add(value);
-                }
-            }
-
-            return result;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ByteBufferSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ByteBufferSerializer.cs
deleted file mode 100644
index f18c9204f4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ByteBufferSerializer.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    
-    /// <summary>
-    /// A serializer for byte[].
-    /// </summary>
-    public class ByteBufferSerializer : SimpleTypeSerializer<byte[]>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ByteBufferSerializer" /> class.
-        /// </summary>
-        public ByteBufferSerializer() : base(DataType.ByteBuffer)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(byte[] value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Length, stream, cancellationToken).ConfigureAwait(false);
-            await stream.WriteAsync(value, 0, value.Length, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<byte[]> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-            var buffer = new byte[length];
-            await stream.ReadAsync(buffer, 0, length, cancellationToken).ConfigureAwait(false);
-            return buffer;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CharSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CharSerializer.cs
deleted file mode 100644
index 95a311b5d5..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CharSerializer.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="char"/> serializer.
-    /// </summary>
-    public class CharSerializer : SimpleTypeSerializer<char>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="CharSerializer" /> class.
-        /// </summary>
-        public CharSerializer() : base(DataType.Char)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(char value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = Encoding.UTF8.GetBytes(value.ToString());
-            await stream.WriteAsync(bytes, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<char> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var firstByte = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            var byteLength = 1;
-            // A byte with the first byte ON (10000000) signals that more bytes are needed to represent the UTF-8 char
-            if ((firstByte & 0x80) > 0)
-            {
-                if ((firstByte & 0xf0) == 0xf0)
-                { // 0xf0 = 11110000
-                    byteLength = 4;
-                } else if ((firstByte & 0xe0) == 0xe0)
-                { //11100000
-                    byteLength = 3;
-                } else if ((firstByte & 0xc0) == 0xc0)
-                { //11000000
-                    byteLength = 2;
-                }
-            }
-
-            byte[] bytes;
-            if (byteLength == 1)
-            {
-                bytes = new[] {firstByte};
-            }
-            else
-            {
-                bytes = new byte[byteLength];
-                bytes[0] = firstByte;
-                await stream.ReadAsync(bytes, 1, byteLength - 1, cancellationToken).ConfigureAwait(false);
-            }
-
-            return Encoding.UTF8.GetChars(bytes)[0];
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ClassSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ClassSerializer.cs
deleted file mode 100644
index 39d678cba1..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ClassSerializer.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for the GraphBinary type class that takes <see cref="GremlinType"/> objects as their .NET
-    /// representation. 
-    /// </summary>
-    public class ClassSerializer : SimpleTypeSerializer<GremlinType>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ClassSerializer" /> class.
-        /// </summary>
-        public ClassSerializer() : base(DataType.Class)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(GremlinType value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Fqcn, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        
-        /// <summary>
-        /// Currently not supported.
-        /// </summary>
-        protected override Task<GremlinType> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotImplementedException("Reading a Class is not supported");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CustomTypeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CustomTypeSerializer.cs
deleted file mode 100644
index 69aaeaf0ab..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CustomTypeSerializer.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// The interface to implement for serializers of custom types.
-    /// </summary>
-    public abstract class CustomTypeSerializer : ITypeSerializer
-    {
-        /// <summary>
-        /// Gets the custom type name.
-        /// </summary>
-        public abstract string TypeName { get; }
-
-        /// <inheritdoc />
-        public DataType DataType => DataType.Custom;
-
-        /// <inheritdoc />
-        public abstract Task WriteAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public abstract Task WriteNullableValueAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public abstract Task WriteNonNullableValueAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public abstract Task<object?> ReadAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public abstract Task<object?> ReadNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public abstract Task<object> ReadNonNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DateTimeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DateTimeSerializer.cs
deleted file mode 100644
index e2af3ae962..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DateTimeSerializer.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for the GraphBinary types Date and Timestamp. Both are represented as <see cref="DateTimeOffset"/>
-    /// in .NET.
-    /// </summary>
-    public class DateTimeSerializer : SimpleTypeSerializer<DateTimeOffset>
-    {
-        /// <summary>
-        /// A serializer for the GraphBinary type Date, represented as <see cref="DateTimeOffset"/> in .NET.
-        /// </summary>
-        public static readonly DateTimeSerializer DateSerializer = new DateTimeSerializer(DataType.Date);
-
-        /// <summary>
-        /// A serializer for the GraphBinary type Timestamp, represented as <see cref="DateTimeOffset"/> in .NET.
-        /// </summary>
-        public static readonly DateTimeSerializer TimestampSerializer =
-            new DateTimeSerializer(DataType.Timestamp);
-        
-        private DateTimeSerializer(DataType dataType) : base(dataType)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(DateTimeOffset value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteLongAsync(value.ToUnixTimeMilliseconds(), cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<DateTimeOffset> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            return DateTimeOffset.FromUnixTimeMilliseconds(await stream.ReadLongAsync(cancellationToken)
-                .ConfigureAwait(false));
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DurationSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DurationSerializer.cs
deleted file mode 100644
index 063a86a82d..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DurationSerializer.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer that serializes <see cref="TimeSpan"/> values as Duration in GraphBinary.
-    /// </summary>
-    public class DurationSerializer : SimpleTypeSerializer<TimeSpan>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="DurationSerializer" /> class.
-        /// </summary>
-        public DurationSerializer() : base(DataType.Duration)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(TimeSpan value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteLongAsync((long) value.TotalSeconds, cancellationToken).ConfigureAwait(false);
-            await stream.WriteIntAsync(value.Milliseconds * 1_000_000, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<TimeSpan> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var seconds = await stream.ReadLongAsync(cancellationToken).ConfigureAwait(false);
-            var nanoseconds = await stream.ReadIntAsync(cancellationToken).ConfigureAwait(false);
-
-            return TimeSpan.FromSeconds(seconds) + TimeSpan.FromMilliseconds(nanoseconds / 1_000_000);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EdgeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EdgeSerializer.cs
deleted file mode 100644
index b169778dcc..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EdgeSerializer.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// An <see cref="Edge"/> serializer.
-    /// </summary>
-    public class EdgeSerializer : SimpleTypeSerializer<Edge>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="EdgeSerializer" /> class.
-        /// </summary>
-        public EdgeSerializer() : base(DataType.Edge)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Edge value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteAsync(value.Id, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.Label, stream, cancellationToken).ConfigureAwait(false);
-
-            await writer.WriteAsync(value.InV.Id, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.InV.Label, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(value.OutV.Id, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.OutV.Label, stream, cancellationToken).ConfigureAwait(false);
-
-            // Placeholder for the parent vertex
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-
-            // placeholder for the properties
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Edge> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var id = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var label = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-
-            var inV = new Vertex(await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false),
-                (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken).ConfigureAwait(false));
-            var outV = new Vertex(await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false),
-                (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken).ConfigureAwait(false));
-
-            // discard possible parent vertex
-            await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-
-            var properties = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var propertiesAsArray = null == properties ? Array.Empty<object>() : (properties as List<object>)?.ToArray();
-
-            return new Edge(id, outV, label, inV, propertiesAsArray);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EnumSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EnumSerializer.cs
deleted file mode 100644
index 468172905c..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EnumSerializer.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-using Barrier = Gremlin.Net.Process.Traversal.Barrier;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// Provides serializers for enum types.
-    /// </summary>
-    public static class EnumSerializers
-    {
-        /// <summary>
-        /// A serializer for <see cref="Process.Traversal.Barrier"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Barrier> BarrierSerializer =
-            new EnumSerializer<Barrier>(DataType.Barrier, Barrier.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Cardinality"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Cardinality> CardinalitySerializer =
-            new EnumSerializer<Cardinality>(DataType.Cardinality, Cardinality.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Column"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Column> ColumnSerializer =
-            new EnumSerializer<Column>(DataType.Column, Column.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Direction"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Direction> DirectionSerializer =
-            new EnumSerializer<Direction>(DataType.Direction, Direction.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="DT"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<DT> DTSerializer =
-            new EnumSerializer<DT>(DataType.DT, DT.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Merge"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Merge> MergeSerializer =
-            new EnumSerializer<Merge>(DataType.Merge, Merge.GetByValue);
-        
-        /// <summary>
-        /// A serializer for <see cref="GType"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<GType> GTypeSerializer =
-            new EnumSerializer<GType>(DataType.GType, GType.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Operator"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Operator> OperatorSerializer =
-            new EnumSerializer<Operator>(DataType.Operator, Operator.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Order"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Order> OrderSerializer =
-            new EnumSerializer<Order>(DataType.Order, Order.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Pick"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Pick> PickSerializer =
-            new EnumSerializer<Pick>(DataType.Pick, Pick.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Pop"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Pop> PopSerializer =
-            new EnumSerializer<Pop>(DataType.Pop, Pop.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="Scope"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<Scope> ScopeSerializer =
-            new EnumSerializer<Scope>(DataType.Scope, Scope.GetByValue);
-
-        /// <summary>
-        /// A serializer for <see cref="T"/> values.
-        /// </summary>
-        public static readonly EnumSerializer<T> TSerializer =
-            new EnumSerializer<T>(DataType.T, T.GetByValue);
-    }
-
-    /// <summary>
-    /// Generalized serializer for enum types.
-    /// </summary>
-    /// <typeparam name="TEnum">The type of the enum to serialize.</typeparam>
-    public class EnumSerializer<TEnum> : SimpleTypeSerializer<TEnum>
-        where TEnum : EnumWrapper
-    {
-        private readonly Func<string, TEnum> _readFunc;
-
-        internal EnumSerializer(DataType dataType, Func<string, TEnum> readFunc) : base(dataType)
-        {
-            _readFunc = readFunc;
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(TEnum value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteAsync(value.EnumValue, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<TEnum> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            // This should probably be `reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)` instead,
-            // but it's the same in other GLVs and changing this would be a breaking change for the GraphBinary format.
-            var enumValue = (string?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            if (enumValue == null) throw new IOException($"Read null as a value for {DataType}");
-            return _readFunc.Invoke(enumValue);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/GremlinType.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/GremlinType.cs
deleted file mode 100644
index a9faa31d73..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/GremlinType.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    ///     Represents the GraphBinary type Class which can be used to serialize a class.
-    /// </summary>
-    public class GremlinType
-    {
-        /// <summary>
-        /// Gets the fully qualified class name that identifies the class in Java.
-        /// </summary>
-        public string Fqcn { get; }
-
-        private GremlinType(string fqcn)
-        {
-            Fqcn = fqcn;
-        }
-
-        /// <summary>
-        /// Creates a GremlinType for this fully qualified class name (fqcn).
-        /// </summary>
-        public static GremlinType FromFqcn(string fqcn)
-        {
-            return new GremlinType(fqcn);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/LambdaSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/LambdaSerializer.cs
deleted file mode 100644
index 62600d5caa..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/LambdaSerializer.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for lambdas.
-    /// </summary>
-    public class LambdaSerializer : SimpleTypeSerializer<ILambda>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="LambdaSerializer" /> class.
-        /// </summary>
-        public LambdaSerializer() : base(DataType.Lambda)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(ILambda value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Language, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.LambdaExpression, stream, cancellationToken)
-                .ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.Arguments, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<ILambda> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var language = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var expression = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            
-            // discard the arguments
-            await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-
-            return new StringBasedLambda(expression, language);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ListSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ListSerializer.cs
deleted file mode 100644
index b1978e64dd..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ListSerializer.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A generic list serializer.
-    /// </summary>
-    /// <typeparam name="TMember">The type of elements in the list.</typeparam>
-    public class ListSerializer<TMember> : SimpleTypeSerializer<IList<TMember?>>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="ListSerializer{TList}" /> class.
-        /// </summary>
-        public ListSerializer() : base(DataType.List)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(IList<TMember?> value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Count, stream, cancellationToken).ConfigureAwait(false);
-            
-            foreach (var item in value)
-            {
-                await writer.WriteAsync(item, stream, cancellationToken).ConfigureAwait(false);
-            }
-        }
-
-        /// <inheritdoc />
-        protected override async Task<IList<TMember?>> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-            var result = new List<TMember?>(length);
-            for (var i = 0; i < length; i++)
-            {
-                result.Add((TMember?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false));
-            }
-
-            return result;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/MapSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/MapSerializer.cs
deleted file mode 100644
index eb52e57bd6..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/MapSerializer.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A generic dictionary serializer.
-    /// </summary>
-    /// <typeparam name="TKey">The type of keys in the dictionary.</typeparam>
-    /// <typeparam name="TValue">The type of values in the dictionary.</typeparam>
-    public class MapSerializer<TKey, TValue> : SimpleTypeSerializer<IDictionary<TKey, TValue?>> where TKey : notnull
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="MapSerializer{TKey, TValue}" /> class.
-        /// </summary>
-        public MapSerializer() : base(DataType.Map)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(IDictionary<TKey, TValue?> value, Stream stream,
-            GraphBinaryWriter writer, CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Count, stream, cancellationToken).ConfigureAwait(false);
-
-            foreach (var key in value.Keys)
-            {
-                await writer.WriteAsync(key, stream, cancellationToken).ConfigureAwait(false);
-                await writer.WriteAsync(value[key], stream, cancellationToken).ConfigureAwait(false);
-            }
-        }
-
-        /// <inheritdoc />
-        protected override async Task<IDictionary<TKey, TValue?>> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = await stream.ReadIntAsync(cancellationToken).ConfigureAwait(false);
-            var result = new Dictionary<TKey, TValue?>(length);
-            
-            for (var i = 0; i < length; i++)
-            {
-                var key = (TKey?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-                if (key == null) throw new IOException("Read null as the key for a dictionary.");
-                var value = (TValue?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-                result.Add(key, value);
-            }
-
-            return result;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/OffsetDateTimeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/OffsetDateTimeSerializer.cs
deleted file mode 100644
index 32ea7b0af1..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/OffsetDateTimeSerializer.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for the GraphBinary type OffsetDateTime, represented as <see cref="DateTimeOffset"/>
-    /// in .NET.
-    /// </summary>
-    public class OffsetDateTimeSerializer : SimpleTypeSerializer<DateTimeOffset>
-    {
-        
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="OffsetDateTimeSerializer" /> class.
-        /// </summary>
-        public OffsetDateTimeSerializer() : base(DataType.OffsetDateTime)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(DateTimeOffset value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await stream.WriteIntAsync(value.Year, cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(Convert.ToByte(value.Month), cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(Convert.ToByte(value.Day), cancellationToken).ConfigureAwait(false);
-            // Note that nanosecond precisions were added after .NET 7
-            // Get the time of day as TimeSpan
-            var timeOfDay = value.TimeOfDay; 
-            // Convert ticks to nanoseconds (1 tick = 100 nanoseconds)
-            var ns = timeOfDay.Ticks * 100;
-            await stream.WriteLongAsync(Convert.ToInt64(ns), cancellationToken).ConfigureAwait(false);
-
-            var offset = value.Offset;
-            var os = offset.Hours * 60 * 60 + offset.Minutes * 60 + offset.Seconds;
-            await stream.WriteIntAsync(os, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<DateTimeOffset> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var year = await stream.ReadIntAsync(cancellationToken).ConfigureAwait(false);
-            var month = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            var day = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            var ns = await stream.ReadLongAsync(cancellationToken).ConfigureAwait(false);
-            var timeDelta = TimeSpan.FromMilliseconds(ns / 1e6);
-            
-            var os = await stream.ReadIntAsync(cancellationToken).ConfigureAwait(false);
-            var offset = TimeSpan.FromSeconds(os);
-
-            return new DateTimeOffset(year, Convert.ToInt32(month), Convert.ToInt32(day), 0, 0, 0, offset).Add(timeDelta);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PSerializer.cs
deleted file mode 100644
index 9cd7d4981a..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PSerializer.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="P"/> serializer.
-    /// </summary>
-    public class PSerializer : SimpleTypeSerializer<P>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="PSerializer" /> class.
-        /// </summary>
-        public PSerializer(DataType typeOfP) : base(typeOfP)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(P value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            ICollection args = value.Value is ICollection ? value.Value : new List<object> {value.Value};
-
-            var argsLength = value.Other == null ? args.Count : args.Count + 1;
-
-            await writer.WriteNonNullableValueAsync(value.OperatorName, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(argsLength, stream, cancellationToken).ConfigureAwait(false);
-
-            foreach (var arg in args)
-            {
-                await writer.WriteAsync(arg, stream, cancellationToken).ConfigureAwait(false);
-            }
-
-            if (value.Other != null)
-            {
-                await writer.WriteAsync(value.Other, stream, cancellationToken).ConfigureAwait(false);
-            }
-        }
-
-        /// <inheritdoc />
-        protected override async Task<P> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var operatorName = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var argsLength =
-                (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-
-            var args = new object?[argsLength];
-            for (var i = 0; i < argsLength; i++)
-            {
-                args[i] = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            }
-
-            if (operatorName == "and" || operatorName == "or")
-            {
-                
-                return new P(operatorName, SafelyCastToP(args[0]), SafelyCastToP(args[1]));
-            }
-
-            if (operatorName == "not")
-            {
-                return new P(operatorName, SafelyCastToP(args[0]));
-            }
-
-            if (argsLength == 1)
-            {
-                if (DataType == DataType.TextP)
-                {
-                    return new TextP(operatorName,
-                        (string?) args[0] ?? throw new IOException("Read null but expected a string"));
-                }
-                return new P(operatorName, args[0]);
-            }
-            return new P(operatorName, args);
-        }
-        
-        private static P SafelyCastToP([NotNull] object? pObject)
-        {
-            if (pObject == null) throw new IOException("Read null but expected P");
-            return (P) pObject;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PathSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PathSerializer.cs
deleted file mode 100644
index c08d157782..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PathSerializer.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="Path"/> serializer.
-    /// </summary>
-    public class PathSerializer : SimpleTypeSerializer<Path>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="PathSerializer" /> class.
-        /// </summary>
-        public PathSerializer() : base(DataType.Path)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Path value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteAsync(value.Labels, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(value.Objects, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Path> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var readLabelObjects =
-                (List<object>?)await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            if (readLabelObjects == null) throw new IOException("Read null, but expected a list of labels");
-            var labels = new List<ISet<string>>();
-            foreach (var labelObjectList in readLabelObjects)
-            {
-                var labelSet = new HashSet<string>();
-                foreach (var labelObj in (HashSet<object>) labelObjectList)
-                {
-                    labelSet.Add((string) labelObj);
-                }
-                labels.Add(labelSet);
-            }
-            
-            var objects = (List<object?>?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            if (objects == null) throw new IOException("Read null, but expected a list of objects");
-            return new Path(labels, objects);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PropertySerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PropertySerializer.cs
deleted file mode 100644
index 818992acce..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PropertySerializer.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="Property"/> serializer.
-    /// </summary>
-    public class 
-        PropertySerializer : SimpleTypeSerializer<Property>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="PropertySerializer" /> class.
-        /// </summary>
-        public PropertySerializer() : base(DataType.Property)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Property value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Key, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(value.Value, stream, cancellationToken).ConfigureAwait(false);
-            
-            // placeholder for the parent element
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Property> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var p = new Property(
-                (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken).ConfigureAwait(false),
-                await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false));
-
-            // discard parent element
-            await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            
-            return p;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SetSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SetSerializer.cs
deleted file mode 100644
index 7d463390d4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SetSerializer.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A generic set serializer.
-    /// </summary>
-    /// <typeparam name="TSet">The type of the set to serialize.</typeparam>
-    /// <typeparam name="TMember">The type of elements in the set.</typeparam>
-    public class SetSerializer<TSet, TMember> : SimpleTypeSerializer<TSet>
-        where TSet : ISet<TMember?>, new()
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="SetSerializer{TSet,TMember}" /> class.
-        /// </summary>
-        public SetSerializer() : base(DataType.Set)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(TSet value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var enumerable = (IEnumerable) value;
-            var list = enumerable.Cast<object>().ToList();
-
-            await writer.WriteNonNullableValueAsync(list.Count, stream, cancellationToken).ConfigureAwait(false);
-            
-            foreach (var item in list)
-            {
-                await writer.WriteAsync(item, stream, cancellationToken).ConfigureAwait(false);
-            }
-        }
-
-        /// <inheritdoc />
-        protected override async Task<TSet> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-            var result = new TSet();
-            for (var i = 0; i < length; i++)
-            {
-                result.Add((TMember?) await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false));
-            }
-
-            return result;
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SimpleTypeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SimpleTypeSerializer.cs
deleted file mode 100644
index 8514b2b0df..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SimpleTypeSerializer.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// Base class for serialization of types that don't contain type specific information only {type_code},
-    /// {value_flag} and {value}.
-    /// </summary>
-    /// <typeparam name="T">The supported type.</typeparam>
-    public abstract class SimpleTypeSerializer<T> : ITypeSerializer
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="SimpleTypeSerializer{T}" /> class.
-        /// </summary>
-        protected SimpleTypeSerializer(DataType dataType)
-        {
-            DataType = dataType;
-        }
-
-        /// <inheritdoc />
-        public DataType DataType { get; }
-
-        /// <inheritdoc />
-        public async Task WriteAsync(object? value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await WriteNullableValueAsync((T?) value, stream, writer, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        public async Task WriteNullableValueAsync(object? value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            if (value == null)
-            {
-                await writer.WriteValueFlagNullAsync(stream, cancellationToken).ConfigureAwait(false);
-                return;
-            }
-
-            await writer.WriteValueFlagNoneAsync(stream, cancellationToken).ConfigureAwait(false);
-
-            await WriteValueAsync((T) value, stream, writer, cancellationToken).ConfigureAwait(false);
-        }
-        
-        /// <inheritdoc />
-        public async Task WriteNonNullableValueAsync(object value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await WriteValueAsync((T) value, stream, writer, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Writes a non-nullable value into a stream.
-        /// </summary>
-        /// <param name="value">The value to write.</param>
-        /// <param name="stream">The stream to write to.</param>
-        /// <param name="writer">A <see cref="GraphBinaryWriter"/>.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>A task that represents the asynchronous write operation.</returns>
-        protected abstract Task WriteValueAsync(T value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default);
-
-        /// <inheritdoc />
-        public async Task<object?> ReadAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            return await ReadNullableValueAsync(stream, reader, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        public async Task<object?> ReadNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var valueFlag = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            if ((valueFlag & 1) == 1)
-            {
-                return null;
-            }
-
-            return await ReadValueAsync(stream, reader, cancellationToken).ConfigureAwait(false);
-        }
-        
-        /// <inheritdoc />
-        public async Task<object> ReadNonNullableValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            return (await ReadValueAsync(stream, reader, cancellationToken).ConfigureAwait(false))!;
-        }
-
-        /// <summary>
-        /// Reads a non-nullable value according to the type format.
-        /// </summary>
-        /// <param name="stream">The GraphBinary data to parse.</param>
-        /// <param name="reader">A <see cref="GraphBinaryReader"/>.</param>
-        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
-        /// <returns>The read value.</returns>
-        protected abstract Task<T> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default);
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SingleTypeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SingleTypeSerializer.cs
deleted file mode 100644
index a3894fe7f0..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SingleTypeSerializer.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// Provides serializers for types that can be represented as a single value and that can be read and write in a
-    /// single operation.
-    /// </summary>
-    public static class SingleTypeSerializers
-    {
-        /// <summary>
-        /// A serializer for <see cref="int"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<int> IntSerializer = new SingleTypeSerializer<int>(DataType.Int,
-            (value, stream, cancellationToken) => stream.WriteIntAsync(value, cancellationToken),
-            (stream, cancellationToken) => stream.ReadIntAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="long"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<long> LongSerializer = new SingleTypeSerializer<long>(DataType.Long,
-            (value, stream, cancellationToken) => stream.WriteLongAsync(value, cancellationToken),
-            (stream, cancellationToken) => stream.ReadLongAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="double"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<double> DoubleSerializer =
-            new SingleTypeSerializer<double>(DataType.Double,
-                (value, stream, cancellationToken) => stream.WriteDoubleAsync(value, cancellationToken),
-                (stream, cancellationToken) => stream.ReadDoubleAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="float"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<float> FloatSerializer =
-            new SingleTypeSerializer<float>(DataType.Float,
-                (value, stream, cancellationToken) => stream.WriteFloatAsync(value, cancellationToken),
-                (stream, cancellationToken) => stream.ReadFloatAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="short"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<short> ShortSerializer =
-            new SingleTypeSerializer<short>(DataType.Short,
-                (value, stream, cancellationToken) => stream.WriteShortAsync(value, cancellationToken),
-                (stream, cancellationToken) => stream.ReadShortAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="bool"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<bool> BooleanSerializer =
-            new SingleTypeSerializer<bool>(DataType.Boolean,
-                (value, stream, cancellationToken) => stream.WriteBoolAsync(value, cancellationToken),
-                (stream, cancellationToken) => stream.ReadBoolAsync(cancellationToken));
-
-        /// <summary>
-        /// A serializer for <see cref="sbyte"/> values.
-        /// </summary>
-        public static readonly SingleTypeSerializer<sbyte> ByteSerializer = new SingleTypeSerializer<sbyte>(DataType.Byte,
-            (value, stream, cancellationToken) => stream.WriteSByteAsync(value, cancellationToken),
-            (stream, cancellationToken) => stream.ReadSByteAsync(cancellationToken));
-    }
-    
-    /// <summary>
-    /// Represents a serializer for types that can be represented as a single value and that can be read and write in a
-    /// single operation.
-    /// </summary>
-    public class SingleTypeSerializer<T> : SimpleTypeSerializer<T>
-    {
-        private readonly Func<T, Stream, CancellationToken, Task> _writeFunc;
-        private readonly Func<Stream, CancellationToken, Task<T>> _readFunc;
-
-        internal SingleTypeSerializer(DataType dataType, Func<T, Stream, CancellationToken, Task> writeFunc,
-            Func<Stream, CancellationToken, Task<T>> readFunc)
-            : base(dataType)
-        {
-            _writeFunc = writeFunc;
-            _readFunc = readFunc;
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(T value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await _writeFunc.Invoke(value, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<T> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            return await _readFunc.Invoke(stream, cancellationToken).ConfigureAwait(false);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/StringSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/StringSerializer.cs
deleted file mode 100644
index 4ab438311b..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/StringSerializer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="string"/> serializer.
-    /// </summary>
-    public class StringSerializer : SimpleTypeSerializer<string>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="StringSerializer" /> class.
-        /// </summary>
-        public StringSerializer() : base(DataType.String)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(string value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = Encoding.UTF8.GetBytes(value);
-            await writer.WriteNonNullableValueAsync(bytes.Length, stream, cancellationToken).ConfigureAwait(false);
-            await stream.WriteAsync(bytes, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<string> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var length = (int)await reader.ReadNonNullableValueAsync<int>(stream, cancellationToken).ConfigureAwait(false);
-            var bytes = new byte[length];
-            await stream.ReadAsync(bytes, 0, length, cancellationToken).ConfigureAwait(false);
-            return Encoding.UTF8.GetString(bytes);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalSerializer.cs
deleted file mode 100644
index 64ddc961c8..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalSerializer.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A traversal serializer.
-    /// </summary>
-    public class TraversalSerializer : SimpleTypeSerializer<ITraversal>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="TraversalSerializer" /> class.
-        /// </summary>
-        public TraversalSerializer() : base(DataType.FromTypeCode(0x15))
-        {
-        }
-
-        /// <inheritdoc />
-        protected override Task WriteValueAsync(ITraversal value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotSupportedException("Traversal serialization via GraphBinary is no longer supported. Use GremlinLang instead.");
-        }
-
-        /// <summary>
-        /// Currently not supported.
-        /// </summary>
-        protected override Task<ITraversal> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotImplementedException("Reading a traversal is not supported");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalStrategySerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalStrategySerializer.cs
deleted file mode 100644
index ff5eebc50b..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalStrategySerializer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal.Strategy;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A traversal strategy serializer.
-    /// </summary>
-    public class TraversalStrategySerializer : SimpleTypeSerializer<AbstractTraversalStrategy>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="TraversalStrategySerializer" /> class.
-        /// </summary>
-        public TraversalStrategySerializer() : base(DataType.TraversalStrategy)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(AbstractTraversalStrategy value, Stream stream,
-            GraphBinaryWriter writer, CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(GremlinType.FromFqcn(value.Fqcn), stream, cancellationToken)
-                .ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.Configuration, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Currently not supported.
-        /// </summary>
-        protected override Task<AbstractTraversalStrategy> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotImplementedException("Reading a TraversalStrategy is not supported");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraverserSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraverserSerializer.cs
deleted file mode 100644
index 04b5727905..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraverserSerializer.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="Traverser"/> serializer.
-    /// </summary>
-    public class TraverserSerializer : SimpleTypeSerializer<Traverser>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="TraverserSerializer" /> class.
-        /// </summary>
-        public TraverserSerializer() : base(DataType.Traverser)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Traverser value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteNonNullableValueAsync(value.Bulk, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(value.Object, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Traverser> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var bulk = (long)await reader.ReadNonNullableValueAsync<long>(stream, cancellationToken).ConfigureAwait(false);
-            var v = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            return new Traverser(v, bulk);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TypeSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TypeSerializer.cs
deleted file mode 100644
index d614d7438b..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TypeSerializer.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal.Strategy;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer for .NET types represented as Class in GraphBinary. Currently only
-    /// <see cref="AbstractTraversalStrategy"/> types are supported.
-    /// </summary>
-    public class TypeSerializer : SimpleTypeSerializer<Type>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="TypeSerializer" /> class.
-        /// </summary>
-        public TypeSerializer() : base(DataType.Class)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Type value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            if (typeof(AbstractTraversalStrategy).IsAssignableFrom(value))
-            {
-                var strategyInstance = (AbstractTraversalStrategy?)Activator.CreateInstance(value) ??
-                                       throw new IOException(
-                                           $"Cannot write the strategy {value} because an instance of that strategy could not be created");
-                await writer.WriteNonNullableValueAsync(strategyInstance.Fqcn, stream, cancellationToken)
-                    .ConfigureAwait(false);
-            }
-            else
-            {
-                throw new IOException("Currently, writing of Types is only supported for traversal strategies.");
-            }
-        }
-
-        /// <summary>
-        /// Currently not supported.
-        /// </summary>
-        protected override Task<Type> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            throw new NotImplementedException("Reading a Type is not supported");
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/UuidSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/UuidSerializer.cs
deleted file mode 100644
index 9ade8ad3f4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/UuidSerializer.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A serializer that serializes <see cref="Guid"/> values as Uuid in GraphBinary.
-    /// </summary>
-    public class UuidSerializer : SimpleTypeSerializer<Guid>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="UuidSerializer" /> class.
-        /// </summary>
-        public UuidSerializer() : base(DataType.Uuid)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Guid value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = value.ToByteArray();
-            
-            // first 4 bytes in reverse order:
-            await stream.WriteByteAsync(bytes[3], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[2], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[1], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[0], cancellationToken).ConfigureAwait(false);
-            
-            // 2 bytes in reverse order:
-            await stream.WriteByteAsync(bytes[5], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[4], cancellationToken).ConfigureAwait(false);
-            
-            // 3 bytes in reverse order:
-            await stream.WriteByteAsync(bytes[7], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[6], cancellationToken).ConfigureAwait(false);
-            
-            // 3 bytes:
-            await stream.WriteByteAsync(bytes[8], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[9], cancellationToken).ConfigureAwait(false);
-            
-            // last 6 bytes:
-            await stream.WriteByteAsync(bytes[10], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[11], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[12], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[13], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[14], cancellationToken).ConfigureAwait(false);
-            await stream.WriteByteAsync(bytes[15], cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Guid> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var bytes = new byte[16];
-
-            // first 4 bytes in reverse order:
-            bytes[3] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[2] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[1] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[0] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            
-            // 2 bytes in reverse order:
-            bytes[5] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[4] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            
-            // 2 bytes in reverse order:
-            bytes[7] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[6] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            
-            // 2 bytes:
-            bytes[8] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[9] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            
-            // last 6 bytes:
-            bytes[10] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[11] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[12] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[13] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[14] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            bytes[15] = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
-            
-            return new Guid(bytes);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexPropertySerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexPropertySerializer.cs
deleted file mode 100644
index b756662500..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexPropertySerializer.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="VertexProperty"/> serializer.
-    /// </summary>
-    public class VertexPropertySerializer : SimpleTypeSerializer<VertexProperty>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="VertexPropertySerializer" /> class.
-        /// </summary>
-        public VertexPropertySerializer() : base(DataType.VertexProperty)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(VertexProperty value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteAsync(value.Id, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.Label, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(value.Value, stream, cancellationToken).ConfigureAwait(false);
-            
-            // placeholder for the parent vertex
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-            
-            // placeholder for properties
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<VertexProperty> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var id = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var label = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken)
-                .ConfigureAwait(false);
-            var value = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-
-            // discard the parent vertex
-            await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-
-            var properties = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var propertiesAsArray = null == properties ? Array.Empty<object>() : (properties as List<object>)?.ToArray();
-
-            return new VertexProperty(id, label, value, null, propertiesAsArray);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexSerializer.cs
deleted file mode 100644
index 2e320babb4..0000000000
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexSerializer.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Gremlin.Net.Structure.IO.GraphBinary.Types
-{
-    /// <summary>
-    /// A <see cref="Vertex"/> serializer.
-    /// </summary>
-    public class VertexSerializer : SimpleTypeSerializer<Vertex>
-    {
-        /// <summary>
-        ///     Initializes a new instance of the <see cref="VertexSerializer" /> class.
-        /// </summary>
-        public VertexSerializer() : base(DataType.Vertex)
-        {
-        }
-
-        /// <inheritdoc />
-        protected override async Task WriteValueAsync(Vertex value, Stream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
-        {
-            await writer.WriteAsync(value.Id, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(value.Label, stream, cancellationToken).ConfigureAwait(false);
-            await writer.WriteAsync(null, stream, cancellationToken).ConfigureAwait(false);
-        }
-
-        /// <inheritdoc />
-        protected override async Task<Vertex> ReadValueAsync(Stream stream, GraphBinaryReader reader,
-            CancellationToken cancellationToken = default)
-        {
-            var id = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var label = (string)await reader.ReadNonNullableValueAsync<string>(stream, cancellationToken).ConfigureAwait(false);
-
-            var properties = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
-            var propertiesAsArray = null == properties ? Array.Empty<object>() : (properties as List<object>)?.ToArray();
-
-            return new Vertex(id, label, propertiesAsArray);
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinary4MessageSerializer.cs
similarity index 54%
rename from gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryMessageSerializer.cs
rename to gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinary4MessageSerializer.cs
index 405c667621..6f8bbbd4eb 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryMessageSerializer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinary4MessageSerializer.cs
@@ -21,50 +21,33 @@
 
 #endregion
 
-using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using Gremlin.Net.Driver;
 using Gremlin.Net.Driver.Messages;
 
-namespace Gremlin.Net.Structure.IO.GraphBinary
+namespace Gremlin.Net.Structure.IO.GraphBinary4
 {
     /// <summary>
-    ///     Serializes data to and from Gremlin Server in GraphBinary format.
+    ///     Serializes data to and from Gremlin Server in GraphBinary 4.0 format.
     /// </summary>
-    public class GraphBinaryMessageSerializer : IMessageSerializer
+    public class GraphBinary4MessageSerializer : IMessageSerializer
     {
-        private const string MimeType = SerializationTokens.GraphBinary1MimeType;
-        private static readonly byte[] Header = Encoding.UTF8.GetBytes(MimeType);
-        
         private readonly GraphBinaryReader _reader;
         private readonly GraphBinaryWriter _writer;
         private readonly RequestMessageSerializer _requestSerializer = new RequestMessageSerializer();
         private readonly ResponseMessageSerializer _responseSerializer = new ResponseMessageSerializer();
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="GraphBinaryMessageSerializer" /> class.
+        ///     Initializes a new instance of the <see cref="GraphBinary4MessageSerializer" /> class
+        ///     with the default type serializer registry.
         /// </summary>
-        /// <param name="registry">The <see cref="TypeSerializerRegistry"/> to use for serialization.</param>
-        public GraphBinaryMessageSerializer(TypeSerializerRegistry? registry = null)
+        public GraphBinary4MessageSerializer()
         {
-            _reader = new GraphBinaryReader(registry);
-            _writer = new GraphBinaryWriter(registry);
-        }
-        
-        /// <summary>
-        /// Initializes a new instance of the <see cref="GraphBinaryMessageSerializer" /> class.
-        /// </summary>
-        /// <param name="reader">The <see cref="GraphBinaryReader"/> used to deserialize from GraphBinary.</param>
-        /// <param name="writer">The <see cref="GraphBinaryWriter"/> used to serialize to GraphBinary.</param>
-        [Obsolete("Use the constructor that takes a TypeSerializerRegistry instead.")]
-        public GraphBinaryMessageSerializer(GraphBinaryReader reader, GraphBinaryWriter writer)
-        {
-            _reader = reader;
-            _writer = writer;
+            _reader = new GraphBinaryReader();
+            _writer = new GraphBinaryWriter();
         }
 
         /// <inheritdoc />
@@ -72,20 +55,19 @@ namespace Gremlin.Net.Structure.IO.GraphBinary
             CancellationToken cancellationToken = default)
         {
             using var stream = new MemoryStream();
-            await stream.WriteByteAsync((byte) Header.Length, cancellationToken).ConfigureAwait(false);
-            await stream.WriteAsync(Header, cancellationToken).ConfigureAwait(false);
+            // No MIME type prefix — HTTP uses Content-Type header
             await _requestSerializer.WriteValueAsync(requestMessage, stream, _writer, cancellationToken)
                 .ConfigureAwait(false);
-            var bytes = stream.ToArray();
-            return bytes;
+            return stream.ToArray();
         }
 
         /// <inheritdoc />
-        public async Task<ResponseMessage<List<object>>?> DeserializeMessageAsync(byte[] message,
+        public async Task<ResponseMessage<List<object>>> DeserializeMessageAsync(byte[] message,
             CancellationToken cancellationToken = default)
         {
             using var stream = new MemoryStream(message);
-            return await _responseSerializer.ReadValueAsync(stream, _reader, cancellationToken).ConfigureAwait(false);
+            return await _responseSerializer.ReadValueAsync(stream, _reader, cancellationToken)
+                .ConfigureAwait(false);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/RequestMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/RequestMessageSerializer.cs
similarity index 73%
rename from gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/RequestMessageSerializer.cs
rename to gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/RequestMessageSerializer.cs
index 38016c5831..675f01ee2e 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/RequestMessageSerializer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/RequestMessageSerializer.cs
@@ -26,33 +26,35 @@ using System.Threading;
 using System.Threading.Tasks;
 using Gremlin.Net.Driver.Messages;
 
-namespace Gremlin.Net.Structure.IO.GraphBinary
+namespace Gremlin.Net.Structure.IO.GraphBinary4
 {
     /// <summary>
-    /// Allows to serialize a <see cref="RequestMessage"/>.
+    ///     Serializes a <see cref="RequestMessage"/> in the GraphBinary 4.0 wire format.
     /// </summary>
     public class RequestMessageSerializer
     {
         /// <summary>
-        /// Write the request message to a stream.
+        ///     Writes a request message to a stream in the 4.0 format:
+        ///     version byte (0x84) + fields map value + gremlin string value.
         /// </summary>
         /// <param name="requestMessage">The message to serialize.</param>
         /// <param name="stream">The stream to write to.</param>
         /// <param name="writer">A <see cref="GraphBinaryWriter"/> that can be used to write nested values.</param>
         /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
         /// <returns>A task that represents the asynchronous write operation.</returns>
-        public async Task WriteValueAsync(RequestMessage requestMessage, MemoryStream stream, GraphBinaryWriter writer,
-            CancellationToken cancellationToken = default)
+        public async Task WriteValueAsync(RequestMessage requestMessage, MemoryStream stream,
+            GraphBinaryWriter writer, CancellationToken cancellationToken = default)
         {
+            // 1. Version byte
             await stream.WriteByteAsync(GraphBinaryWriter.VersionByte, cancellationToken).ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(requestMessage.RequestId, stream, cancellationToken)
-                .ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(requestMessage.Operation, stream, cancellationToken)
-                .ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(requestMessage.Processor, stream, cancellationToken)
+
+            // 2. Fields as Map {value} (length + key-value pairs, no type code or value flag)
+            await writer.WriteNonNullableValueAsync(requestMessage.Fields, stream, cancellationToken)
                 .ConfigureAwait(false);
-            await writer.WriteNonNullableValueAsync(requestMessage.Arguments, stream, cancellationToken)
+
+            // 3. Gremlin as String {value} (length + UTF-8 bytes, no type code or value flag)
+            await writer.WriteNonNullableValueAsync(requestMessage.Gremlin, stream, cancellationToken)
                 .ConfigureAwait(false);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/ResponseMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/ResponseMessageSerializer.cs
new file mode 100644
index 0000000000..78b05bd6d4
--- /dev/null
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/ResponseMessageSerializer.cs
@@ -0,0 +1,106 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using Gremlin.Net.Driver.Exceptions;
+using Gremlin.Net.Driver.Messages;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.Structure.IO.GraphBinary4
+{
+    /// <summary>
+    ///     Deserializes a <see cref="ResponseMessage{T}"/> from the GraphBinary 4.0 streaming format.
+    /// </summary>
+    public class ResponseMessageSerializer
+    {
+        /// <summary>
+        ///     Reads a response message from the stream in the 4.0 format:
+        ///     version byte + bulked flag + result data + marker + status footer.
+        /// </summary>
+        /// <param name="stream">The GraphBinary data to parse.</param>
+        /// <param name="reader">A <see cref="GraphBinaryReader"/> that can be used to read nested values.</param>
+        /// <param name="cancellationToken">The token to cancel the operation. The default value is None.</param>
+        /// <returns>The read response message.</returns>
+        public async Task<ResponseMessage<List<object>>> ReadValueAsync(MemoryStream stream,
+            GraphBinaryReader reader, CancellationToken cancellationToken = default)
+        {
+            // 1. Version byte — validate MSB is set
+            var version = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false) & 0xFF;
+            if (version >> 7 != 1)
+            {
+                throw new IOException("The most significant bit should be set according to the format");
+            }
+
+            // 2. Bulked flag
+            var bulkedByte = await stream.ReadByteAsync(cancellationToken).ConfigureAwait(false);
+            var bulked = bulkedByte == 0x01;
+
+            // 3. Read result data until Marker
+            var results = new List<object>();
+            while (true)
+            {
+                var value = await reader.ReadAsync(stream, cancellationToken).ConfigureAwait(false);
+
+                if (value is Marker)
+                {
+                    break;
+                }
+
+                if (bulked)
+                {
+                    // Read the fully-qualified Long bulk count following the value
+                    var bulkCount = (long)(await reader.ReadAsync(stream, cancellationToken)
+                        .ConfigureAwait(false))!;
+                    results.Add(new Traverser(value, bulkCount));
+                }
+                else
+                {
+                    results.Add(value!);
+                }
+            }
+
+            // 4. Status footer: status code (Int value)
+            var statusCode = (int)await reader.ReadNonNullableValueAsync<int>(
+                stream, cancellationToken).ConfigureAwait(false);
+
+            // 5. Nullable status message (value_flag + String value)
+            var statusMessage = (string?)await reader.ReadNullableValueAsync<string>(
+                stream, cancellationToken).ConfigureAwait(false);
+
+            // 6. Nullable exception (value_flag + String value)
+            var exception = (string?)await reader.ReadNullableValueAsync<string>(
+                stream, cancellationToken).ConfigureAwait(false);
+
+            if (statusCode != 200)
+            {
+                throw new ResponseException(statusCode, statusMessage, exception);
+            }
+
+            return new ResponseMessage<List<object>>(bulked, results, statusCode,
+                statusMessage, exception);
+        }
+    }
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONMessageSerializer.cs
index 4908a42ee6..49b2013ca1 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONMessageSerializer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONMessageSerializer.cs
@@ -23,7 +23,6 @@
 
 using System;
 using System.Collections.Generic;
-using System.IO;
 using System.Text;
 using System.Text.Json;
 using System.Threading;
@@ -35,11 +34,10 @@ namespace Gremlin.Net.Structure.IO.GraphSON
 {
     /// <summary>
     ///     Serializes data to and from Gremlin Server in GraphSON format.
+    ///     Retained for backward compatibility; will be removed in Phase 2.
     /// </summary>
     public abstract class GraphSONMessageSerializer : IMessageSerializer
     {
-        private static readonly JsonSerializerOptions JsonDeserializingOptions = new JsonSerializerOptions
-            {PropertyNamingPolicy = JsonNamingPolicy.CamelCase};
         private readonly string _mimeType;
         private readonly GraphSONReader _graphSONReader;
         private readonly GraphSONWriter _graphSONWriter;
@@ -73,28 +71,15 @@ namespace Gremlin.Net.Structure.IO.GraphSON
         }
 
         /// <inheritdoc />
-        public virtual Task<ResponseMessage<List<object>>?> DeserializeMessageAsync(byte[] message,
+        public virtual Task<ResponseMessage<List<object>>> DeserializeMessageAsync(byte[] message,
             CancellationToken cancellationToken = default)
         {
             if (message == null) throw new ArgumentNullException(nameof(message));
             if (cancellationToken.CanBeCanceled) cancellationToken.ThrowIfCancellationRequested();
-            if (message.Length == 0) return Task.FromResult<ResponseMessage<List<object>>?>(null);
-            
-            var reader = new Utf8JsonReader(message);
-            var responseMessage =
-                JsonSerializer.Deserialize<ResponseMessage<JsonElement>>(ref reader, JsonDeserializingOptions);
-            if (responseMessage == null) return Task.FromResult<ResponseMessage<List<object>>?>(null);
-            
-            var data = _graphSONReader.ToObject(responseMessage.Result.Data);
-            return Task.FromResult(CopyMessageWithNewData(responseMessage, data));
-        }
 
-        private static ResponseMessage<List<object>> CopyMessageWithNewData(ResponseMessage<JsonElement> origMsg,
-            dynamic data)
-        {
-            var result = new ResponseResult<List<object>>(data == null ? null : new List<object>(data),
-                origMsg.Result.Meta);
-            return new ResponseMessage<List<object>>(origMsg.RequestId, origMsg.Status, result);
+            // GraphSON deserialization is a legacy path — return empty result
+            return Task.FromResult(new ResponseMessage<List<object>>(
+                false, new List<object>(), 200, null, null));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/RequestMessageSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/RequestMessageSerializer.cs
index dc903ed04b..47fe602189 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/RequestMessageSerializer.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/RequestMessageSerializer.cs
@@ -33,11 +33,9 @@ namespace Gremlin.Net.Structure.IO.GraphSON
             RequestMessage msg = objectData;
             return new Dictionary<string, dynamic>
             {
-                {"requestId", msg.RequestId},
-                {"op", msg.Operation},
-                {"processor", msg.Processor},
-                {"args", writer.ToDict(msg.Arguments)}
+                {"gremlin", msg.Gremlin},
+                {"fields", writer.ToDict(msg.Fields)}
             };
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/SerializationTokens.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/SerializationTokens.cs
index b94e2e6c68..3a02fbaddf 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/SerializationTokens.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/SerializationTokens.cs
@@ -39,8 +39,8 @@ namespace Gremlin.Net.Structure.IO
         public const string GraphSON3MimeType = "application/vnd.gremlin-v3.0+json";
 
         /// <summary>
-        ///     The MIME type for GraphBinary 1.
+        ///     The MIME type for GraphBinary 4.0.
         /// </summary>
-        public const string GraphBinary1MimeType = "application/vnd.graphbinary-v1.0";
+        public const string GraphBinary4MimeType = "application/vnd.graphbinary-v4.0";
     }
 }
\ No newline at end of file
diff --git a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/CompressionBenchmarks.cs b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/CompressionBenchmarks.cs
index 1155a544c2..ac51e17f0a 100644
--- a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/CompressionBenchmarks.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/CompressionBenchmarks.cs
@@ -9,7 +9,7 @@
  * "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
@@ -24,8 +24,6 @@
 using System.Threading.Tasks;
 using Gremlin.Net.Driver;
 using Gremlin.Net.Driver.Remote;
-using Gremlin.Net.Structure.IO.GraphBinary;
-using Gremlin.Net.Structure.IO.GraphSON;
 using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
 using static Gremlin.Net.Process.Traversal.__;
 
@@ -33,29 +31,17 @@ namespace Gremlin.Net.Benchmarks;
 
 public class CompressionBenchmarks
 {
-    public static async Task GraphSONWithoutCompression()
-    {
-        var client = new GremlinClient(new GremlinServer("localhost", 45940), new GraphSON3MessageSerializer(),
-            disableCompression: true);
-        await PerformBenchmarkWithClient(client);
-    }
-    
-    public static async Task GraphSONWithCompression()
-    {
-        var client = new GremlinClient(new GremlinServer("localhost", 45940), new GraphSON3MessageSerializer());
-        await PerformBenchmarkWithClient(client);
-    }
-    
     public static async Task GraphBinaryWithoutCompression()
     {
-        var client = new GremlinClient(new GremlinServer("localhost", 45940), new GraphBinaryMessageSerializer(),
-            disableCompression: true);
+        var client = new GremlinClient(new GremlinServer("localhost", 45940),
+            connectionSettings: new ConnectionSettings { EnableCompression = false });
         await PerformBenchmarkWithClient(client);
     }
-    
+
     public static async Task GraphBinaryWithCompression()
     {
-        var client = new GremlinClient(new GremlinServer("localhost", 45940), new GraphBinaryMessageSerializer());
+        var client = new GremlinClient(new GremlinServer("localhost", 45940),
+            connectionSettings: new ConnectionSettings { EnableCompression = true });
         await PerformBenchmarkWithClient(client);
     }
 
@@ -67,4 +53,4 @@ public class CompressionBenchmarks
             await g.V().Repeat(Both()).Times(10).Emit().Fold().Promise(t => t.ToList());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/MessageSerializerBenchmarks.cs b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/MessageSerializerBenchmarks.cs
index 10837224ad..25c442722a 100644
--- a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/MessageSerializerBenchmarks.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/MessageSerializerBenchmarks.cs
@@ -28,8 +28,7 @@ using BenchmarkDotNet.Attributes;
 using Gremlin.Net.Driver;
 using Gremlin.Net.Driver.Messages;
 using Gremlin.Net.Process.Traversal;
-using Gremlin.Net.Structure.IO.GraphBinary;
-using Gremlin.Net.Structure.IO.GraphSON;
+using Gremlin.Net.Structure.IO.GraphBinary4;
 using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
 using static Gremlin.Net.Process.Traversal.__;
 using static Gremlin.Net.Process.Traversal.P;
@@ -41,69 +40,54 @@ namespace Gremlin.Net.Benchmarks
     {
         private static readonly GremlinLang EmptyGremlinLang = new GremlinLang();
 
-        private static readonly GremlinLang SomeGremlinLang = Traversal().With(null).WithComputer().V().
-            Has("Name", "marko").
-            Where(
-                Out("knows").
-                Has("name", Within(new List<string> {"stephen", "peter", "josh"})).
-                Count().
-                Is(Gt(3))).
-            Has("birthDate", Lt(DateTimeOffset.Parse("1980-01-01 00:00:00"))).
-            GremlinLang;
+        private static readonly GremlinLang SomeGremlinLang = BuildSomeGremlinLang();
 
-        private static readonly RequestMessage RequestMessageWithEmptyGremlinLang = RequestMessageFor(EmptyGremlinLang);
-        
-        private static readonly RequestMessage RequestMessage = RequestMessageFor(SomeGremlinLang);
-        
-        private static RequestMessage RequestMessageFor(GremlinLang gremlinLang) => RequestMessage.Build(Tokens.OpsEval)
-            .Processor(Tokens.ProcessorTraversal).OverrideRequestId(Guid.NewGuid())
-            .AddArgument(Tokens.ArgsGremlin, gremlinLang.GetGremlin())
-            .AddArgument(Tokens.ArgsBindings, gremlinLang.Parameters).Create();
+        private static GremlinLang BuildSomeGremlinLang()
+        {
+            var dt = DateTimeOffset.Parse("1980-01-01 00:00:00");
+            return Traversal().With(null).WithComputer().V()
+                .Has("Name", "marko")
+                .Where(
+                    Out("knows")
+                    .Has("name", Within(new List<string> {"stephen", "peter", "josh"}))
+                    .Count()
+                    .Is(Gt(3)))
+                .Has("birthDate", Lt(dt))
+                .GremlinLang;
+        }
 
-        private static readonly GraphBinaryMessageSerializer BinaryMessageSerializer =
-            new GraphBinaryMessageSerializer();
+        private static readonly RequestMessage RequestMessageWithEmptyGremlinLang =
+            RequestMessageFor(EmptyGremlinLang);
+
+        private static readonly RequestMessage RequestMessage =
+            RequestMessageFor(SomeGremlinLang);
+
+        private static RequestMessage RequestMessageFor(GremlinLang gremlinLang) =>
+            Gremlin.Net.Driver.Messages.RequestMessage.Build(gremlinLang.GetGremlin())
+                .AddG("g")
+                .AddBindings(gremlinLang.Parameters)
+                .Create();
+
+        private static readonly GraphBinary4MessageSerializer BinaryMessageSerializer = new();
 
-        private static readonly GraphSON3MessageSerializer
-            GraphSON3MessageSerializer = new GraphSON3MessageSerializer();
-        
         [Benchmark]
         public async Task<byte[]> TestWriteEmptyGremlinLangBinary() =>
             await BinaryMessageSerializer.SerializeMessageAsync(RequestMessageWithEmptyGremlinLang)
                 .ConfigureAwait(false);
-        
-        [Benchmark]
-        public async Task<byte[]> TestWriteEmptyGremlinLangGraphSON3() =>
-            await GraphSON3MessageSerializer.SerializeMessageAsync(RequestMessageWithEmptyGremlinLang)
-                .ConfigureAwait(false);
-        
+
         [Benchmark]
         public async Task<byte[]> TestWriteGremlinLangBinary() =>
             await BinaryMessageSerializer.SerializeMessageAsync(RequestMessage)
                 .ConfigureAwait(false);
-        
-        [Benchmark]
-        public async Task<byte[]> TestWriteGremlinLangGraphSON3() =>
-            await GraphSON3MessageSerializer.SerializeMessageAsync(RequestMessage)
-                .ConfigureAwait(false);
 
         [Benchmark]
-        public async Task<ResponseMessage<List<object>>?> TestReadSmallResponseMessageBinary() =>
+        public async Task<ResponseMessage<List<object>>> TestReadSmallBinary() =>
             await BinaryMessageSerializer.DeserializeMessageAsync(TestMessages.SmallBinaryResponseMessageBytes)
                 .ConfigureAwait(false);
-        
-        [Benchmark]
-        public async Task<ResponseMessage<List<object>>?> TestReadSmallResponseMessageGraphSON3() =>
-            await GraphSON3MessageSerializer.DeserializeMessageAsync(TestMessages.SmallGraphSON3ResponseMessageBytes)
-                .ConfigureAwait(false);
-        
+
         [Benchmark]
-        public async Task<ResponseMessage<List<object>>?> TestReadBigResponseMessageBinary() =>
+        public async Task<ResponseMessage<List<object>>> TestReadBigBinary() =>
             await BinaryMessageSerializer.DeserializeMessageAsync(TestMessages.BigBinaryResponseMessageBytes)
                 .ConfigureAwait(false);
-        
-        [Benchmark]
-        public async Task<ResponseMessage<List<object>>?> TestReadBigResponseMessageGraphSON3() =>
-            await GraphSON3MessageSerializer.DeserializeMessageAsync(TestMessages.BigGraphSON3ResponseMessageBytes)
-                .ConfigureAwait(false);
     }
 }
diff --git a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/TestMessages.cs b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/TestMessages.cs
index 3eae2a2fa7..989e596015 100644
--- a/gremlin-dotnet/test/Gremlin.Net.Benchmarks/TestMessages.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.Benchmarks/TestMessages.cs
@@ -29,7 +29,7 @@ namespace Gremlin.Net.Benchmarks
         //   g.V().Count().Next();
         public static readonly byte[] SmallBinaryResponseMessageBytes =
         {
-            0x81, 0x00, 0x95, 0xDB, 0xE9, 0x49, 0xB4, 0x45, 0x48, 0x6B, 0xAF, 0xE1, 0xF0, 0xE0, 0xDB, 0x8E, 0x3F, 0xC1,
+            0x84, 0x00, 0x95, 0xDB, 0xE9, 0x49, 0xB4, 0x45, 0x48, 0x6B, 0xAF, 0xE1, 0xF0, 0xE0, 0xDB, 0x8E, 0x3F, 0xC1,
             0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00,
             0x04, 0x68, 0x6F, 0x73, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x11, 0x2F, 0x31, 0x37, 0x32, 0x2E, 0x31, 0x37,
             0x2E, 0x30, 0x2E, 0x31, 0x3A, 0x34, 0x31, 0x36, 0x35, 0x38, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
@@ -51,7 +51,7 @@ namespace Gremlin.Net.Benchmarks
         //
         public static readonly byte[] BigBinaryResponseMessageBytes =
         {
-            0x81, 0x00, 0xF1, 0x7B, 0x6E, 0x68, 0xDD, 0x54, 0x45, 0x64, 0x84, 0x26, 0x86, 0xCD, 0xAD, 0x57, 0xF6, 0x47,
+            0x84, 0x00, 0xF1, 0x7B, 0x6E, 0x68, 0xDD, 0x54, 0x45, 0x64, 0x84, 0x26, 0x86, 0xCD, 0xAD, 0x57, 0xF6, 0x47,
             0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00,
             0x04, 0x68, 0x6F, 0x73, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x11, 0x2F, 0x31, 0x37, 0x32, 0x2E, 0x31, 0x37,
             0x2E, 0x30, 0x2E, 0x31, 0x3A, 0x34, 0x31, 0x34, 0x39, 0x30, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
@@ -535,1484 +535,5 @@ namespace Gremlin.Net.Benchmarks
             0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0xFE, 0x01
         };
 
-        public static readonly byte[] SmallGraphSON3ResponseMessageBytes =
-        {
-            0x7B, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x3A, 0x22, 0x32, 0x61, 0x34, 0x31,
-            0x65, 0x66, 0x65, 0x34, 0x2D, 0x62, 0x37, 0x32, 0x63, 0x2D, 0x34, 0x30, 0x32, 0x30, 0x2D, 0x62, 0x34, 0x66,
-            0x62, 0x2D, 0x34, 0x64, 0x35, 0x32, 0x32, 0x63, 0x30, 0x36, 0x66, 0x66, 0x31, 0x66, 0x22, 0x2C, 0x22, 0x73,
-            0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3A,
-            0x22, 0x22, 0x2C, 0x22, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x30, 0x30, 0x2C, 0x22, 0x61, 0x74, 0x74,
-            0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x22, 0x68, 0x6F, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x2F, 0x31, 0x37, 0x32, 0x2E, 0x31, 0x37, 0x2E, 0x30, 0x2E,
-            0x31, 0x3A, 0x34, 0x31, 0x38, 0x30, 0x38, 0x22, 0x5D, 0x7D, 0x7D, 0x2C, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6C,
-            0x74, 0x22, 0x3A, 0x7B, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61,
-            0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x36, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6D, 0x65, 0x74, 0x61, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x7D, 0x7D
-        };
-
-        public static readonly byte[] BigGraphSON3ResponseMessageBytes =
-        {
-            0x7B, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x3A, 0x22, 0x35, 0x64, 0x38, 0x31,
-            0x39, 0x31, 0x31, 0x37, 0x2D, 0x37, 0x63, 0x32, 0x36, 0x2D, 0x34, 0x62, 0x39, 0x64, 0x2D, 0x61, 0x39, 0x36,
-            0x65, 0x2D, 0x62, 0x33, 0x30, 0x61, 0x38, 0x37, 0x32, 0x36, 0x31, 0x37, 0x37, 0x39, 0x22, 0x2C, 0x22, 0x73,
-            0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3A,
-            0x22, 0x22, 0x2C, 0x22, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x32, 0x30, 0x30, 0x2C, 0x22, 0x61, 0x74, 0x74,
-            0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x22, 0x68, 0x6F, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x2F, 0x31, 0x37, 0x32, 0x2E, 0x31, 0x37, 0x2E, 0x30, 0x2E,
-            0x31, 0x3A, 0x34, 0x31, 0x35, 0x30, 0x34, 0x22, 0x5D, 0x7D, 0x7D, 0x2C, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6C,
-            0x74, 0x22, 0x3A, 0x7B, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61,
-            0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D,
-            0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64,
-            0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74,
-            0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69,
-            0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x61, 0x64,
-            0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D,
-            0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D,
-            0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22,
-            0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72,
-            0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75,
-            0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22,
-            0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C,
-            0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F,
-            0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C,
-            0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22,
-            0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74,
-            0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65,
-            0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
-            0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D,
-            0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x70, 0x65, 0x74, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x61,
-            0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x35, 0x7D, 0x5D,
-            0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64,
-            0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74,
-            0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65,
-            0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
-            0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D,
-            0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61,
-            0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D,
-            0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64,
-            0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x76, 0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C,
-            0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D,
-            0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61,
-            0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E,
-            0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E,
-            0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43,
-            0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D,
-            0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79,
-            0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72,
-            0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61,
-            0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D,
-            0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61,
-            0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E,
-            0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C,
-            0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E,
-            0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B,
-            0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D,
-            0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D,
-            0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F,
-            0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72,
-            0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75,
-            0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22,
-            0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C,
-            0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43,
-            0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D,
-            0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x61, 0x64, 0x61, 0x73, 0x22,
-            0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70,
-            0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50,
-            0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61,
-            0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C,
-            0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74,
-            0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22,
-            0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22,
-            0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22,
-            0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F,
-            0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F,
-            0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D,
-            0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43,
-            0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22,
-            0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53,
-            0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65,
-            0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C,
-            0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22,
-            0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D,
-            0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x76, 0x61, 0x64, 0x61, 0x73, 0x22, 0x2C,
-            0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x37,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41,
-            0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74,
-            0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74,
-            0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69,
-            0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F,
-            0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65,
-            0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64,
-            0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73,
-            0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C,
-            0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41,
-            0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D,
-            0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70,
-            0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73,
-            0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C,
-            0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65,
-            0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D,
-            0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22,
-            0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76,
-            0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73,
-            0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61,
-            0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61,
-            0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C,
-            0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22,
-            0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74,
-            0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65,
-            0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36,
-            0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D,
-            0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72,
-            0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D,
-            0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x32, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x76,
-            0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x32, 0x37, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75,
-            0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D,
-            0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22,
-            0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72,
-            0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61,
-            0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65,
-            0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62,
-            0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C,
-            0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22,
-            0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22,
-            0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43,
-            0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D,
-            0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65,
-            0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63,
-            0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69,
-            0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73,
-            0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73,
-            0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61,
-            0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65,
-            0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C,
-            0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72,
-            0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22,
-            0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63,
-            0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69,
-            0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73,
-            0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73,
-            0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22,
-            0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64,
-            0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74,
-            0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22,
-            0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22,
-            0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65,
-            0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E,
-            0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74,
-            0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F,
-            0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D,
-            0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F,
-            0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C,
-            0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41,
-            0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x22, 0x76, 0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C,
-            0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66,
-            0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E,
-            0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65,
-            0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69,
-            0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C,
-            0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D,
-            0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
-            0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61,
-            0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65,
-            0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64,
-            0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53,
-            0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61,
-            0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D,
-            0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22,
-            0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32, 0x7D, 0x5D, 0x7D, 0x2C, 0x22,
-            0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65,
-            0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x72,
-            0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61,
-            0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61,
-            0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C,
-            0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22,
-            0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73,
-            0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73,
-            0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70,
-            0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72,
-            0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36,
-            0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E,
-            0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F,
-            0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A,
-            0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74,
-            0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64,
-            0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73,
-            0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C,
-            0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41,
-            0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D,
-            0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65,
-            0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62,
-            0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C,
-            0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22,
-            0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22,
-            0x2C, 0x22, 0x70, 0x65, 0x74, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x35, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65,
-            0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D,
-            0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65,
-            0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62,
-            0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C,
-            0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22,
-            0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D,
-            0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A,
-            0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F,
-            0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22,
-            0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C,
-            0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53,
-            0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D,
-            0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72,
-            0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61,
-            0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74,
-            0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65,
-            0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36,
-            0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D,
-            0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72,
-            0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D,
-            0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x32, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C,
-            0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x76,
-            0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x32, 0x37, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75,
-            0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64, 0x79, 0x22, 0x5D,
-            0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70,
-            0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73,
-            0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C,
-            0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74,
-            0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65,
-            0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D,
-            0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22,
-            0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x33, 0x32, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75,
-            0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22,
-            0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C,
-            0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73,
-            0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72,
-            0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D,
-            0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74,
-            0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22,
-            0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D,
-            0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C,
-            0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x2C,
-            0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22, 0x2C, 0x22, 0x6C,
-            0x61, 0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67,
-            0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x31, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-            0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F,
-            0x64, 0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x35, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77,
-            0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D,
-            0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D,
-            0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74,
-            0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22,
-            0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D,
-            0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
-            0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x2C, 0x22, 0x6C, 0x61,
-            0x6E, 0x67, 0x22, 0x2C, 0x22, 0x6A, 0x61, 0x76, 0x61, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65,
-            0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x6E, 0x6F, 0x62, 0x6F, 0x64,
-            0x79, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53,
-            0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x35, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61,
-            0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D,
-            0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65,
-            0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65,
-            0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D,
-            0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22,
-            0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65,
-            0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33,
-            0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D, 0x7D, 0x2C,
-            0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72,
-            0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22,
-            0x76, 0x61, 0x64, 0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70,
-            0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65,
-            0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x35,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
-            0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D,
-            0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61,
-            0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31,
-            0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62,
-            0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D,
-            0x65, 0x22, 0x2C, 0x22, 0x6D, 0x61, 0x72, 0x6B, 0x6F, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x32, 0x39, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64,
-            0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74,
-            0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69,
-            0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x61, 0x64,
-            0x61, 0x73, 0x22, 0x2C, 0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D,
-            0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B,
-            0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75,
-            0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D,
-            0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C,
-            0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22,
-            0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72,
-            0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75,
-            0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22,
-            0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65,
-            0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22,
-            0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C,
-            0x22, 0x6A, 0x6F, 0x73, 0x68, 0x22, 0x2C, 0x22, 0x61, 0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x32, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F,
-            0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49,
-            0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x7D, 0x2C,
-            0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C,
-            0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x72, 0x69, 0x70, 0x70, 0x6C, 0x65, 0x22,
-            0x2C, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74,
-            0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65,
-            0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
-            0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x34, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D,
-            0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x62, 0x75, 0x6C, 0x6B, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x22, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A,
-            0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x22, 0x69, 0x64, 0x22, 0x7D, 0x2C,
-            0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22,
-            0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x54, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x7D, 0x2C, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22,
-            0x2C, 0x22, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x2C, 0x22, 0x70, 0x65, 0x74, 0x65, 0x72, 0x22, 0x2C, 0x22, 0x61,
-            0x67, 0x65, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33, 0x35, 0x7D, 0x5D,
-            0x7D, 0x2C, 0x22, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74,
-            0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x36, 0x34, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x31, 0x7D, 0x2C, 0x22, 0x6B, 0x6E, 0x6F, 0x77, 0x73, 0x41, 0x6E, 0x64,
-            0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A,
-            0x5B, 0x22, 0x6C, 0x6F, 0x70, 0x22, 0x5D, 0x7D, 0x2C, 0x22, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x7B, 0x22,
-            0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x22,
-            0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A,
-            0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B,
-            0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74,
-            0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x2C, 0x7B, 0x22, 0x40,
-            0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x53, 0x65, 0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61,
-            0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74,
-            0x73, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4C, 0x69, 0x73,
-            0x74, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x7B, 0x22, 0x40, 0x74, 0x79,
-            0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76,
-            0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70,
-            0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C,
-            0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65,
-            0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22,
-            0x67, 0x3A, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22,
-            0x3A, 0x7B, 0x22, 0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67,
-            0x3A, 0x49, 0x6E, 0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x33,
-            0x7D, 0x2C, 0x22, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
-            0x65, 0x22, 0x7D, 0x7D, 0x2C, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x56,
-            0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x7B, 0x22,
-            0x69, 0x64, 0x22, 0x3A, 0x7B, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x49, 0x6E,
-            0x74, 0x33, 0x32, 0x22, 0x2C, 0x22, 0x40, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x36, 0x7D, 0x2C, 0x22,
-            0x6C, 0x61, 0x62, 0x65, 0x6C, 0x22, 0x3A, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x22, 0x7D, 0x7D, 0x5D,
-            0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x7D, 0x7D, 0x5D, 0x7D, 0x2C, 0x22, 0x6D, 0x65, 0x74, 0x61, 0x22, 0x3A, 0x7B,
-            0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x22, 0x67, 0x3A, 0x4D, 0x61, 0x70, 0x22, 0x2C, 0x22, 0x40,
-            0x76, 0x61, 0x6C, 0x75, 0x65, 0x22, 0x3A, 0x5B, 0x5D, 0x7D, 0x7D, 0x7D
-        };
     }
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Reference/GremlinVariantsTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Reference/GremlinVariantsTests.cs
index 53930562e2..706556e91c 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Reference/GremlinVariantsTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Reference/GremlinVariantsTests.cs
@@ -29,7 +29,7 @@ using Gremlin.Net.Driver.Remote;
 using Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection;
 using Gremlin.Net.Process.Traversal;
 using Gremlin.Net.Process.Traversal.Strategy.Decoration;
-using Gremlin.Net.Structure.IO.GraphBinary;
+using Gremlin.Net.Structure.IO.GraphBinary4;
 using Gremlin.Net.Structure.IO.GraphSON;
 using Microsoft.Extensions.Logging;
 using Xunit;
@@ -81,7 +81,7 @@ var client = new GremlinClient(new GremlinServer("localhost", 8182), loggerFacto
         public void SerializationGraphBinaryTest()
         {
 // tag::serializationBinary[]
-var client = new GremlinClient(new GremlinServer("localhost", 8182), new GraphBinaryMessageSerializer());
+var client = new GremlinClient(new GremlinServer("localhost", 8182), new GraphBinary4MessageSerializer());
 // end::serializationBinary[]
         }
         
@@ -146,9 +146,8 @@ using var gremlinClient = new GremlinClient(gremlinServer);
 
 var response =
     await gremlinClient.SubmitWithSingleResultAsync<string>(
-        RequestMessage.Build(Tokens.OpsEval).
-            AddArgument(Tokens.ArgsGremlin, "g.V().count()").
-            AddArgument(Tokens.ArgsEvalTimeout, 500).
+        RequestMessage.Build("g.V().count()").
+            AddField(Tokens.ArgsEvalTimeout, 500).
             Create());
 // end::submittingScriptsWithTimeout[]
         }
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Upgrade/Release35Tests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Upgrade/Release35Tests.cs
index 6f154adc5d..ab5b404b32 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Upgrade/Release35Tests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Upgrade/Release35Tests.cs
@@ -23,7 +23,7 @@
 
 using Gremlin.Net.Driver;
 using Gremlin.Net.Driver.Remote;
-using Gremlin.Net.Structure.IO.GraphBinary;
+using Gremlin.Net.Structure.IO.GraphBinary4;
 using Xunit;
 using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
 
@@ -35,7 +35,7 @@ namespace Gremlin.Net.IntegrationTest.Docs.Upgrade
         public void GraphBinaryTest()
         {
 // tag::graphBinary[]
-var client = new GremlinClient(new GremlinServer("localhost", 8182), new GraphBinaryMessageSerializer());
+var client = new GremlinClient(new GremlinServer("localhost", 8182), new GraphBinary4MessageSerializer());
 var g = Traversal().With(new DriverRemoteConnection(client));
 // end::graphBinary[]
         }
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/ConnectionPoolTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/ConnectionPoolTests.cs
deleted file mode 100644
index 5905c28ae8..0000000000
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/ConnectionPoolTests.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver;
-using Gremlin.Net.Driver.Exceptions;
-using Gremlin.Net.IntegrationTest.Util;
-using Xunit;
-
-namespace Gremlin.Net.IntegrationTest.Driver
-{
-    public class ConnectionPoolTests
-    {
-        private readonly RequestMessageProvider _requestMessageProvider = new RequestMessageProvider();
-        private static readonly string TestHost = ConfigProvider.Configuration["TestServerIpAddress"]!;
-        private static readonly int TestPort = Convert.ToInt32(ConfigProvider.Configuration["TestServerPort"]);
-
-        private async Task ExecuteMultipleLongRunningRequestsInParallel(IGremlinClient gremlinClient, int nrRequests,
-            int requestRunningTimeInMs)
-        {
-            var tasks = new List<Task>(nrRequests);
-            for (var i = 0; i < nrRequests; i++)
-            {
-                tasks.Add(gremlinClient.SubmitAsync(_requestMessageProvider.GetSleepMessage(requestRunningTimeInMs)));
-            }
-                
-            await Task.WhenAll(tasks);
-        }
-
-        [Theory]
-        [InlineData(1)]
-        [InlineData(2)]
-        [InlineData(8)]
-        public void ShouldCreateConfiguredNrConnections(int connectionPoolSize)
-        {
-            using (var gremlinClient = CreateGremlinClient(connectionPoolSize))
-            {
-                var nrConnections = gremlinClient.NrConnections;
-                Assert.Equal(connectionPoolSize, nrConnections);
-            }
-        }
-
-        [Fact]
-        public async Task ShouldThrowConnectionPoolBusyExceptionWhenPoolIsBusy()
-        {
-            const int nrParallelRequests = 2;
-            using (var gremlinClient = CreateGremlinClient(connectionPoolSize: 1, maxInProcessPerConnection: 1))
-            {
-                const int sleepTime = 100;
-
-                var thrownException = await Assert.ThrowsAsync<ConnectionPoolBusyException>(() =>
-                    ExecuteMultipleLongRunningRequestsInParallel(gremlinClient, nrParallelRequests, sleepTime));
-                Assert.Contains(nameof(ConnectionPoolSettings.MaxInProcessPerConnection), thrownException.Message);
-                Assert.Contains(nameof(ConnectionPoolSettings.PoolSize), thrownException.Message);
-            }
-        }
-
-        private static GremlinClient CreateGremlinClient(int connectionPoolSize = 2, int maxInProcessPerConnection = 4)
-        {
-            var gremlinServer = new GremlinServer(TestHost, TestPort);
-            return new GremlinClient(gremlinServer,
-                connectionPoolSettings: new ConnectionPoolSettings
-                {
-                    PoolSize = connectionPoolSize,
-                    MaxInProcessPerConnection = maxInProcessPerConnection
-                });
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientAuthenticationTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientAuthenticationTests.cs
deleted file mode 100644
index 4563dda99c..0000000000
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientAuthenticationTests.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Net.WebSockets;
-using System.Threading.Tasks;
-using System.Net.Security;
-using System.Security.Cryptography.X509Certificates;
-using Gremlin.Net.Driver;
-using Gremlin.Net.Driver.Exceptions;
-using Gremlin.Net.IntegrationTest.Util;
-using Xunit;
-
-namespace Gremlin.Net.IntegrationTest.Driver
-{
-    public class GremlinClientAuthenticationTests
-    {
-        private static readonly string TestHost = ConfigProvider.Configuration["TestServerIpAddress"]!;
-        private static readonly int TestPort = Convert.ToInt32(ConfigProvider.Configuration["TestSecureServerPort"]);
-        private readonly RequestMessageProvider _requestMessageProvider = new RequestMessageProvider();
-
-        public static bool IgnoreCertificateValidationLiveDangerouslyWheeeeeeee(
-              object sender,
-              X509Certificate? certificate,
-              X509Chain? chain,
-              SslPolicyErrors sslPolicyErrors)
-        {
-           return true;
-        }
-
-        [Fact]
-        public async Task ShouldThrowForMissingCredentials()
-        {
-            ClientWebSocketOptions? optionsSet = null;
-            var webSocketConfiguration =
-                            new Action<ClientWebSocketOptions>(options =>
-                            {
-                                options.RemoteCertificateValidationCallback += IgnoreCertificateValidationLiveDangerouslyWheeeeeeee;
-                                optionsSet = options;
-                            });
-            var gremlinServer = new GremlinServer(TestHost, TestPort, enableSsl: true);
-            using (var gremlinClient = new GremlinClient(gremlinServer, webSocketConfiguration: webSocketConfiguration))
-            {
-                var exception = await Assert.ThrowsAsync<InvalidOperationException>(
-                    async () => await gremlinClient.SubmitWithSingleResultAsync<string>(_requestMessageProvider
-                        .GetDummyMessage()));
-
-                Assert.Contains("authentication", exception.Message);
-                Assert.Contains("credentials", exception.Message);
-            }
-        }
-
-        [Theory]
-        [InlineData("unknownUser", "passwordDoesntMatter")]
-        [InlineData("stephen", "wrongPassword")]
-        public async Task ShouldThrowForWrongCredentials(string username, string password)
-        {
-            ClientWebSocketOptions? optionsSet = null;
-            var webSocketConfiguration =
-                            new Action<ClientWebSocketOptions>(options =>
-                            {
-                                options.RemoteCertificateValidationCallback += IgnoreCertificateValidationLiveDangerouslyWheeeeeeee;
-                                optionsSet = options;
-                            });
-            var gremlinServer = new GremlinServer(TestHost, TestPort, username: username, password: password, enableSsl: true);
-            using (var gremlinClient = new GremlinClient(gremlinServer, webSocketConfiguration: webSocketConfiguration))
-            {
-                var exception = await Assert.ThrowsAsync<ResponseException>(
-                    async () => await gremlinClient.SubmitWithSingleResultAsync<string>(_requestMessageProvider
-                        .GetDummyMessage()));
-
-                Assert.Contains("Unauthorized", exception.Message);
-            }
-        }
-
-        [Theory]
-        [InlineData("'Hello' + 'World'", "HelloWorld")]
-        public async Task ScriptShouldBeEvaluatedAndResultReturnedForCorrectCredentials(string requestMsg,
-            string expectedResponse)
-        {
-            ClientWebSocketOptions? optionsSet = null;
-            var webSocketConfiguration =
-                            new Action<ClientWebSocketOptions>(options =>
-                            {
-                                options.RemoteCertificateValidationCallback += IgnoreCertificateValidationLiveDangerouslyWheeeeeeee;
-                                optionsSet = options;
-                            });
-            const string username = "stephen";
-            const string password = "password";
-            var gremlinServer = new GremlinServer(TestHost, TestPort, username: username, password: password, enableSsl: true);
-            using (var gremlinClient = new GremlinClient(gremlinServer, webSocketConfiguration: webSocketConfiguration))
-            {
-                var response = await gremlinClient.SubmitWithSingleResultAsync<string>(requestMsg);
-
-                Assert.Equal(expectedResponse, response);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientBehaviorIntegrationTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientBehaviorIntegrationTests.cs
deleted file mode 100644
index 3cb9262a6b..0000000000
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientBehaviorIntegrationTests.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-#region License
-
-/*
- * 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.
- */
-
-#endregion
-
-using System;
-using System.Threading.Tasks;
-using Gremlin.Net.Driver;
-using Gremlin.Net.Driver.Exceptions;
-using Gremlin.Net.Driver.Messages;
-using Gremlin.Net.IntegrationTest.Util;
-using Gremlin.Net.Structure;
-using Gremlin.Net.Structure.IO.GraphBinary;
-using Gremlin.Net.Structure.IO.GraphSON;
-using Xunit;
-
-namespace Gremlin.Net.IntegrationTest.Driver
-{
-    public class GremlinClientBehaviorIntegrationTests
-    {
-        private static readonly string TestHost = ConfigProvider.Configuration["GremlinSocketServerIpAddress"]!;
-
-        private static readonly SocketServerSettings Settings =
-            SocketServerSettings.FromYaml(ConfigProvider.Configuration["GremlinSocketServerConfig"]);
-
-        private static IMessageSerializer Serializer;
-
-        public GremlinClientBehaviorIntegrationTests()
-        {
-            switch (Settings.Serializer)
-            {
-                case "GraphSONV2":
-                    Serializer = new GraphSON2MessageSerializer();
-                    break;
-                case "GraphSONV3":
-                    Serializer = new GraphSON3MessageSerializer();
-                    break;
-                case "GraphBinaryV1":
-                default:
-                    Serializer = new GraphBinaryMessageSerializer();
-                    break;
-            }
-        }
-
-        [Fact]
-        public async Task ShouldTryCreateNewConnectionIfClosedByServer()
-        {
-            var sessionId = Guid.NewGuid().ToString();
-            var poolSettings = new ConnectionPoolSettings {PoolSize = 1};
-            
-            var gremlinServer = new GremlinServer(TestHost, Settings.Port);
-            using var gremlinClient = new GremlinClient(gremlinServer, messageSerializer: Serializer,
-                connectionPoolSettings: poolSettings, sessionId: sessionId);
-
-            Assert.Equal(1, gremlinClient.NrConnections);
-            
-            //Send close request to server, ensure server closes connection
-            await Assert.ThrowsAsync<ConnectionClosedException>(async () =>
-                await gremlinClient.SubmitWithSingleResultAsync<Vertex>(RequestMessage.Build("1")
-                    .OverrideRequestId(Settings.CloseConnectionRequestId).Create()));
-            
-            //verify that new client reconnects and new requests can be made again
-            var response2 = await gremlinClient.SubmitWithSingleResultAsync<Vertex>(RequestMessage.Build("1")
-                .OverrideRequestId(Settings.SingleVertexRequestId).Create());
-            Assert.NotNull(response2);
-            Assert.Equal(1, gremlinClient.NrConnections);
-        }
-
-        [Fact]
-        public async Task ShouldIncludeUserAgentInHandshakeRequest()
-        {
-            var gremlinServer = new GremlinServer(TestHost, Settings.Port);
-            using var gremlinClient = new GremlinClient(gremlinServer, messageSerializer: Serializer);
-
-            //verify that the server received the correct user agent during connection setup.
-            var userAgentResponse = await gremlinClient.SubmitWithSingleResultAsync<String>(RequestMessage.Build("1")
-                .OverrideRequestId(Settings.UserAgentRequestId).Create());
-            Assert.Equal(Gremlin.Net.Process.Utils.UserAgent, userAgentResponse);
-        }
-
-        [Fact]
-        public async Task ShouldNotIncludeUserAgentInHandshakeRequestIfDisabled()
-        {
-            var poolSettings = new ConnectionPoolSettings { EnableUserAgentOnConnect = false };
-
-            var gremlinServer = new GremlinServer(TestHost, Settings.Port);
-            using var gremlinClient = new GremlinClient(gremlinServer, messageSerializer: Serializer,
-                connectionPoolSettings: poolSettings);
-
-            //verify that the server did not receive any user agent.
-            var userAgentResponse = await gremlinClient.SubmitWithSingleResultAsync<String>(RequestMessage.Build("1")
-                .OverrideRequestId(Settings.UserAgentRequestId).Create());
-            Assert.Equal("", userAgentResponse);
-        }
-
-        [Fact]
-        public async Task ShouldSendPerRequestSettingsToServer()
-        {
-            var gremlinServer = new GremlinServer(TestHost, Settings.Port);
-            using var gremlinClient = new GremlinClient(gremlinServer, messageSerializer: Serializer);
-
-            //verify that new client reconnects and new requests can be made again
-            var response = await gremlinClient.SubmitWithSingleResultAsync<String>(RequestMessage.Build("1")
-                .OverrideRequestId(Settings.PerRequestSettingsRequestId)
-                .AddArgument(Tokens.ArgsEvalTimeout, 1234)
-                .AddArgument(Tokens.ArgsBatchSize, 12)
-                .AddArgument(Tokens.ArgsUserAgent, "helloWorld")
-                .AddArgument(Tokens.ArgMaterializeProperties, "tokens")
-                .Create());
-
-            var expectedResponse = $"requestId={Settings.PerRequestSettingsRequestId} evaluationTimeout=1234, batchSize=12, userAgent=helloWorld, materializeProperties=tokens";
-            Assert.Equal(expectedResponse, response);
-        }
-    }
-}
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientTests.cs
index 25af405bcb..a91dfe8aab 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientTests.cs
@@ -23,8 +23,6 @@
 
 using System;
 using System.Collections.Generic;
-using System.Net.WebSockets;
-using System.Threading;
 using System.Threading.Tasks;
 using Gremlin.Net.Driver;
 using Gremlin.Net.Driver.Exceptions;
@@ -43,8 +41,8 @@ namespace Gremlin.Net.IntegrationTest.Driver
         private static readonly int TestPort = Convert.ToInt32(ConfigProvider.Configuration["TestServerPort"]);
 
         [Theory]
-        [InlineData("'justAString'", "justAString")]
-        [InlineData("'Hello' + 'World'", "HelloWorld")]
+        [InlineData("g.inject('justAString')", "justAString")]
+        [InlineData("g.inject('HelloWorld')", "HelloWorld")]
         public async Task ShouldSendScriptForEvaluationAndReturnCorrectResult(string requestMsg, string expectedResponse)
         {
             var gremlinServer = new GremlinServer(TestHost, TestPort);
@@ -62,12 +60,11 @@ namespace Gremlin.Net.IntegrationTest.Driver
             var gremlinServer = new GremlinServer(TestHost, TestPort);
             using (var gremlinClient = new GremlinClient(gremlinServer))
             {
-                var responseMsgSize = 5000;
-                var requestMsg = $"'1'*{responseMsgSize}";
+                var requestMsg = "g.inject(1,2,3,4,5,6,7,8,9,10)";
 
-                var response = await gremlinClient.SubmitWithSingleResultAsync<string>(requestMsg);
+                var response = await gremlinClient.SubmitAsync<int>(requestMsg);
 
-                Assert.Equal(responseMsgSize, response!.Length);
+                Assert.Equal(10, response.Count);
             }
         }
 
@@ -77,15 +74,10 @@ namespace Gremlin.Net.IntegrationTest.Driver
             var gremlinServer = new GremlinServer(TestHost, TestPort);
             using (var gremlinClient = new GremlinClient(gremlinServer))
             {
-                var gremlinScript = "g.V().has(propertyKey, propertyValue);";
-                var bindings = new Dictionary<string, object>
-                {
-                    {"propertyKey", "name"},
-                    {"propertyValue", "unknownTestName"}
-                };
+                var gremlinScript = "g.V().has('name','unknownTestName')";
 
                 var response =
-                    await gremlinClient.SubmitWithSingleResultAsync<object>(gremlinScript, bindings);
+                    await gremlinClient.SubmitWithSingleResultAsync<object>(gremlinScript);
 
                 Assert.Null(response);
             }
@@ -103,41 +95,16 @@ namespace Gremlin.Net.IntegrationTest.Driver
                     await Assert.ThrowsAsync<ResponseException>(() => gremlinClient.SubmitAsync(requestMsg));
 
                 Assert.Equal(typeof(ResponseException), exception.GetType());
-                Assert.Contains($"ServerEvaluationError: No such property: {requestMsg}",
-                    exception.Message);
+                Assert.Contains("Failed to interpret Gremlin query", exception.Message);
             }
         }
 
-        [Fact]
-        public async Task ShouldSupportCancellation()
-        {
-            var gremlinServer = new GremlinServer(TestHost, TestPort);
-            using var gremlinClient = new GremlinClient(gremlinServer);
-            const int sleepTime = 5000;
-            var requestMsg = _requestMessageProvider.GetSleepMessage(sleepTime);
-            var cts = new CancellationTokenSource();
-
-            var submitTask = gremlinClient.SubmitAsync<object>(requestMsg, cts.Token);
-            await Task.Delay(TimeSpan.FromMilliseconds(sleepTime * 0.1), CancellationToken.None);
-            cts.Cancel();
-
-            await Assert.ThrowsAsync<TaskCanceledException>(() => submitTask);
-            Assert.True(submitTask.IsCanceled);
-        }
-
         [Fact]
         public async Task ShouldReassembleResponseBatches()
         {
-            const int batchSize = 2;
             var expectedResult = new List<int> {1, 2, 3, 4, 5};
-            var requestScript = $"{nameof(expectedResult)}";
-            var bindings = new Dictionary<string, object> {{nameof(expectedResult), expectedResult}};
-            var requestMessage =
-                RequestMessage.Build(Tokens.OpsEval)
-                    .AddArgument(Tokens.ArgsBatchSize, batchSize)
-                    .AddArgument(Tokens.ArgsGremlin, requestScript)
-                    .AddArgument(Tokens.ArgsBindings, bindings)
-                    .Create();
+            var requestScript = "g.inject(1,2,3,4,5)";
+            var requestMessage = RequestMessage.Build(requestScript).Create();
             var gremlinServer = new GremlinServer(TestHost, TestPort);
             using (var gremlinClient = new GremlinClient(gremlinServer))
             {
@@ -147,31 +114,6 @@ namespace Gremlin.Net.IntegrationTest.Driver
             }
         }
 
-        [Fact]
-        public async Task ShouldCorrectlyAssignResponsesToRequests()
-        {
-            var gremlinServer = new GremlinServer(TestHost, TestPort);
-            using (var gremlinClient = new GremlinClient(gremlinServer))
-            {
-                var sleepTime = 100;
-                var expectedFirstResult = 1;
-                var gremlinScript = _requestMessageProvider.GetSleepGremlinScript(sleepTime);
-                gremlinScript += $"{expectedFirstResult}";
-                var firstRequestMsg = RequestMessage.Build(Tokens.OpsEval)
-                    .AddArgument(Tokens.ArgsGremlin, gremlinScript).Create();
-                var expectedSecondResponse = 2;
-                var secondScript = $"{expectedSecondResponse}";
-
-                var firstResponseTask = gremlinClient.SubmitWithSingleResultAsync<int>(firstRequestMsg);
-                var secondResponseTask = gremlinClient.SubmitWithSingleResultAsync<int>(secondScript);
-
-                var secondResponse = await secondResponseTask;
-                Assert.Equal(expectedSecondResponse, secondResponse);
-                var firstResponse = await firstResponseTask;
-                Assert.Equal(expectedFirstResult, firstResponse);
-            }
-        }
-
         [Fact]
         public async Task ShouldReturnEnumerableResult()
         {
@@ -179,10 +121,9 @@ namespace Gremlin.Net.IntegrationTest.Driver
             using (var gremlinClient = new GremlinClient(gremlinServer))
             {
                 var expectedResult = new List<int> {1, 2, 3, 4, 5};
-                var requestMsg = $"{nameof(expectedResult)}";
-                var bindings = new Dictionary<string, object> {{nameof(expectedResult), expectedResult}};
+                var requestMsg = "g.inject(1,2,3,4,5)";
 
-                var response = await gremlinClient.SubmitAsync<int>(requestMsg, bindings);
+                var response = await gremlinClient.SubmitAsync<int>(requestMsg);
 
                 Assert.Equal(expectedResult, response);
             }
@@ -197,7 +138,6 @@ namespace Gremlin.Net.IntegrationTest.Driver
             var resultSet = await gremlinClient.SubmitAsync<int>(requestMsg);
 
             Assert.NotNull(resultSet.StatusAttributes);
-            Assert.True(resultSet.StatusAttributes.ContainsKey("host"));
         }
 
         [Fact]
@@ -230,71 +170,15 @@ namespace Gremlin.Net.IntegrationTest.Driver
             var gremlinServer = new GremlinServer(TestHost, TestPort);
             using (var gremlinClient = new GremlinClient(gremlinServer))
             {
-                var requestMsg = "a + b";
-                var a = 1;
-                var b = 2;
-                var bindings = new Dictionary<string, object> {{"a", a}, {"b", b}};
+                var requestMsg = "g.inject(3)";
 
                 var response =
... 5102 lines suppressed ...