Merge pull request #6847 from jtattermusch/optimizations_backport

Backport wrapper optimizations and microbenchmarks (to 3.10.x)
diff --git a/Makefile.am b/Makefile.am
index 1e36aae..e807d8b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -79,12 +79,15 @@
   csharp/src/AddressBook/ListPeople.cs                                       \
   csharp/src/AddressBook/Program.cs                                          \
   csharp/src/AddressBook/SampleUsage.cs                                      \
-  csharp/src/Google.Protobuf.Benchmarks/SerializationConfig.cs               \
-  csharp/src/Google.Protobuf.Benchmarks/SerializationBenchmark.cs            \
-  csharp/src/Google.Protobuf.Benchmarks/Program.cs                           \
-  csharp/src/Google.Protobuf.Benchmarks/Google.Protobuf.Benchmarks.csproj    \
-  csharp/src/Google.Protobuf.Benchmarks/Benchmarks.cs                        \
   csharp/src/Google.Protobuf.Benchmarks/BenchmarkMessage1Proto3.cs           \
+  csharp/src/Google.Protobuf.Benchmarks/Benchmarks.cs                        \
+  csharp/src/Google.Protobuf.Benchmarks/Google.Protobuf.Benchmarks.csproj    \
+  csharp/src/Google.Protobuf.Benchmarks/Program.cs                           \
+  csharp/src/Google.Protobuf.Benchmarks/SerializationBenchmark.cs            \
+  csharp/src/Google.Protobuf.Benchmarks/SerializationConfig.cs               \
+  csharp/src/Google.Protobuf.Benchmarks/wrapper_benchmark_messages.proto     \
+  csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmark.cs                  \
+  csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmarkMessages.cs          \
   csharp/src/Google.Protobuf.Conformance/Conformance.cs                      \
   csharp/src/Google.Protobuf.Conformance/Google.Protobuf.Conformance.csproj  \
   csharp/src/Google.Protobuf.Conformance/Program.cs                          \
diff --git a/csharp/generate_protos.sh b/csharp/generate_protos.sh
index 1041c94..1615196 100755
--- a/csharp/generate_protos.sh
+++ b/csharp/generate_protos.sh
@@ -70,3 +70,8 @@
   benchmarks/datasets/google_message1/proto3/*.proto \
   benchmarks/benchmarks.proto \
   --csharp_out=csharp/src/Google.Protobuf.Benchmarks
+
+# C# only benchmark protos
+$PROTOC -Isrc -Icsharp/src/Google.Protobuf.Benchmarks \
+  csharp/src/Google.Protobuf.Benchmarks/*.proto \
+  --csharp_out=csharp/src/Google.Protobuf.Benchmarks
diff --git a/csharp/src/Google.Protobuf.Benchmarks/Program.cs b/csharp/src/Google.Protobuf.Benchmarks/Program.cs
index 66f71d1..1f77a26 100644
--- a/csharp/src/Google.Protobuf.Benchmarks/Program.cs
+++ b/csharp/src/Google.Protobuf.Benchmarks/Program.cs
@@ -34,13 +34,16 @@
 
 namespace Google.Protobuf.Benchmarks
 {
-    /// <summary>
-    /// Entry point, that currently runs the sole benchmark we have.
-    /// Eventually we might want to be able to specify a particular dataset
-    /// from the command line.
-    /// </summary>
     class Program
     {
-        static void Main() => BenchmarkRunner.Run<SerializationBenchmark>();
+        // typical usage: dotnet run -c Release -f netcoreapp2.1
+        // (this can profile both .net core and .net framework; for some reason
+        // if you start from "-f net461", it goes horribly wrong)
+        public static void Main(string[] args)
+        {
+            BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
+        }
     }
+
+    
 }
diff --git a/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmark.cs b/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmark.cs
new file mode 100644
index 0000000..ae17c18
--- /dev/null
+++ b/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmark.cs
@@ -0,0 +1,102 @@
+#region Copyright notice and license
+// Protocol Buffers - Google's data interchange format
+// Copyright 2019 Google Inc.  All rights reserved.
+// https://github.com/protocolbuffers/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#endregion
+
+using BenchmarkDotNet.Attributes;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+namespace Google.Protobuf.Benchmarks
+{
+    /// <summary>
+    /// Benchmark that tests serialization/deserialization of wrapper fields.
+    /// </summary>
+    [MemoryDiagnoser]
+    public class WrapperBenchmark
+    {
+        byte[] manyWrapperFieldsData;
+        byte[] manyPrimitiveFieldsData;
+
+        [GlobalSetup]
+        public void GlobalSetup()
+        {
+            manyWrapperFieldsData = CreateManyWrapperFieldsMessage().ToByteArray();
+            manyPrimitiveFieldsData = CreateManyPrimitiveFieldsMessage().ToByteArray();
+        }
+
+        [Benchmark]
+        public ManyWrapperFieldsMessage ParseWrapperFields()
+        {
+            return ManyWrapperFieldsMessage.Parser.ParseFrom(manyWrapperFieldsData);
+        }
+
+        [Benchmark]
+        public ManyPrimitiveFieldsMessage ParsePrimitiveFields()
+        {
+            return ManyPrimitiveFieldsMessage.Parser.ParseFrom(manyPrimitiveFieldsData);
+        }
+
+        private static ManyWrapperFieldsMessage CreateManyWrapperFieldsMessage()
+        {
+            // Example data match data of an internal benchmarks
+            return new ManyWrapperFieldsMessage()
+            {
+                Int64Field19 = 123,
+                Int64Field37 = 1000032,
+                Int64Field26 = 3453524500,
+                DoubleField79 = 1.2,
+                DoubleField25 = 234,
+                DoubleField9 = 123.3,
+                DoubleField28 = 23,
+                DoubleField7 = 234,
+                DoubleField50 = 2.45
+            };
+        }
+
+        private static ManyPrimitiveFieldsMessage CreateManyPrimitiveFieldsMessage()
+        {
+            // Example data match data of an internal benchmarks
+            return new ManyPrimitiveFieldsMessage()
+            {
+                Int64Field19 = 123,
+                Int64Field37 = 1000032,
+                Int64Field26 = 3453524500,
+                DoubleField79 = 1.2,
+                DoubleField25 = 234,
+                DoubleField9 = 123.3,
+                DoubleField28 = 23,
+                DoubleField7 = 234,
+                DoubleField50 = 2.45
+            };
+        }
+    }
+}
diff --git a/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmarkMessages.cs b/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmarkMessages.cs
new file mode 100644
index 0000000..0cc86e2
--- /dev/null
+++ b/csharp/src/Google.Protobuf.Benchmarks/WrapperBenchmarkMessages.cs
@@ -0,0 +1,7294 @@
+// <auto-generated>
+//     Generated by the protocol buffer compiler.  DO NOT EDIT!
+//     source: wrapper_benchmark_messages.proto
+// </auto-generated>
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Google.Protobuf.Benchmarks {
+
+  /// <summary>Holder for reflection information generated from wrapper_benchmark_messages.proto</summary>
+  public static partial class WrapperBenchmarkMessagesReflection {
+
+    #region Descriptor
+    /// <summary>File descriptor for wrapper_benchmark_messages.proto</summary>
+    public static pbr::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbr::FileDescriptor descriptor;
+
+    static WrapperBenchmarkMessagesReflection() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "CiB3cmFwcGVyX2JlbmNobWFya19tZXNzYWdlcy5wcm90bxIaZ29vZ2xlLnBy",
+            "b3RvYnVmLmJlbmNobWFya3MaHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5w",
+            "cm90byLeLgoYTWFueVdyYXBwZXJGaWVsZHNNZXNzYWdlEjUKD2RvdWJsZV9m",
+            "aWVsZF85NRhfIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0",
+            "Cg5kb3VibGVfZmllbGRfMRgBIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
+            "bGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNzkYTyABKAsyHC5nb29nbGUucHJv",
+            "dG9idWYuRG91YmxlVmFsdWUSMgoNaW50NjRfZmllbGRfMhgCIAEoCzIbLmdv",
+            "b2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjUKD2RvdWJsZV9maWVsZF85Nhhg",
+            "IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRIyCg1pbnQ2NF9m",
+            "aWVsZF8zGAMgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSMgoN",
+            "aW50NjRfZmllbGRfNBgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZh",
+            "bHVlEjUKD2RvdWJsZV9maWVsZF85NxhhIAEoCzIcLmdvb2dsZS5wcm90b2J1",
+            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNjUYQSABKAsyHC5nb29n",
+            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzY2GEIg",
+            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjQKDmRvdWJsZV9m",
+            "aWVsZF83GAcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUK",
+            "D2RvdWJsZV9maWVsZF82Mhg+IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
+            "bGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTE4GHYgASgLMhwuZ29vZ2xlLnBy",
+            "b3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8xMTkYdyABKAsy",
+            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxk",
+            "XzY3GEMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRv",
+            "dWJsZV9maWVsZF8xMjAYeCABKAsyHC5nb29nbGUucHJvdG9idWYuRG91Ymxl",
+            "VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzEyMRh5IAEoCzIcLmdvb2dsZS5wcm90",
+            "b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTIyGHogASgLMhwu",
+            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8x",
+            "MjMYeyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNgoQZG91",
+            "YmxlX2ZpZWxkXzEyNBh8IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVW",
+            "YWx1ZRI0Cg5kb3VibGVfZmllbGRfOBgIIAEoCzIcLmdvb2dsZS5wcm90b2J1",
+            "Zi5Eb3VibGVWYWx1ZRI0Cg5kb3VibGVfZmllbGRfORgJIAEoCzIcLmdvb2ds",
+            "ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTgYYiAB",
+            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2Zp",
+            "ZWxkXzEwGAogASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUK",
+            "D2RvdWJsZV9maWVsZF8xMRgLIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
+            "bGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTkYYyABKAsyHC5nb29nbGUucHJv",
+            "dG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzg0GFQgASgLMhwu",
+            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF8x",
+            "NBgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3Vi",
+            "bGVfZmllbGRfNzcYTSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFs",
+            "dWUSNQoPZG91YmxlX2ZpZWxkXzE1GA8gASgLMhwuZ29vZ2xlLnByb3RvYnVm",
+            "LkRvdWJsZVZhbHVlEjMKDmludDY0X2ZpZWxkXzE5GBMgASgLMhsuZ29vZ2xl",
+            "LnByb3RvYnVmLkludDY0VmFsdWUSNAoPaW50NjRfZmllbGRfMTE1GHMgASgL",
+            "MhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSNgoQZG91YmxlX2ZpZWxk",
+            "XzExNhh0IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0Cg9p",
+            "bnQ2NF9maWVsZF8xMTcYdSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRW",
+            "YWx1ZRI1Cg9kb3VibGVfZmllbGRfMjAYFCABKAsyHC5nb29nbGUucHJvdG9i",
+            "dWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzIxGBUgASgLMhwuZ29v",
+            "Z2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD3N0cmluZ19maWVsZF83MxhJ",
+            "IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI1Cg9zdHJpbmdf",
+            "ZmllbGRfNzQYSiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUS",
+            "NQoPZG91YmxlX2ZpZWxkXzIyGBYgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRv",
+            "dWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF82ORhFIAEoCzIcLmdvb2dsZS5w",
+            "cm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNzAYRiABKAsy",
+            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxk",
+            "XzcxGEcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2Rv",
+            "dWJsZV9maWVsZF83MhhIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVW",
+            "YWx1ZRI1Cg9kb3VibGVfZmllbGRfMjUYGSABKAsyHC5nb29nbGUucHJvdG9i",
+            "dWYuRG91YmxlVmFsdWUSMwoOaW50NjRfZmllbGRfMjYYGiABKAsyGy5nb29n",
+            "bGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNjgYRCAB",
+            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2Zp",
+            "ZWxkXzI4GBwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYK",
+            "EGRvdWJsZV9maWVsZF8xMDYYaiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
+            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzI5GB0gASgLMhwuZ29vZ2xlLnBy",
+            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF8zMBgeIAEoCzIc",
+            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRf",
+            "MTAxGGUgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRv",
+            "dWJsZV9maWVsZF8xMDIYZiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91Ymxl",
+            "VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzEwMxhnIAEoCzIcLmdvb2dsZS5wcm90",
+            "b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTA0GGggASgLMhwu",
+            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8x",
+            "MDUYaSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
+            "YmxlX2ZpZWxkXzMxGB8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
+            "bHVlEjMKDmludDY0X2ZpZWxkXzMyGCAgASgLMhsuZ29vZ2xlLnByb3RvYnVm",
+            "LkludDY0VmFsdWUSNQoPZG91YmxlX2ZpZWxkXzc1GEsgASgLMhwuZ29vZ2xl",
+            "LnByb3RvYnVmLkRvdWJsZVZhbHVlEjcKEGRvdWJsZV9maWVsZF8xMjkYgQEg",
+            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEhUKDWVudW1fZmll",
+            "bGRfODAYUCABKAUSFQoNZW51bV9maWVsZF84MRhRIAEoBRIzCg5pbnQ2NF9m",
+            "aWVsZF84MhhSIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEhUK",
+            "DWVudW1fZmllbGRfODMYUyABKAUSMwoOaW50NjRfZmllbGRfODUYVSABKAsy",
+            "Gy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRIzCg5pbnQ2NF9maWVsZF84",
+            "NhhWIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjMKDmludDY0",
+            "X2ZpZWxkXzg3GFcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUS",
+            "NAoPaW50NjRfZmllbGRfMTI1GH0gASgLMhsuZ29vZ2xlLnByb3RvYnVmLklu",
+            "dDY0VmFsdWUSMwoOaW50NjRfZmllbGRfMzcYJSABKAsyGy5nb29nbGUucHJv",
+            "dG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfMzgYJiABKAsyHC5n",
+            "b29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMQoMaW50ZXJhY3Rpb25zGCcg",
+            "ASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSHgoWcmVwZWF0ZWRf",
+            "aW50X2ZpZWxkXzEwMBhkIAMoBRI1Cg9kb3VibGVfZmllbGRfNDAYKCABKAsy",
+            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMwoOaW50NjRfZmllbGRf",
+            "NDEYKSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI0Cg9pbnQ2",
+            "NF9maWVsZF8xMjYYfiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1",
+            "ZRI0Cg9pbnQ2NF9maWVsZF8xMjcYfyABKAsyGy5nb29nbGUucHJvdG9idWYu",
+            "SW50NjRWYWx1ZRI3ChBkb3VibGVfZmllbGRfMTI4GIABIAEoCzIcLmdvb2ds",
+            "ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTA5GG0g",
+            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjQKD2ludDY0X2Zp",
+            "ZWxkXzExMBhuIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjYK",
+            "EGRvdWJsZV9maWVsZF8xMTEYbyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
+            "YmxlVmFsdWUSNAoPaW50NjRfZmllbGRfMTEyGHAgASgLMhsuZ29vZ2xlLnBy",
+            "b3RvYnVmLkludDY0VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzExMxhxIAEoCzIc",
+            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0Cg9pbnQ2NF9maWVsZF8x",
+            "MTQYciABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3Vi",
+            "bGVfZmllbGRfNDIYKiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFs",
+            "dWUSMwoOaW50NjRfZmllbGRfNDMYKyABKAsyGy5nb29nbGUucHJvdG9idWYu",
+            "SW50NjRWYWx1ZRIzCg5pbnQ2NF9maWVsZF80NBgsIAEoCzIbLmdvb2dsZS5w",
+            "cm90b2J1Zi5JbnQ2NFZhbHVlEjUKD2RvdWJsZV9maWVsZF80NRgtIAEoCzIc",
+            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
+            "NDYYLiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
+            "YmxlX2ZpZWxkXzc4GE4gASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
+            "bHVlEjUKD2RvdWJsZV9maWVsZF84OBhYIAEoCzIcLmdvb2dsZS5wcm90b2J1",
+            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNDcYLyABKAsyHC5nb29n",
+            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzg5GFkg",
+            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9m",
+            "aWVsZF80OBgwIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1",
+            "Cg9kb3VibGVfZmllbGRfNDkYMSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
+            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzUwGDIgASgLMhwuZ29vZ2xlLnBy",
+            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF85MBhaIAEoCzIc",
+            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
+            "NTEYMyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
+            "YmxlX2ZpZWxkXzkxGFsgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
+            "bHVlEjUKD2RvdWJsZV9maWVsZF85MhhcIAEoCzIcLmdvb2dsZS5wcm90b2J1",
+            "Zi5Eb3VibGVWYWx1ZRI0Cg9pbnQ2NF9maWVsZF8xMDcYayABKAsyGy5nb29n",
+            "bGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTMYXSAB",
+            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNgoQZG91YmxlX2Zp",
+            "ZWxkXzEwOBhsIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1",
+            "Cg9kb3VibGVfZmllbGRfNTIYNCABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
+            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzUzGDUgASgLMhwuZ29vZ2xlLnBy",
+            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF85NBheIAEoCzIc",
+            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
+            "NTQYNiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
+            "YmxlX2ZpZWxkXzU1GDcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
+            "bHVlEjUKD2RvdWJsZV9maWVsZF81Nhg4IAEoCzIcLmdvb2dsZS5wcm90b2J1",
+            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNTcYOSABKAsyHC5nb29n",
+            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzU4GDog",
+            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjMKDmludDY0X2Zp",
+            "ZWxkXzU5GDsgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSMwoO",
+            "aW50NjRfZmllbGRfNjAYPCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRW",
+            "YWx1ZSLwFQoaTWFueVByaW1pdGl2ZUZpZWxkc01lc3NhZ2USFwoPZG91Ymxl",
+            "X2ZpZWxkXzk1GF8gASgBEhYKDmRvdWJsZV9maWVsZF8xGAEgASgBEhcKD2Rv",
+            "dWJsZV9maWVsZF83ORhPIAEoARIVCg1pbnQ2NF9maWVsZF8yGAIgASgDEhcK",
+            "D2RvdWJsZV9maWVsZF85NhhgIAEoARIVCg1pbnQ2NF9maWVsZF8zGAMgASgD",
+            "EhUKDWludDY0X2ZpZWxkXzQYBCABKAMSFwoPZG91YmxlX2ZpZWxkXzk3GGEg",
+            "ASgBEhcKD2RvdWJsZV9maWVsZF82NRhBIAEoARIXCg9kb3VibGVfZmllbGRf",
+            "NjYYQiABKAESFgoOZG91YmxlX2ZpZWxkXzcYByABKAESFwoPZG91YmxlX2Zp",
+            "ZWxkXzYyGD4gASgBEhgKEGRvdWJsZV9maWVsZF8xMTgYdiABKAESGAoQZG91",
+            "YmxlX2ZpZWxkXzExORh3IAEoARIXCg9kb3VibGVfZmllbGRfNjcYQyABKAES",
+            "GAoQZG91YmxlX2ZpZWxkXzEyMBh4IAEoARIYChBkb3VibGVfZmllbGRfMTIx",
+            "GHkgASgBEhgKEGRvdWJsZV9maWVsZF8xMjIYeiABKAESGAoQZG91YmxlX2Zp",
+            "ZWxkXzEyMxh7IAEoARIYChBkb3VibGVfZmllbGRfMTI0GHwgASgBEhYKDmRv",
+            "dWJsZV9maWVsZF84GAggASgBEhYKDmRvdWJsZV9maWVsZF85GAkgASgBEhcK",
+            "D2RvdWJsZV9maWVsZF85OBhiIAEoARIXCg9kb3VibGVfZmllbGRfMTAYCiAB",
+            "KAESFwoPZG91YmxlX2ZpZWxkXzExGAsgASgBEhcKD2RvdWJsZV9maWVsZF85",
+            "ORhjIAEoARIXCg9kb3VibGVfZmllbGRfODQYVCABKAESFwoPZG91YmxlX2Zp",
+            "ZWxkXzE0GA4gASgBEhcKD2RvdWJsZV9maWVsZF83NxhNIAEoARIXCg9kb3Vi",
+            "bGVfZmllbGRfMTUYDyABKAESFgoOaW50NjRfZmllbGRfMTkYEyABKAMSFwoP",
+            "aW50NjRfZmllbGRfMTE1GHMgASgDEhgKEGRvdWJsZV9maWVsZF8xMTYYdCAB",
+            "KAESFwoPaW50NjRfZmllbGRfMTE3GHUgASgDEhcKD2RvdWJsZV9maWVsZF8y",
+            "MBgUIAEoARIXCg9kb3VibGVfZmllbGRfMjEYFSABKAESFwoPc3RyaW5nX2Zp",
+            "ZWxkXzczGEkgASgJEhcKD3N0cmluZ19maWVsZF83NBhKIAEoCRIXCg9kb3Vi",
+            "bGVfZmllbGRfMjIYFiABKAESFwoPZG91YmxlX2ZpZWxkXzY5GEUgASgBEhcK",
+            "D2RvdWJsZV9maWVsZF83MBhGIAEoARIXCg9kb3VibGVfZmllbGRfNzEYRyAB",
+            "KAESFwoPZG91YmxlX2ZpZWxkXzcyGEggASgBEhcKD2RvdWJsZV9maWVsZF8y",
+            "NRgZIAEoARIWCg5pbnQ2NF9maWVsZF8yNhgaIAEoAxIXCg9kb3VibGVfZmll",
+            "bGRfNjgYRCABKAESFwoPZG91YmxlX2ZpZWxkXzI4GBwgASgBEhgKEGRvdWJs",
+            "ZV9maWVsZF8xMDYYaiABKAESFwoPZG91YmxlX2ZpZWxkXzI5GB0gASgBEhcK",
+            "D2RvdWJsZV9maWVsZF8zMBgeIAEoARIYChBkb3VibGVfZmllbGRfMTAxGGUg",
+            "ASgBEhgKEGRvdWJsZV9maWVsZF8xMDIYZiABKAESGAoQZG91YmxlX2ZpZWxk",
+            "XzEwMxhnIAEoARIYChBkb3VibGVfZmllbGRfMTA0GGggASgBEhgKEGRvdWJs",
+            "ZV9maWVsZF8xMDUYaSABKAESFwoPZG91YmxlX2ZpZWxkXzMxGB8gASgBEhYK",
+            "DmludDY0X2ZpZWxkXzMyGCAgASgDEhcKD2RvdWJsZV9maWVsZF83NRhLIAEo",
+            "ARIZChBkb3VibGVfZmllbGRfMTI5GIEBIAEoARIVCg1lbnVtX2ZpZWxkXzgw",
+            "GFAgASgFEhUKDWVudW1fZmllbGRfODEYUSABKAUSFgoOaW50NjRfZmllbGRf",
+            "ODIYUiABKAMSFQoNZW51bV9maWVsZF84MxhTIAEoBRIWCg5pbnQ2NF9maWVs",
+            "ZF84NRhVIAEoAxIWCg5pbnQ2NF9maWVsZF84NhhWIAEoAxIWCg5pbnQ2NF9m",
+            "aWVsZF84NxhXIAEoAxIXCg9pbnQ2NF9maWVsZF8xMjUYfSABKAMSFgoOaW50",
+            "NjRfZmllbGRfMzcYJSABKAMSFwoPZG91YmxlX2ZpZWxkXzM4GCYgASgBEhQK",
+            "DGludGVyYWN0aW9ucxgnIAEoAxIeChZyZXBlYXRlZF9pbnRfZmllbGRfMTAw",
+            "GGQgAygFEhcKD2RvdWJsZV9maWVsZF80MBgoIAEoARIWCg5pbnQ2NF9maWVs",
+            "ZF80MRgpIAEoAxIXCg9pbnQ2NF9maWVsZF8xMjYYfiABKAMSFwoPaW50NjRf",
+            "ZmllbGRfMTI3GH8gASgDEhkKEGRvdWJsZV9maWVsZF8xMjgYgAEgASgBEhgK",
+            "EGRvdWJsZV9maWVsZF8xMDkYbSABKAESFwoPaW50NjRfZmllbGRfMTEwGG4g",
+            "ASgDEhgKEGRvdWJsZV9maWVsZF8xMTEYbyABKAESFwoPaW50NjRfZmllbGRf",
+            "MTEyGHAgASgDEhgKEGRvdWJsZV9maWVsZF8xMTMYcSABKAESFwoPaW50NjRf",
+            "ZmllbGRfMTE0GHIgASgDEhcKD2RvdWJsZV9maWVsZF80MhgqIAEoARIWCg5p",
+            "bnQ2NF9maWVsZF80MxgrIAEoAxIWCg5pbnQ2NF9maWVsZF80NBgsIAEoAxIX",
+            "Cg9kb3VibGVfZmllbGRfNDUYLSABKAESFwoPZG91YmxlX2ZpZWxkXzQ2GC4g",
+            "ASgBEhcKD2RvdWJsZV9maWVsZF83OBhOIAEoARIXCg9kb3VibGVfZmllbGRf",
+            "ODgYWCABKAESFwoPZG91YmxlX2ZpZWxkXzQ3GC8gASgBEhcKD2RvdWJsZV9m",
+            "aWVsZF84ORhZIAEoARIXCg9kb3VibGVfZmllbGRfNDgYMCABKAESFwoPZG91",
+            "YmxlX2ZpZWxkXzQ5GDEgASgBEhcKD2RvdWJsZV9maWVsZF81MBgyIAEoARIX",
+            "Cg9kb3VibGVfZmllbGRfOTAYWiABKAESFwoPZG91YmxlX2ZpZWxkXzUxGDMg",
+            "ASgBEhcKD2RvdWJsZV9maWVsZF85MRhbIAEoARIXCg9kb3VibGVfZmllbGRf",
+            "OTIYXCABKAESFwoPaW50NjRfZmllbGRfMTA3GGsgASgDEhcKD2RvdWJsZV9m",
+            "aWVsZF85MxhdIAEoARIYChBkb3VibGVfZmllbGRfMTA4GGwgASgBEhcKD2Rv",
+            "dWJsZV9maWVsZF81Mhg0IAEoARIXCg9kb3VibGVfZmllbGRfNTMYNSABKAES",
+            "FwoPZG91YmxlX2ZpZWxkXzk0GF4gASgBEhcKD2RvdWJsZV9maWVsZF81NBg2",
+            "IAEoARIXCg9kb3VibGVfZmllbGRfNTUYNyABKAESFwoPZG91YmxlX2ZpZWxk",
+            "XzU2GDggASgBEhcKD2RvdWJsZV9maWVsZF81Nxg5IAEoARIXCg9kb3VibGVf",
+            "ZmllbGRfNTgYOiABKAESFgoOaW50NjRfZmllbGRfNTkYOyABKAMSFgoOaW50",
+            "NjRfZmllbGRfNjAYPCABKANiBnByb3RvMw=="));
+      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+          new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, },
+          new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
+            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Benchmarks.ManyWrapperFieldsMessage), global::Google.Protobuf.Benchmarks.ManyWrapperFieldsMessage.Parser, new[]{ "DoubleField95", "DoubleField1", "DoubleField79", "Int64Field2", "DoubleField96", "Int64Field3", "Int64Field4", "DoubleField97", "DoubleField65", "DoubleField66", "DoubleField7", "DoubleField62", "DoubleField118", "DoubleField119", "DoubleField67", "DoubleField120", "DoubleField121", "DoubleField122", "DoubleField123", "DoubleField124", "DoubleField8", "DoubleField9", "DoubleField98", "DoubleField10", "DoubleField11", "DoubleField99", "DoubleField84", "DoubleField14", "DoubleField77", "DoubleField15", "Int64Field19", "Int64Field115", "DoubleField116", "Int64Field117", "DoubleField20", "DoubleField21", "StringField73", "StringField74", "DoubleField22", "DoubleField69", "DoubleField70", "DoubleField71", "DoubleField72", "DoubleField25", "Int64Field26", "DoubleField68", "DoubleField28", "DoubleField106", "DoubleField29", "DoubleField30", "DoubleField101", "DoubleField102", "DoubleField103", "DoubleField104", "DoubleField105", "DoubleField31", "Int64Field32", "DoubleField75", "DoubleField129", "EnumField80", "EnumField81", "Int64Field82", "EnumField83", "Int64Field85", "Int64Field86", "Int64Field87", "Int64Field125", "Int64Field37", "DoubleField38", "Interactions", "RepeatedIntField100", "DoubleField40", "Int64Field41", "Int64Field126", "Int64Field127", "DoubleField128", "DoubleField109", "Int64Field110", "DoubleField111", "Int64Field112", "DoubleField113", "Int64Field114", "DoubleField42", "Int64Field43", "Int64Field44", "DoubleField45", "DoubleField46", "DoubleField78", "DoubleField88", "DoubleField47", "DoubleField89", "DoubleField48", "DoubleField49", "DoubleField50", "DoubleField90", "DoubleField51", "DoubleField91", "DoubleField92", "Int64Field107", "DoubleField93", "DoubleField108", "DoubleField52", "DoubleField53", "DoubleField94", "DoubleField54", "DoubleField55", "DoubleField56", "DoubleField57", "DoubleField58", "Int64Field59", "Int64Field60" }, null, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Benchmarks.ManyPrimitiveFieldsMessage), global::Google.Protobuf.Benchmarks.ManyPrimitiveFieldsMessage.Parser, new[]{ "DoubleField95", "DoubleField1", "DoubleField79", "Int64Field2", "DoubleField96", "Int64Field3", "Int64Field4", "DoubleField97", "DoubleField65", "DoubleField66", "DoubleField7", "DoubleField62", "DoubleField118", "DoubleField119", "DoubleField67", "DoubleField120", "DoubleField121", "DoubleField122", "DoubleField123", "DoubleField124", "DoubleField8", "DoubleField9", "DoubleField98", "DoubleField10", "DoubleField11", "DoubleField99", "DoubleField84", "DoubleField14", "DoubleField77", "DoubleField15", "Int64Field19", "Int64Field115", "DoubleField116", "Int64Field117", "DoubleField20", "DoubleField21", "StringField73", "StringField74", "DoubleField22", "DoubleField69", "DoubleField70", "DoubleField71", "DoubleField72", "DoubleField25", "Int64Field26", "DoubleField68", "DoubleField28", "DoubleField106", "DoubleField29", "DoubleField30", "DoubleField101", "DoubleField102", "DoubleField103", "DoubleField104", "DoubleField105", "DoubleField31", "Int64Field32", "DoubleField75", "DoubleField129", "EnumField80", "EnumField81", "Int64Field82", "EnumField83", "Int64Field85", "Int64Field86", "Int64Field87", "Int64Field125", "Int64Field37", "DoubleField38", "Interactions", "RepeatedIntField100", "DoubleField40", "Int64Field41", "Int64Field126", "Int64Field127", "DoubleField128", "DoubleField109", "Int64Field110", "DoubleField111", "Int64Field112", "DoubleField113", "Int64Field114", "DoubleField42", "Int64Field43", "Int64Field44", "DoubleField45", "DoubleField46", "DoubleField78", "DoubleField88", "DoubleField47", "DoubleField89", "DoubleField48", "DoubleField49", "DoubleField50", "DoubleField90", "DoubleField51", "DoubleField91", "DoubleField92", "Int64Field107", "DoubleField93", "DoubleField108", "DoubleField52", "DoubleField53", "DoubleField94", "DoubleField54", "DoubleField55", "DoubleField56", "DoubleField57", "DoubleField58", "Int64Field59", "Int64Field60" }, null, null, null, null)
+          }));
+    }
+    #endregion
+
+  }
+  #region Messages
+  /// <summary>
+  /// a message that has a large number of wrapper fields
+  /// obfuscated version of an internal message
+  /// </summary>
+  public sealed partial class ManyWrapperFieldsMessage : pb::IMessage<ManyWrapperFieldsMessage> {
+    private static readonly pb::MessageParser<ManyWrapperFieldsMessage> _parser = new pb::MessageParser<ManyWrapperFieldsMessage>(() => new ManyWrapperFieldsMessage());
+    private pb::UnknownFieldSet _unknownFields;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<ManyWrapperFieldsMessage> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[0]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyWrapperFieldsMessage() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyWrapperFieldsMessage(ManyWrapperFieldsMessage other) : this() {
+      DoubleField95 = other.DoubleField95;
+      DoubleField1 = other.DoubleField1;
+      DoubleField79 = other.DoubleField79;
+      Int64Field2 = other.Int64Field2;
+      DoubleField96 = other.DoubleField96;
+      Int64Field3 = other.Int64Field3;
+      Int64Field4 = other.Int64Field4;
+      DoubleField97 = other.DoubleField97;
+      DoubleField65 = other.DoubleField65;
+      DoubleField66 = other.DoubleField66;
+      DoubleField7 = other.DoubleField7;
+      DoubleField62 = other.DoubleField62;
+      DoubleField118 = other.DoubleField118;
+      DoubleField119 = other.DoubleField119;
+      DoubleField67 = other.DoubleField67;
+      DoubleField120 = other.DoubleField120;
+      DoubleField121 = other.DoubleField121;
+      DoubleField122 = other.DoubleField122;
+      DoubleField123 = other.DoubleField123;
+      DoubleField124 = other.DoubleField124;
+      DoubleField8 = other.DoubleField8;
+      DoubleField9 = other.DoubleField9;
+      DoubleField98 = other.DoubleField98;
+      DoubleField10 = other.DoubleField10;
+      DoubleField11 = other.DoubleField11;
+      DoubleField99 = other.DoubleField99;
+      DoubleField84 = other.DoubleField84;
+      DoubleField14 = other.DoubleField14;
+      DoubleField77 = other.DoubleField77;
+      DoubleField15 = other.DoubleField15;
+      Int64Field19 = other.Int64Field19;
+      Int64Field115 = other.Int64Field115;
+      DoubleField116 = other.DoubleField116;
+      Int64Field117 = other.Int64Field117;
+      DoubleField20 = other.DoubleField20;
+      DoubleField21 = other.DoubleField21;
+      StringField73 = other.StringField73;
+      StringField74 = other.StringField74;
+      DoubleField22 = other.DoubleField22;
+      DoubleField69 = other.DoubleField69;
+      DoubleField70 = other.DoubleField70;
+      DoubleField71 = other.DoubleField71;
+      DoubleField72 = other.DoubleField72;
+      DoubleField25 = other.DoubleField25;
+      Int64Field26 = other.Int64Field26;
+      DoubleField68 = other.DoubleField68;
+      DoubleField28 = other.DoubleField28;
+      DoubleField106 = other.DoubleField106;
+      DoubleField29 = other.DoubleField29;
+      DoubleField30 = other.DoubleField30;
+      DoubleField101 = other.DoubleField101;
+      DoubleField102 = other.DoubleField102;
+      DoubleField103 = other.DoubleField103;
+      DoubleField104 = other.DoubleField104;
+      DoubleField105 = other.DoubleField105;
+      DoubleField31 = other.DoubleField31;
+      Int64Field32 = other.Int64Field32;
+      DoubleField75 = other.DoubleField75;
+      DoubleField129 = other.DoubleField129;
+      enumField80_ = other.enumField80_;
+      enumField81_ = other.enumField81_;
+      Int64Field82 = other.Int64Field82;
+      enumField83_ = other.enumField83_;
+      Int64Field85 = other.Int64Field85;
+      Int64Field86 = other.Int64Field86;
+      Int64Field87 = other.Int64Field87;
+      Int64Field125 = other.Int64Field125;
+      Int64Field37 = other.Int64Field37;
+      DoubleField38 = other.DoubleField38;
+      Interactions = other.Interactions;
+      repeatedIntField100_ = other.repeatedIntField100_.Clone();
+      DoubleField40 = other.DoubleField40;
+      Int64Field41 = other.Int64Field41;
+      Int64Field126 = other.Int64Field126;
+      Int64Field127 = other.Int64Field127;
+      DoubleField128 = other.DoubleField128;
+      DoubleField109 = other.DoubleField109;
+      Int64Field110 = other.Int64Field110;
+      DoubleField111 = other.DoubleField111;
+      Int64Field112 = other.Int64Field112;
+      DoubleField113 = other.DoubleField113;
+      Int64Field114 = other.Int64Field114;
+      DoubleField42 = other.DoubleField42;
+      Int64Field43 = other.Int64Field43;
+      Int64Field44 = other.Int64Field44;
+      DoubleField45 = other.DoubleField45;
+      DoubleField46 = other.DoubleField46;
+      DoubleField78 = other.DoubleField78;
+      DoubleField88 = other.DoubleField88;
+      DoubleField47 = other.DoubleField47;
+      DoubleField89 = other.DoubleField89;
+      DoubleField48 = other.DoubleField48;
+      DoubleField49 = other.DoubleField49;
+      DoubleField50 = other.DoubleField50;
+      DoubleField90 = other.DoubleField90;
+      DoubleField51 = other.DoubleField51;
+      DoubleField91 = other.DoubleField91;
+      DoubleField92 = other.DoubleField92;
+      Int64Field107 = other.Int64Field107;
+      DoubleField93 = other.DoubleField93;
+      DoubleField108 = other.DoubleField108;
+      DoubleField52 = other.DoubleField52;
+      DoubleField53 = other.DoubleField53;
+      DoubleField94 = other.DoubleField94;
+      DoubleField54 = other.DoubleField54;
+      DoubleField55 = other.DoubleField55;
+      DoubleField56 = other.DoubleField56;
+      DoubleField57 = other.DoubleField57;
+      DoubleField58 = other.DoubleField58;
+      Int64Field59 = other.Int64Field59;
+      Int64Field60 = other.Int64Field60;
+      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyWrapperFieldsMessage Clone() {
+      return new ManyWrapperFieldsMessage(this);
+    }
+
+    /// <summary>Field number for the "double_field_95" field.</summary>
+    public const int DoubleField95FieldNumber = 95;
+    private static readonly pb::FieldCodec<double?> _single_doubleField95_codec = pb::FieldCodec.ForStructWrapper<double>(762);
+    private double? doubleField95_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField95 {
+      get { return doubleField95_; }
+      set {
+        doubleField95_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_1" field.</summary>
+    public const int DoubleField1FieldNumber = 1;
+    private static readonly pb::FieldCodec<double?> _single_doubleField1_codec = pb::FieldCodec.ForStructWrapper<double>(10);
+    private double? doubleField1_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField1 {
+      get { return doubleField1_; }
+      set {
+        doubleField1_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_79" field.</summary>
+    public const int DoubleField79FieldNumber = 79;
+    private static readonly pb::FieldCodec<double?> _single_doubleField79_codec = pb::FieldCodec.ForStructWrapper<double>(634);
+    private double? doubleField79_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField79 {
+      get { return doubleField79_; }
+      set {
+        doubleField79_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_2" field.</summary>
+    public const int Int64Field2FieldNumber = 2;
+    private static readonly pb::FieldCodec<long?> _single_int64Field2_codec = pb::FieldCodec.ForStructWrapper<long>(18);
+    private long? int64Field2_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field2 {
+      get { return int64Field2_; }
+      set {
+        int64Field2_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_96" field.</summary>
+    public const int DoubleField96FieldNumber = 96;
+    private static readonly pb::FieldCodec<double?> _single_doubleField96_codec = pb::FieldCodec.ForStructWrapper<double>(770);
+    private double? doubleField96_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField96 {
+      get { return doubleField96_; }
+      set {
+        doubleField96_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_3" field.</summary>
+    public const int Int64Field3FieldNumber = 3;
+    private static readonly pb::FieldCodec<long?> _single_int64Field3_codec = pb::FieldCodec.ForStructWrapper<long>(26);
+    private long? int64Field3_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field3 {
+      get { return int64Field3_; }
+      set {
+        int64Field3_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_4" field.</summary>
+    public const int Int64Field4FieldNumber = 4;
+    private static readonly pb::FieldCodec<long?> _single_int64Field4_codec = pb::FieldCodec.ForStructWrapper<long>(34);
+    private long? int64Field4_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field4 {
+      get { return int64Field4_; }
+      set {
+        int64Field4_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_97" field.</summary>
+    public const int DoubleField97FieldNumber = 97;
+    private static readonly pb::FieldCodec<double?> _single_doubleField97_codec = pb::FieldCodec.ForStructWrapper<double>(778);
+    private double? doubleField97_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField97 {
+      get { return doubleField97_; }
+      set {
+        doubleField97_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_65" field.</summary>
+    public const int DoubleField65FieldNumber = 65;
+    private static readonly pb::FieldCodec<double?> _single_doubleField65_codec = pb::FieldCodec.ForStructWrapper<double>(522);
+    private double? doubleField65_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField65 {
+      get { return doubleField65_; }
+      set {
+        doubleField65_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_66" field.</summary>
+    public const int DoubleField66FieldNumber = 66;
+    private static readonly pb::FieldCodec<double?> _single_doubleField66_codec = pb::FieldCodec.ForStructWrapper<double>(530);
+    private double? doubleField66_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField66 {
+      get { return doubleField66_; }
+      set {
+        doubleField66_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_7" field.</summary>
+    public const int DoubleField7FieldNumber = 7;
+    private static readonly pb::FieldCodec<double?> _single_doubleField7_codec = pb::FieldCodec.ForStructWrapper<double>(58);
+    private double? doubleField7_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField7 {
+      get { return doubleField7_; }
+      set {
+        doubleField7_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_62" field.</summary>
+    public const int DoubleField62FieldNumber = 62;
+    private static readonly pb::FieldCodec<double?> _single_doubleField62_codec = pb::FieldCodec.ForStructWrapper<double>(498);
+    private double? doubleField62_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField62 {
+      get { return doubleField62_; }
+      set {
+        doubleField62_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_118" field.</summary>
+    public const int DoubleField118FieldNumber = 118;
+    private static readonly pb::FieldCodec<double?> _single_doubleField118_codec = pb::FieldCodec.ForStructWrapper<double>(946);
+    private double? doubleField118_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField118 {
+      get { return doubleField118_; }
+      set {
+        doubleField118_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_119" field.</summary>
+    public const int DoubleField119FieldNumber = 119;
+    private static readonly pb::FieldCodec<double?> _single_doubleField119_codec = pb::FieldCodec.ForStructWrapper<double>(954);
+    private double? doubleField119_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField119 {
+      get { return doubleField119_; }
+      set {
+        doubleField119_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_67" field.</summary>
+    public const int DoubleField67FieldNumber = 67;
+    private static readonly pb::FieldCodec<double?> _single_doubleField67_codec = pb::FieldCodec.ForStructWrapper<double>(538);
+    private double? doubleField67_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField67 {
+      get { return doubleField67_; }
+      set {
+        doubleField67_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_120" field.</summary>
+    public const int DoubleField120FieldNumber = 120;
+    private static readonly pb::FieldCodec<double?> _single_doubleField120_codec = pb::FieldCodec.ForStructWrapper<double>(962);
+    private double? doubleField120_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField120 {
+      get { return doubleField120_; }
+      set {
+        doubleField120_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_121" field.</summary>
+    public const int DoubleField121FieldNumber = 121;
+    private static readonly pb::FieldCodec<double?> _single_doubleField121_codec = pb::FieldCodec.ForStructWrapper<double>(970);
+    private double? doubleField121_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField121 {
+      get { return doubleField121_; }
+      set {
+        doubleField121_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_122" field.</summary>
+    public const int DoubleField122FieldNumber = 122;
+    private static readonly pb::FieldCodec<double?> _single_doubleField122_codec = pb::FieldCodec.ForStructWrapper<double>(978);
+    private double? doubleField122_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField122 {
+      get { return doubleField122_; }
+      set {
+        doubleField122_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_123" field.</summary>
+    public const int DoubleField123FieldNumber = 123;
+    private static readonly pb::FieldCodec<double?> _single_doubleField123_codec = pb::FieldCodec.ForStructWrapper<double>(986);
+    private double? doubleField123_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField123 {
+      get { return doubleField123_; }
+      set {
+        doubleField123_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_124" field.</summary>
+    public const int DoubleField124FieldNumber = 124;
+    private static readonly pb::FieldCodec<double?> _single_doubleField124_codec = pb::FieldCodec.ForStructWrapper<double>(994);
+    private double? doubleField124_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField124 {
+      get { return doubleField124_; }
+      set {
+        doubleField124_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_8" field.</summary>
+    public const int DoubleField8FieldNumber = 8;
+    private static readonly pb::FieldCodec<double?> _single_doubleField8_codec = pb::FieldCodec.ForStructWrapper<double>(66);
+    private double? doubleField8_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField8 {
+      get { return doubleField8_; }
+      set {
+        doubleField8_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_9" field.</summary>
+    public const int DoubleField9FieldNumber = 9;
+    private static readonly pb::FieldCodec<double?> _single_doubleField9_codec = pb::FieldCodec.ForStructWrapper<double>(74);
+    private double? doubleField9_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField9 {
+      get { return doubleField9_; }
+      set {
+        doubleField9_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_98" field.</summary>
+    public const int DoubleField98FieldNumber = 98;
+    private static readonly pb::FieldCodec<double?> _single_doubleField98_codec = pb::FieldCodec.ForStructWrapper<double>(786);
+    private double? doubleField98_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField98 {
+      get { return doubleField98_; }
+      set {
+        doubleField98_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_10" field.</summary>
+    public const int DoubleField10FieldNumber = 10;
+    private static readonly pb::FieldCodec<double?> _single_doubleField10_codec = pb::FieldCodec.ForStructWrapper<double>(82);
+    private double? doubleField10_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField10 {
+      get { return doubleField10_; }
+      set {
+        doubleField10_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_11" field.</summary>
+    public const int DoubleField11FieldNumber = 11;
+    private static readonly pb::FieldCodec<double?> _single_doubleField11_codec = pb::FieldCodec.ForStructWrapper<double>(90);
+    private double? doubleField11_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField11 {
+      get { return doubleField11_; }
+      set {
+        doubleField11_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_99" field.</summary>
+    public const int DoubleField99FieldNumber = 99;
+    private static readonly pb::FieldCodec<double?> _single_doubleField99_codec = pb::FieldCodec.ForStructWrapper<double>(794);
+    private double? doubleField99_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField99 {
+      get { return doubleField99_; }
+      set {
+        doubleField99_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_84" field.</summary>
+    public const int DoubleField84FieldNumber = 84;
+    private static readonly pb::FieldCodec<double?> _single_doubleField84_codec = pb::FieldCodec.ForStructWrapper<double>(674);
+    private double? doubleField84_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField84 {
+      get { return doubleField84_; }
+      set {
+        doubleField84_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_14" field.</summary>
+    public const int DoubleField14FieldNumber = 14;
+    private static readonly pb::FieldCodec<double?> _single_doubleField14_codec = pb::FieldCodec.ForStructWrapper<double>(114);
+    private double? doubleField14_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField14 {
+      get { return doubleField14_; }
+      set {
+        doubleField14_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_77" field.</summary>
+    public const int DoubleField77FieldNumber = 77;
+    private static readonly pb::FieldCodec<double?> _single_doubleField77_codec = pb::FieldCodec.ForStructWrapper<double>(618);
+    private double? doubleField77_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField77 {
+      get { return doubleField77_; }
+      set {
+        doubleField77_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_15" field.</summary>
+    public const int DoubleField15FieldNumber = 15;
+    private static readonly pb::FieldCodec<double?> _single_doubleField15_codec = pb::FieldCodec.ForStructWrapper<double>(122);
+    private double? doubleField15_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField15 {
+      get { return doubleField15_; }
+      set {
+        doubleField15_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_19" field.</summary>
+    public const int Int64Field19FieldNumber = 19;
+    private static readonly pb::FieldCodec<long?> _single_int64Field19_codec = pb::FieldCodec.ForStructWrapper<long>(154);
+    private long? int64Field19_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field19 {
+      get { return int64Field19_; }
+      set {
+        int64Field19_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_115" field.</summary>
+    public const int Int64Field115FieldNumber = 115;
+    private static readonly pb::FieldCodec<long?> _single_int64Field115_codec = pb::FieldCodec.ForStructWrapper<long>(922);
+    private long? int64Field115_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field115 {
+      get { return int64Field115_; }
+      set {
+        int64Field115_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_116" field.</summary>
+    public const int DoubleField116FieldNumber = 116;
+    private static readonly pb::FieldCodec<double?> _single_doubleField116_codec = pb::FieldCodec.ForStructWrapper<double>(930);
+    private double? doubleField116_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField116 {
+      get { return doubleField116_; }
+      set {
+        doubleField116_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_117" field.</summary>
+    public const int Int64Field117FieldNumber = 117;
+    private static readonly pb::FieldCodec<long?> _single_int64Field117_codec = pb::FieldCodec.ForStructWrapper<long>(938);
+    private long? int64Field117_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field117 {
+      get { return int64Field117_; }
+      set {
+        int64Field117_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_20" field.</summary>
+    public const int DoubleField20FieldNumber = 20;
+    private static readonly pb::FieldCodec<double?> _single_doubleField20_codec = pb::FieldCodec.ForStructWrapper<double>(162);
+    private double? doubleField20_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField20 {
+      get { return doubleField20_; }
+      set {
+        doubleField20_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_21" field.</summary>
+    public const int DoubleField21FieldNumber = 21;
+    private static readonly pb::FieldCodec<double?> _single_doubleField21_codec = pb::FieldCodec.ForStructWrapper<double>(170);
+    private double? doubleField21_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField21 {
+      get { return doubleField21_; }
+      set {
+        doubleField21_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "string_field_73" field.</summary>
+    public const int StringField73FieldNumber = 73;
+    private static readonly pb::FieldCodec<string> _single_stringField73_codec = pb::FieldCodec.ForClassWrapper<string>(586);
+    private string stringField73_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string StringField73 {
+      get { return stringField73_; }
+      set {
+        stringField73_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "string_field_74" field.</summary>
+    public const int StringField74FieldNumber = 74;
+    private static readonly pb::FieldCodec<string> _single_stringField74_codec = pb::FieldCodec.ForClassWrapper<string>(594);
+    private string stringField74_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string StringField74 {
+      get { return stringField74_; }
+      set {
+        stringField74_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_22" field.</summary>
+    public const int DoubleField22FieldNumber = 22;
+    private static readonly pb::FieldCodec<double?> _single_doubleField22_codec = pb::FieldCodec.ForStructWrapper<double>(178);
+    private double? doubleField22_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField22 {
+      get { return doubleField22_; }
+      set {
+        doubleField22_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_69" field.</summary>
+    public const int DoubleField69FieldNumber = 69;
+    private static readonly pb::FieldCodec<double?> _single_doubleField69_codec = pb::FieldCodec.ForStructWrapper<double>(554);
+    private double? doubleField69_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField69 {
+      get { return doubleField69_; }
+      set {
+        doubleField69_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_70" field.</summary>
+    public const int DoubleField70FieldNumber = 70;
+    private static readonly pb::FieldCodec<double?> _single_doubleField70_codec = pb::FieldCodec.ForStructWrapper<double>(562);
+    private double? doubleField70_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField70 {
+      get { return doubleField70_; }
+      set {
+        doubleField70_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_71" field.</summary>
+    public const int DoubleField71FieldNumber = 71;
+    private static readonly pb::FieldCodec<double?> _single_doubleField71_codec = pb::FieldCodec.ForStructWrapper<double>(570);
+    private double? doubleField71_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField71 {
+      get { return doubleField71_; }
+      set {
+        doubleField71_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_72" field.</summary>
+    public const int DoubleField72FieldNumber = 72;
+    private static readonly pb::FieldCodec<double?> _single_doubleField72_codec = pb::FieldCodec.ForStructWrapper<double>(578);
+    private double? doubleField72_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField72 {
+      get { return doubleField72_; }
+      set {
+        doubleField72_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_25" field.</summary>
+    public const int DoubleField25FieldNumber = 25;
+    private static readonly pb::FieldCodec<double?> _single_doubleField25_codec = pb::FieldCodec.ForStructWrapper<double>(202);
+    private double? doubleField25_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField25 {
+      get { return doubleField25_; }
+      set {
+        doubleField25_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_26" field.</summary>
+    public const int Int64Field26FieldNumber = 26;
+    private static readonly pb::FieldCodec<long?> _single_int64Field26_codec = pb::FieldCodec.ForStructWrapper<long>(210);
+    private long? int64Field26_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field26 {
+      get { return int64Field26_; }
+      set {
+        int64Field26_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_68" field.</summary>
+    public const int DoubleField68FieldNumber = 68;
+    private static readonly pb::FieldCodec<double?> _single_doubleField68_codec = pb::FieldCodec.ForStructWrapper<double>(546);
+    private double? doubleField68_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField68 {
+      get { return doubleField68_; }
+      set {
+        doubleField68_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_28" field.</summary>
+    public const int DoubleField28FieldNumber = 28;
+    private static readonly pb::FieldCodec<double?> _single_doubleField28_codec = pb::FieldCodec.ForStructWrapper<double>(226);
+    private double? doubleField28_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField28 {
+      get { return doubleField28_; }
+      set {
+        doubleField28_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_106" field.</summary>
+    public const int DoubleField106FieldNumber = 106;
+    private static readonly pb::FieldCodec<double?> _single_doubleField106_codec = pb::FieldCodec.ForStructWrapper<double>(850);
+    private double? doubleField106_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField106 {
+      get { return doubleField106_; }
+      set {
+        doubleField106_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_29" field.</summary>
+    public const int DoubleField29FieldNumber = 29;
+    private static readonly pb::FieldCodec<double?> _single_doubleField29_codec = pb::FieldCodec.ForStructWrapper<double>(234);
+    private double? doubleField29_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField29 {
+      get { return doubleField29_; }
+      set {
+        doubleField29_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_30" field.</summary>
+    public const int DoubleField30FieldNumber = 30;
+    private static readonly pb::FieldCodec<double?> _single_doubleField30_codec = pb::FieldCodec.ForStructWrapper<double>(242);
+    private double? doubleField30_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField30 {
+      get { return doubleField30_; }
+      set {
+        doubleField30_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_101" field.</summary>
+    public const int DoubleField101FieldNumber = 101;
+    private static readonly pb::FieldCodec<double?> _single_doubleField101_codec = pb::FieldCodec.ForStructWrapper<double>(810);
+    private double? doubleField101_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField101 {
+      get { return doubleField101_; }
+      set {
+        doubleField101_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_102" field.</summary>
+    public const int DoubleField102FieldNumber = 102;
+    private static readonly pb::FieldCodec<double?> _single_doubleField102_codec = pb::FieldCodec.ForStructWrapper<double>(818);
+    private double? doubleField102_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField102 {
+      get { return doubleField102_; }
+      set {
+        doubleField102_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_103" field.</summary>
+    public const int DoubleField103FieldNumber = 103;
+    private static readonly pb::FieldCodec<double?> _single_doubleField103_codec = pb::FieldCodec.ForStructWrapper<double>(826);
+    private double? doubleField103_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField103 {
+      get { return doubleField103_; }
+      set {
+        doubleField103_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_104" field.</summary>
+    public const int DoubleField104FieldNumber = 104;
+    private static readonly pb::FieldCodec<double?> _single_doubleField104_codec = pb::FieldCodec.ForStructWrapper<double>(834);
+    private double? doubleField104_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField104 {
+      get { return doubleField104_; }
+      set {
+        doubleField104_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_105" field.</summary>
+    public const int DoubleField105FieldNumber = 105;
+    private static readonly pb::FieldCodec<double?> _single_doubleField105_codec = pb::FieldCodec.ForStructWrapper<double>(842);
+    private double? doubleField105_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField105 {
+      get { return doubleField105_; }
+      set {
+        doubleField105_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_31" field.</summary>
+    public const int DoubleField31FieldNumber = 31;
+    private static readonly pb::FieldCodec<double?> _single_doubleField31_codec = pb::FieldCodec.ForStructWrapper<double>(250);
+    private double? doubleField31_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField31 {
+      get { return doubleField31_; }
+      set {
+        doubleField31_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_32" field.</summary>
+    public const int Int64Field32FieldNumber = 32;
+    private static readonly pb::FieldCodec<long?> _single_int64Field32_codec = pb::FieldCodec.ForStructWrapper<long>(258);
+    private long? int64Field32_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field32 {
+      get { return int64Field32_; }
+      set {
+        int64Field32_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_75" field.</summary>
+    public const int DoubleField75FieldNumber = 75;
+    private static readonly pb::FieldCodec<double?> _single_doubleField75_codec = pb::FieldCodec.ForStructWrapper<double>(602);
+    private double? doubleField75_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField75 {
+      get { return doubleField75_; }
+      set {
+        doubleField75_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_129" field.</summary>
+    public const int DoubleField129FieldNumber = 129;
+    private static readonly pb::FieldCodec<double?> _single_doubleField129_codec = pb::FieldCodec.ForStructWrapper<double>(1034);
+    private double? doubleField129_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField129 {
+      get { return doubleField129_; }
+      set {
+        doubleField129_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "enum_field_80" field.</summary>
+    public const int EnumField80FieldNumber = 80;
+    private int enumField80_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField80 {
+      get { return enumField80_; }
+      set {
+        enumField80_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "enum_field_81" field.</summary>
+    public const int EnumField81FieldNumber = 81;
+    private int enumField81_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField81 {
+      get { return enumField81_; }
+      set {
+        enumField81_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_82" field.</summary>
+    public const int Int64Field82FieldNumber = 82;
+    private static readonly pb::FieldCodec<long?> _single_int64Field82_codec = pb::FieldCodec.ForStructWrapper<long>(658);
+    private long? int64Field82_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field82 {
+      get { return int64Field82_; }
+      set {
+        int64Field82_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "enum_field_83" field.</summary>
+    public const int EnumField83FieldNumber = 83;
+    private int enumField83_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField83 {
+      get { return enumField83_; }
+      set {
+        enumField83_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_85" field.</summary>
+    public const int Int64Field85FieldNumber = 85;
+    private static readonly pb::FieldCodec<long?> _single_int64Field85_codec = pb::FieldCodec.ForStructWrapper<long>(682);
+    private long? int64Field85_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field85 {
+      get { return int64Field85_; }
+      set {
+        int64Field85_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_86" field.</summary>
+    public const int Int64Field86FieldNumber = 86;
+    private static readonly pb::FieldCodec<long?> _single_int64Field86_codec = pb::FieldCodec.ForStructWrapper<long>(690);
+    private long? int64Field86_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field86 {
+      get { return int64Field86_; }
+      set {
+        int64Field86_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_87" field.</summary>
+    public const int Int64Field87FieldNumber = 87;
+    private static readonly pb::FieldCodec<long?> _single_int64Field87_codec = pb::FieldCodec.ForStructWrapper<long>(698);
+    private long? int64Field87_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field87 {
+      get { return int64Field87_; }
+      set {
+        int64Field87_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_125" field.</summary>
+    public const int Int64Field125FieldNumber = 125;
+    private static readonly pb::FieldCodec<long?> _single_int64Field125_codec = pb::FieldCodec.ForStructWrapper<long>(1002);
+    private long? int64Field125_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field125 {
+      get { return int64Field125_; }
+      set {
+        int64Field125_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_37" field.</summary>
+    public const int Int64Field37FieldNumber = 37;
+    private static readonly pb::FieldCodec<long?> _single_int64Field37_codec = pb::FieldCodec.ForStructWrapper<long>(298);
+    private long? int64Field37_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field37 {
+      get { return int64Field37_; }
+      set {
+        int64Field37_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_38" field.</summary>
+    public const int DoubleField38FieldNumber = 38;
+    private static readonly pb::FieldCodec<double?> _single_doubleField38_codec = pb::FieldCodec.ForStructWrapper<double>(306);
+    private double? doubleField38_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField38 {
+      get { return doubleField38_; }
+      set {
+        doubleField38_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "interactions" field.</summary>
+    public const int InteractionsFieldNumber = 39;
+    private static readonly pb::FieldCodec<long?> _single_interactions_codec = pb::FieldCodec.ForStructWrapper<long>(314);
+    private long? interactions_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Interactions {
+      get { return interactions_; }
+      set {
+        interactions_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "repeated_int_field_100" field.</summary>
+    public const int RepeatedIntField100FieldNumber = 100;
+    private static readonly pb::FieldCodec<int> _repeated_repeatedIntField100_codec
+        = pb::FieldCodec.ForInt32(802);
+    private readonly pbc::RepeatedField<int> repeatedIntField100_ = new pbc::RepeatedField<int>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<int> RepeatedIntField100 {
+      get { return repeatedIntField100_; }
+    }
+
+    /// <summary>Field number for the "double_field_40" field.</summary>
+    public const int DoubleField40FieldNumber = 40;
+    private static readonly pb::FieldCodec<double?> _single_doubleField40_codec = pb::FieldCodec.ForStructWrapper<double>(322);
+    private double? doubleField40_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField40 {
+      get { return doubleField40_; }
+      set {
+        doubleField40_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_41" field.</summary>
+    public const int Int64Field41FieldNumber = 41;
+    private static readonly pb::FieldCodec<long?> _single_int64Field41_codec = pb::FieldCodec.ForStructWrapper<long>(330);
+    private long? int64Field41_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field41 {
+      get { return int64Field41_; }
+      set {
+        int64Field41_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_126" field.</summary>
+    public const int Int64Field126FieldNumber = 126;
+    private static readonly pb::FieldCodec<long?> _single_int64Field126_codec = pb::FieldCodec.ForStructWrapper<long>(1010);
+    private long? int64Field126_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field126 {
+      get { return int64Field126_; }
+      set {
+        int64Field126_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_127" field.</summary>
+    public const int Int64Field127FieldNumber = 127;
+    private static readonly pb::FieldCodec<long?> _single_int64Field127_codec = pb::FieldCodec.ForStructWrapper<long>(1018);
+    private long? int64Field127_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field127 {
+      get { return int64Field127_; }
+      set {
+        int64Field127_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_128" field.</summary>
+    public const int DoubleField128FieldNumber = 128;
+    private static readonly pb::FieldCodec<double?> _single_doubleField128_codec = pb::FieldCodec.ForStructWrapper<double>(1026);
+    private double? doubleField128_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField128 {
+      get { return doubleField128_; }
+      set {
+        doubleField128_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_109" field.</summary>
+    public const int DoubleField109FieldNumber = 109;
+    private static readonly pb::FieldCodec<double?> _single_doubleField109_codec = pb::FieldCodec.ForStructWrapper<double>(874);
+    private double? doubleField109_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField109 {
+      get { return doubleField109_; }
+      set {
+        doubleField109_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_110" field.</summary>
+    public const int Int64Field110FieldNumber = 110;
+    private static readonly pb::FieldCodec<long?> _single_int64Field110_codec = pb::FieldCodec.ForStructWrapper<long>(882);
+    private long? int64Field110_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field110 {
+      get { return int64Field110_; }
+      set {
+        int64Field110_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_111" field.</summary>
+    public const int DoubleField111FieldNumber = 111;
+    private static readonly pb::FieldCodec<double?> _single_doubleField111_codec = pb::FieldCodec.ForStructWrapper<double>(890);
+    private double? doubleField111_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField111 {
+      get { return doubleField111_; }
+      set {
+        doubleField111_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_112" field.</summary>
+    public const int Int64Field112FieldNumber = 112;
+    private static readonly pb::FieldCodec<long?> _single_int64Field112_codec = pb::FieldCodec.ForStructWrapper<long>(898);
+    private long? int64Field112_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field112 {
+      get { return int64Field112_; }
+      set {
+        int64Field112_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_113" field.</summary>
+    public const int DoubleField113FieldNumber = 113;
+    private static readonly pb::FieldCodec<double?> _single_doubleField113_codec = pb::FieldCodec.ForStructWrapper<double>(906);
+    private double? doubleField113_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField113 {
+      get { return doubleField113_; }
+      set {
+        doubleField113_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_114" field.</summary>
+    public const int Int64Field114FieldNumber = 114;
+    private static readonly pb::FieldCodec<long?> _single_int64Field114_codec = pb::FieldCodec.ForStructWrapper<long>(914);
+    private long? int64Field114_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field114 {
+      get { return int64Field114_; }
+      set {
+        int64Field114_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_42" field.</summary>
+    public const int DoubleField42FieldNumber = 42;
+    private static readonly pb::FieldCodec<double?> _single_doubleField42_codec = pb::FieldCodec.ForStructWrapper<double>(338);
+    private double? doubleField42_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField42 {
+      get { return doubleField42_; }
+      set {
+        doubleField42_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_43" field.</summary>
+    public const int Int64Field43FieldNumber = 43;
+    private static readonly pb::FieldCodec<long?> _single_int64Field43_codec = pb::FieldCodec.ForStructWrapper<long>(346);
+    private long? int64Field43_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field43 {
+      get { return int64Field43_; }
+      set {
+        int64Field43_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_44" field.</summary>
+    public const int Int64Field44FieldNumber = 44;
+    private static readonly pb::FieldCodec<long?> _single_int64Field44_codec = pb::FieldCodec.ForStructWrapper<long>(354);
+    private long? int64Field44_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field44 {
+      get { return int64Field44_; }
+      set {
+        int64Field44_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_45" field.</summary>
+    public const int DoubleField45FieldNumber = 45;
+    private static readonly pb::FieldCodec<double?> _single_doubleField45_codec = pb::FieldCodec.ForStructWrapper<double>(362);
+    private double? doubleField45_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField45 {
+      get { return doubleField45_; }
+      set {
+        doubleField45_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_46" field.</summary>
+    public const int DoubleField46FieldNumber = 46;
+    private static readonly pb::FieldCodec<double?> _single_doubleField46_codec = pb::FieldCodec.ForStructWrapper<double>(370);
+    private double? doubleField46_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField46 {
+      get { return doubleField46_; }
+      set {
+        doubleField46_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_78" field.</summary>
+    public const int DoubleField78FieldNumber = 78;
+    private static readonly pb::FieldCodec<double?> _single_doubleField78_codec = pb::FieldCodec.ForStructWrapper<double>(626);
+    private double? doubleField78_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField78 {
+      get { return doubleField78_; }
+      set {
+        doubleField78_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_88" field.</summary>
+    public const int DoubleField88FieldNumber = 88;
+    private static readonly pb::FieldCodec<double?> _single_doubleField88_codec = pb::FieldCodec.ForStructWrapper<double>(706);
+    private double? doubleField88_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField88 {
+      get { return doubleField88_; }
+      set {
+        doubleField88_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_47" field.</summary>
+    public const int DoubleField47FieldNumber = 47;
+    private static readonly pb::FieldCodec<double?> _single_doubleField47_codec = pb::FieldCodec.ForStructWrapper<double>(378);
+    private double? doubleField47_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField47 {
+      get { return doubleField47_; }
+      set {
+        doubleField47_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_89" field.</summary>
+    public const int DoubleField89FieldNumber = 89;
+    private static readonly pb::FieldCodec<double?> _single_doubleField89_codec = pb::FieldCodec.ForStructWrapper<double>(714);
+    private double? doubleField89_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField89 {
+      get { return doubleField89_; }
+      set {
+        doubleField89_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_48" field.</summary>
+    public const int DoubleField48FieldNumber = 48;
+    private static readonly pb::FieldCodec<double?> _single_doubleField48_codec = pb::FieldCodec.ForStructWrapper<double>(386);
+    private double? doubleField48_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField48 {
+      get { return doubleField48_; }
+      set {
+        doubleField48_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_49" field.</summary>
+    public const int DoubleField49FieldNumber = 49;
+    private static readonly pb::FieldCodec<double?> _single_doubleField49_codec = pb::FieldCodec.ForStructWrapper<double>(394);
+    private double? doubleField49_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField49 {
+      get { return doubleField49_; }
+      set {
+        doubleField49_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_50" field.</summary>
+    public const int DoubleField50FieldNumber = 50;
+    private static readonly pb::FieldCodec<double?> _single_doubleField50_codec = pb::FieldCodec.ForStructWrapper<double>(402);
+    private double? doubleField50_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField50 {
+      get { return doubleField50_; }
+      set {
+        doubleField50_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_90" field.</summary>
+    public const int DoubleField90FieldNumber = 90;
+    private static readonly pb::FieldCodec<double?> _single_doubleField90_codec = pb::FieldCodec.ForStructWrapper<double>(722);
+    private double? doubleField90_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField90 {
+      get { return doubleField90_; }
+      set {
+        doubleField90_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_51" field.</summary>
+    public const int DoubleField51FieldNumber = 51;
+    private static readonly pb::FieldCodec<double?> _single_doubleField51_codec = pb::FieldCodec.ForStructWrapper<double>(410);
+    private double? doubleField51_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField51 {
+      get { return doubleField51_; }
+      set {
+        doubleField51_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_91" field.</summary>
+    public const int DoubleField91FieldNumber = 91;
+    private static readonly pb::FieldCodec<double?> _single_doubleField91_codec = pb::FieldCodec.ForStructWrapper<double>(730);
+    private double? doubleField91_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField91 {
+      get { return doubleField91_; }
+      set {
+        doubleField91_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_92" field.</summary>
+    public const int DoubleField92FieldNumber = 92;
+    private static readonly pb::FieldCodec<double?> _single_doubleField92_codec = pb::FieldCodec.ForStructWrapper<double>(738);
+    private double? doubleField92_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField92 {
+      get { return doubleField92_; }
+      set {
+        doubleField92_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_107" field.</summary>
+    public const int Int64Field107FieldNumber = 107;
+    private static readonly pb::FieldCodec<long?> _single_int64Field107_codec = pb::FieldCodec.ForStructWrapper<long>(858);
+    private long? int64Field107_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field107 {
+      get { return int64Field107_; }
+      set {
+        int64Field107_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_93" field.</summary>
+    public const int DoubleField93FieldNumber = 93;
+    private static readonly pb::FieldCodec<double?> _single_doubleField93_codec = pb::FieldCodec.ForStructWrapper<double>(746);
+    private double? doubleField93_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField93 {
+      get { return doubleField93_; }
+      set {
+        doubleField93_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_108" field.</summary>
+    public const int DoubleField108FieldNumber = 108;
+    private static readonly pb::FieldCodec<double?> _single_doubleField108_codec = pb::FieldCodec.ForStructWrapper<double>(866);
+    private double? doubleField108_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField108 {
+      get { return doubleField108_; }
+      set {
+        doubleField108_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_52" field.</summary>
+    public const int DoubleField52FieldNumber = 52;
+    private static readonly pb::FieldCodec<double?> _single_doubleField52_codec = pb::FieldCodec.ForStructWrapper<double>(418);
+    private double? doubleField52_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField52 {
+      get { return doubleField52_; }
+      set {
+        doubleField52_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_53" field.</summary>
+    public const int DoubleField53FieldNumber = 53;
+    private static readonly pb::FieldCodec<double?> _single_doubleField53_codec = pb::FieldCodec.ForStructWrapper<double>(426);
+    private double? doubleField53_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField53 {
+      get { return doubleField53_; }
+      set {
+        doubleField53_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_94" field.</summary>
+    public const int DoubleField94FieldNumber = 94;
+    private static readonly pb::FieldCodec<double?> _single_doubleField94_codec = pb::FieldCodec.ForStructWrapper<double>(754);
+    private double? doubleField94_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField94 {
+      get { return doubleField94_; }
+      set {
+        doubleField94_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_54" field.</summary>
+    public const int DoubleField54FieldNumber = 54;
+    private static readonly pb::FieldCodec<double?> _single_doubleField54_codec = pb::FieldCodec.ForStructWrapper<double>(434);
+    private double? doubleField54_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField54 {
+      get { return doubleField54_; }
+      set {
+        doubleField54_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_55" field.</summary>
+    public const int DoubleField55FieldNumber = 55;
+    private static readonly pb::FieldCodec<double?> _single_doubleField55_codec = pb::FieldCodec.ForStructWrapper<double>(442);
+    private double? doubleField55_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField55 {
+      get { return doubleField55_; }
+      set {
+        doubleField55_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_56" field.</summary>
+    public const int DoubleField56FieldNumber = 56;
+    private static readonly pb::FieldCodec<double?> _single_doubleField56_codec = pb::FieldCodec.ForStructWrapper<double>(450);
+    private double? doubleField56_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField56 {
+      get { return doubleField56_; }
+      set {
+        doubleField56_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_57" field.</summary>
+    public const int DoubleField57FieldNumber = 57;
+    private static readonly pb::FieldCodec<double?> _single_doubleField57_codec = pb::FieldCodec.ForStructWrapper<double>(458);
+    private double? doubleField57_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField57 {
+      get { return doubleField57_; }
+      set {
+        doubleField57_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "double_field_58" field.</summary>
+    public const int DoubleField58FieldNumber = 58;
+    private static readonly pb::FieldCodec<double?> _single_doubleField58_codec = pb::FieldCodec.ForStructWrapper<double>(466);
+    private double? doubleField58_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double? DoubleField58 {
+      get { return doubleField58_; }
+      set {
+        doubleField58_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_59" field.</summary>
+    public const int Int64Field59FieldNumber = 59;
+    private static readonly pb::FieldCodec<long?> _single_int64Field59_codec = pb::FieldCodec.ForStructWrapper<long>(474);
+    private long? int64Field59_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field59 {
+      get { return int64Field59_; }
+      set {
+        int64Field59_ = value;
+      }
+    }
+
+
+    /// <summary>Field number for the "int64_field_60" field.</summary>
+    public const int Int64Field60FieldNumber = 60;
+    private static readonly pb::FieldCodec<long?> _single_int64Field60_codec = pb::FieldCodec.ForStructWrapper<long>(482);
+    private long? int64Field60_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long? Int64Field60 {
+      get { return int64Field60_; }
+      set {
+        int64Field60_ = value;
+      }
+    }
+
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as ManyWrapperFieldsMessage);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(ManyWrapperFieldsMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField95, other.DoubleField95)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField1, other.DoubleField1)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField79, other.DoubleField79)) return false;
+      if (Int64Field2 != other.Int64Field2) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField96, other.DoubleField96)) return false;
+      if (Int64Field3 != other.Int64Field3) return false;
+      if (Int64Field4 != other.Int64Field4) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField97, other.DoubleField97)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField65, other.DoubleField65)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField66, other.DoubleField66)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField7, other.DoubleField7)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField62, other.DoubleField62)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField118, other.DoubleField118)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField119, other.DoubleField119)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField67, other.DoubleField67)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField120, other.DoubleField120)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField121, other.DoubleField121)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField122, other.DoubleField122)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField123, other.DoubleField123)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField124, other.DoubleField124)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField8, other.DoubleField8)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField9, other.DoubleField9)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField98, other.DoubleField98)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField10, other.DoubleField10)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField11, other.DoubleField11)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField99, other.DoubleField99)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField84, other.DoubleField84)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField14, other.DoubleField14)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField77, other.DoubleField77)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField15, other.DoubleField15)) return false;
+      if (Int64Field19 != other.Int64Field19) return false;
+      if (Int64Field115 != other.Int64Field115) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField116, other.DoubleField116)) return false;
+      if (Int64Field117 != other.Int64Field117) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField20, other.DoubleField20)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField21, other.DoubleField21)) return false;
+      if (StringField73 != other.StringField73) return false;
+      if (StringField74 != other.StringField74) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField22, other.DoubleField22)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField69, other.DoubleField69)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField70, other.DoubleField70)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField71, other.DoubleField71)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField72, other.DoubleField72)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField25, other.DoubleField25)) return false;
+      if (Int64Field26 != other.Int64Field26) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField68, other.DoubleField68)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField28, other.DoubleField28)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField106, other.DoubleField106)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField29, other.DoubleField29)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField30, other.DoubleField30)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField101, other.DoubleField101)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField102, other.DoubleField102)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField103, other.DoubleField103)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField104, other.DoubleField104)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField105, other.DoubleField105)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField31, other.DoubleField31)) return false;
+      if (Int64Field32 != other.Int64Field32) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField75, other.DoubleField75)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField129, other.DoubleField129)) return false;
+      if (EnumField80 != other.EnumField80) return false;
+      if (EnumField81 != other.EnumField81) return false;
+      if (Int64Field82 != other.Int64Field82) return false;
+      if (EnumField83 != other.EnumField83) return false;
+      if (Int64Field85 != other.Int64Field85) return false;
+      if (Int64Field86 != other.Int64Field86) return false;
+      if (Int64Field87 != other.Int64Field87) return false;
+      if (Int64Field125 != other.Int64Field125) return false;
+      if (Int64Field37 != other.Int64Field37) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField38, other.DoubleField38)) return false;
+      if (Interactions != other.Interactions) return false;
+      if(!repeatedIntField100_.Equals(other.repeatedIntField100_)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField40, other.DoubleField40)) return false;
+      if (Int64Field41 != other.Int64Field41) return false;
+      if (Int64Field126 != other.Int64Field126) return false;
+      if (Int64Field127 != other.Int64Field127) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField128, other.DoubleField128)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField109, other.DoubleField109)) return false;
+      if (Int64Field110 != other.Int64Field110) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField111, other.DoubleField111)) return false;
+      if (Int64Field112 != other.Int64Field112) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField113, other.DoubleField113)) return false;
+      if (Int64Field114 != other.Int64Field114) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField42, other.DoubleField42)) return false;
+      if (Int64Field43 != other.Int64Field43) return false;
+      if (Int64Field44 != other.Int64Field44) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField45, other.DoubleField45)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField46, other.DoubleField46)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField78, other.DoubleField78)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField88, other.DoubleField88)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField47, other.DoubleField47)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField89, other.DoubleField89)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField48, other.DoubleField48)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField49, other.DoubleField49)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField50, other.DoubleField50)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField90, other.DoubleField90)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField51, other.DoubleField51)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField91, other.DoubleField91)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField92, other.DoubleField92)) return false;
+      if (Int64Field107 != other.Int64Field107) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField93, other.DoubleField93)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField108, other.DoubleField108)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField52, other.DoubleField52)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField53, other.DoubleField53)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField94, other.DoubleField94)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField54, other.DoubleField54)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField55, other.DoubleField55)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField56, other.DoubleField56)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField57, other.DoubleField57)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField58, other.DoubleField58)) return false;
+      if (Int64Field59 != other.Int64Field59) return false;
+      if (Int64Field60 != other.Int64Field60) return false;
+      return Equals(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (doubleField95_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField95);
+      if (doubleField1_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField1);
+      if (doubleField79_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField79);
+      if (int64Field2_ != null) hash ^= Int64Field2.GetHashCode();
+      if (doubleField96_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField96);
+      if (int64Field3_ != null) hash ^= Int64Field3.GetHashCode();
+      if (int64Field4_ != null) hash ^= Int64Field4.GetHashCode();
+      if (doubleField97_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField97);
+      if (doubleField65_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField65);
+      if (doubleField66_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField66);
+      if (doubleField7_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField7);
+      if (doubleField62_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField62);
+      if (doubleField118_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField118);
+      if (doubleField119_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField119);
+      if (doubleField67_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField67);
+      if (doubleField120_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField120);
+      if (doubleField121_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField121);
+      if (doubleField122_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField122);
+      if (doubleField123_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField123);
+      if (doubleField124_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField124);
+      if (doubleField8_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField8);
+      if (doubleField9_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField9);
+      if (doubleField98_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField98);
+      if (doubleField10_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField10);
+      if (doubleField11_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField11);
+      if (doubleField99_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField99);
+      if (doubleField84_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField84);
+      if (doubleField14_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField14);
+      if (doubleField77_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField77);
+      if (doubleField15_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField15);
+      if (int64Field19_ != null) hash ^= Int64Field19.GetHashCode();
+      if (int64Field115_ != null) hash ^= Int64Field115.GetHashCode();
+      if (doubleField116_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField116);
+      if (int64Field117_ != null) hash ^= Int64Field117.GetHashCode();
+      if (doubleField20_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField20);
+      if (doubleField21_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField21);
+      if (stringField73_ != null) hash ^= StringField73.GetHashCode();
+      if (stringField74_ != null) hash ^= StringField74.GetHashCode();
+      if (doubleField22_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField22);
+      if (doubleField69_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField69);
+      if (doubleField70_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField70);
+      if (doubleField71_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField71);
+      if (doubleField72_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField72);
+      if (doubleField25_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField25);
+      if (int64Field26_ != null) hash ^= Int64Field26.GetHashCode();
+      if (doubleField68_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField68);
+      if (doubleField28_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField28);
+      if (doubleField106_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField106);
+      if (doubleField29_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField29);
+      if (doubleField30_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField30);
+      if (doubleField101_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField101);
+      if (doubleField102_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField102);
+      if (doubleField103_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField103);
+      if (doubleField104_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField104);
+      if (doubleField105_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField105);
+      if (doubleField31_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField31);
+      if (int64Field32_ != null) hash ^= Int64Field32.GetHashCode();
+      if (doubleField75_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField75);
+      if (doubleField129_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField129);
+      if (EnumField80 != 0) hash ^= EnumField80.GetHashCode();
+      if (EnumField81 != 0) hash ^= EnumField81.GetHashCode();
+      if (int64Field82_ != null) hash ^= Int64Field82.GetHashCode();
+      if (EnumField83 != 0) hash ^= EnumField83.GetHashCode();
+      if (int64Field85_ != null) hash ^= Int64Field85.GetHashCode();
+      if (int64Field86_ != null) hash ^= Int64Field86.GetHashCode();
+      if (int64Field87_ != null) hash ^= Int64Field87.GetHashCode();
+      if (int64Field125_ != null) hash ^= Int64Field125.GetHashCode();
+      if (int64Field37_ != null) hash ^= Int64Field37.GetHashCode();
+      if (doubleField38_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField38);
+      if (interactions_ != null) hash ^= Interactions.GetHashCode();
+      hash ^= repeatedIntField100_.GetHashCode();
+      if (doubleField40_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField40);
+      if (int64Field41_ != null) hash ^= Int64Field41.GetHashCode();
+      if (int64Field126_ != null) hash ^= Int64Field126.GetHashCode();
+      if (int64Field127_ != null) hash ^= Int64Field127.GetHashCode();
+      if (doubleField128_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField128);
+      if (doubleField109_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField109);
+      if (int64Field110_ != null) hash ^= Int64Field110.GetHashCode();
+      if (doubleField111_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField111);
+      if (int64Field112_ != null) hash ^= Int64Field112.GetHashCode();
+      if (doubleField113_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField113);
+      if (int64Field114_ != null) hash ^= Int64Field114.GetHashCode();
+      if (doubleField42_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField42);
+      if (int64Field43_ != null) hash ^= Int64Field43.GetHashCode();
+      if (int64Field44_ != null) hash ^= Int64Field44.GetHashCode();
+      if (doubleField45_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField45);
+      if (doubleField46_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField46);
+      if (doubleField78_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField78);
+      if (doubleField88_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField88);
+      if (doubleField47_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField47);
+      if (doubleField89_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField89);
+      if (doubleField48_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField48);
+      if (doubleField49_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField49);
+      if (doubleField50_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField50);
+      if (doubleField90_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField90);
+      if (doubleField51_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField51);
+      if (doubleField91_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField91);
+      if (doubleField92_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField92);
+      if (int64Field107_ != null) hash ^= Int64Field107.GetHashCode();
+      if (doubleField93_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField93);
+      if (doubleField108_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField108);
+      if (doubleField52_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField52);
+      if (doubleField53_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField53);
+      if (doubleField94_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField94);
+      if (doubleField54_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField54);
+      if (doubleField55_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField55);
+      if (doubleField56_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField56);
+      if (doubleField57_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField57);
+      if (doubleField58_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField58);
+      if (int64Field59_ != null) hash ^= Int64Field59.GetHashCode();
+      if (int64Field60_ != null) hash ^= Int64Field60.GetHashCode();
+      if (_unknownFields != null) {
+        hash ^= _unknownFields.GetHashCode();
+      }
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (doubleField1_ != null) {
+        _single_doubleField1_codec.WriteTagAndValue(output, DoubleField1);
+      }
+      if (int64Field2_ != null) {
+        _single_int64Field2_codec.WriteTagAndValue(output, Int64Field2);
+      }
+      if (int64Field3_ != null) {
+        _single_int64Field3_codec.WriteTagAndValue(output, Int64Field3);
+      }
+      if (int64Field4_ != null) {
+        _single_int64Field4_codec.WriteTagAndValue(output, Int64Field4);
+      }
+      if (doubleField7_ != null) {
+        _single_doubleField7_codec.WriteTagAndValue(output, DoubleField7);
+      }
+      if (doubleField8_ != null) {
+        _single_doubleField8_codec.WriteTagAndValue(output, DoubleField8);
+      }
+      if (doubleField9_ != null) {
+        _single_doubleField9_codec.WriteTagAndValue(output, DoubleField9);
+      }
+      if (doubleField10_ != null) {
+        _single_doubleField10_codec.WriteTagAndValue(output, DoubleField10);
+      }
+      if (doubleField11_ != null) {
+        _single_doubleField11_codec.WriteTagAndValue(output, DoubleField11);
+      }
+      if (doubleField14_ != null) {
+        _single_doubleField14_codec.WriteTagAndValue(output, DoubleField14);
+      }
+      if (doubleField15_ != null) {
+        _single_doubleField15_codec.WriteTagAndValue(output, DoubleField15);
+      }
+      if (int64Field19_ != null) {
+        _single_int64Field19_codec.WriteTagAndValue(output, Int64Field19);
+      }
+      if (doubleField20_ != null) {
+        _single_doubleField20_codec.WriteTagAndValue(output, DoubleField20);
+      }
+      if (doubleField21_ != null) {
+        _single_doubleField21_codec.WriteTagAndValue(output, DoubleField21);
+      }
+      if (doubleField22_ != null) {
+        _single_doubleField22_codec.WriteTagAndValue(output, DoubleField22);
+      }
+      if (doubleField25_ != null) {
+        _single_doubleField25_codec.WriteTagAndValue(output, DoubleField25);
+      }
+      if (int64Field26_ != null) {
+        _single_int64Field26_codec.WriteTagAndValue(output, Int64Field26);
+      }
+      if (doubleField28_ != null) {
+        _single_doubleField28_codec.WriteTagAndValue(output, DoubleField28);
+      }
+      if (doubleField29_ != null) {
+        _single_doubleField29_codec.WriteTagAndValue(output, DoubleField29);
+      }
+      if (doubleField30_ != null) {
+        _single_doubleField30_codec.WriteTagAndValue(output, DoubleField30);
+      }
+      if (doubleField31_ != null) {
+        _single_doubleField31_codec.WriteTagAndValue(output, DoubleField31);
+      }
+      if (int64Field32_ != null) {
+        _single_int64Field32_codec.WriteTagAndValue(output, Int64Field32);
+      }
+      if (int64Field37_ != null) {
+        _single_int64Field37_codec.WriteTagAndValue(output, Int64Field37);
+      }
+      if (doubleField38_ != null) {
+        _single_doubleField38_codec.WriteTagAndValue(output, DoubleField38);
+      }
+      if (interactions_ != null) {
+        _single_interactions_codec.WriteTagAndValue(output, Interactions);
+      }
+      if (doubleField40_ != null) {
+        _single_doubleField40_codec.WriteTagAndValue(output, DoubleField40);
+      }
+      if (int64Field41_ != null) {
+        _single_int64Field41_codec.WriteTagAndValue(output, Int64Field41);
+      }
+      if (doubleField42_ != null) {
+        _single_doubleField42_codec.WriteTagAndValue(output, DoubleField42);
+      }
+      if (int64Field43_ != null) {
+        _single_int64Field43_codec.WriteTagAndValue(output, Int64Field43);
+      }
+      if (int64Field44_ != null) {
+        _single_int64Field44_codec.WriteTagAndValue(output, Int64Field44);
+      }
+      if (doubleField45_ != null) {
+        _single_doubleField45_codec.WriteTagAndValue(output, DoubleField45);
+      }
+      if (doubleField46_ != null) {
+        _single_doubleField46_codec.WriteTagAndValue(output, DoubleField46);
+      }
+      if (doubleField47_ != null) {
+        _single_doubleField47_codec.WriteTagAndValue(output, DoubleField47);
+      }
+      if (doubleField48_ != null) {
+        _single_doubleField48_codec.WriteTagAndValue(output, DoubleField48);
+      }
+      if (doubleField49_ != null) {
+        _single_doubleField49_codec.WriteTagAndValue(output, DoubleField49);
+      }
+      if (doubleField50_ != null) {
+        _single_doubleField50_codec.WriteTagAndValue(output, DoubleField50);
+      }
+      if (doubleField51_ != null) {
+        _single_doubleField51_codec.WriteTagAndValue(output, DoubleField51);
+      }
+      if (doubleField52_ != null) {
+        _single_doubleField52_codec.WriteTagAndValue(output, DoubleField52);
+      }
+      if (doubleField53_ != null) {
+        _single_doubleField53_codec.WriteTagAndValue(output, DoubleField53);
+      }
+      if (doubleField54_ != null) {
+        _single_doubleField54_codec.WriteTagAndValue(output, DoubleField54);
+      }
+      if (doubleField55_ != null) {
+        _single_doubleField55_codec.WriteTagAndValue(output, DoubleField55);
+      }
+      if (doubleField56_ != null) {
+        _single_doubleField56_codec.WriteTagAndValue(output, DoubleField56);
+      }
+      if (doubleField57_ != null) {
+        _single_doubleField57_codec.WriteTagAndValue(output, DoubleField57);
+      }
+      if (doubleField58_ != null) {
+        _single_doubleField58_codec.WriteTagAndValue(output, DoubleField58);
+      }
+      if (int64Field59_ != null) {
+        _single_int64Field59_codec.WriteTagAndValue(output, Int64Field59);
+      }
+      if (int64Field60_ != null) {
+        _single_int64Field60_codec.WriteTagAndValue(output, Int64Field60);
+      }
+      if (doubleField62_ != null) {
+        _single_doubleField62_codec.WriteTagAndValue(output, DoubleField62);
+      }
+      if (doubleField65_ != null) {
+        _single_doubleField65_codec.WriteTagAndValue(output, DoubleField65);
+      }
+      if (doubleField66_ != null) {
+        _single_doubleField66_codec.WriteTagAndValue(output, DoubleField66);
+      }
+      if (doubleField67_ != null) {
+        _single_doubleField67_codec.WriteTagAndValue(output, DoubleField67);
+      }
+      if (doubleField68_ != null) {
+        _single_doubleField68_codec.WriteTagAndValue(output, DoubleField68);
+      }
+      if (doubleField69_ != null) {
+        _single_doubleField69_codec.WriteTagAndValue(output, DoubleField69);
+      }
+      if (doubleField70_ != null) {
+        _single_doubleField70_codec.WriteTagAndValue(output, DoubleField70);
+      }
+      if (doubleField71_ != null) {
+        _single_doubleField71_codec.WriteTagAndValue(output, DoubleField71);
+      }
+      if (doubleField72_ != null) {
+        _single_doubleField72_codec.WriteTagAndValue(output, DoubleField72);
+      }
+      if (stringField73_ != null) {
+        _single_stringField73_codec.WriteTagAndValue(output, StringField73);
+      }
+      if (stringField74_ != null) {
+        _single_stringField74_codec.WriteTagAndValue(output, StringField74);
+      }
+      if (doubleField75_ != null) {
+        _single_doubleField75_codec.WriteTagAndValue(output, DoubleField75);
+      }
+      if (doubleField77_ != null) {
+        _single_doubleField77_codec.WriteTagAndValue(output, DoubleField77);
+      }
+      if (doubleField78_ != null) {
+        _single_doubleField78_codec.WriteTagAndValue(output, DoubleField78);
+      }
+      if (doubleField79_ != null) {
+        _single_doubleField79_codec.WriteTagAndValue(output, DoubleField79);
+      }
+      if (EnumField80 != 0) {
+        output.WriteRawTag(128, 5);
+        output.WriteInt32(EnumField80);
+      }
+      if (EnumField81 != 0) {
+        output.WriteRawTag(136, 5);
+        output.WriteInt32(EnumField81);
+      }
+      if (int64Field82_ != null) {
+        _single_int64Field82_codec.WriteTagAndValue(output, Int64Field82);
+      }
+      if (EnumField83 != 0) {
+        output.WriteRawTag(152, 5);
+        output.WriteInt32(EnumField83);
+      }
+      if (doubleField84_ != null) {
+        _single_doubleField84_codec.WriteTagAndValue(output, DoubleField84);
+      }
+      if (int64Field85_ != null) {
+        _single_int64Field85_codec.WriteTagAndValue(output, Int64Field85);
+      }
+      if (int64Field86_ != null) {
+        _single_int64Field86_codec.WriteTagAndValue(output, Int64Field86);
+      }
+      if (int64Field87_ != null) {
+        _single_int64Field87_codec.WriteTagAndValue(output, Int64Field87);
+      }
+      if (doubleField88_ != null) {
+        _single_doubleField88_codec.WriteTagAndValue(output, DoubleField88);
+      }
+      if (doubleField89_ != null) {
+        _single_doubleField89_codec.WriteTagAndValue(output, DoubleField89);
+      }
+      if (doubleField90_ != null) {
+        _single_doubleField90_codec.WriteTagAndValue(output, DoubleField90);
+      }
+      if (doubleField91_ != null) {
+        _single_doubleField91_codec.WriteTagAndValue(output, DoubleField91);
+      }
+      if (doubleField92_ != null) {
+        _single_doubleField92_codec.WriteTagAndValue(output, DoubleField92);
+      }
+      if (doubleField93_ != null) {
+        _single_doubleField93_codec.WriteTagAndValue(output, DoubleField93);
+      }
+      if (doubleField94_ != null) {
+        _single_doubleField94_codec.WriteTagAndValue(output, DoubleField94);
+      }
+      if (doubleField95_ != null) {
+        _single_doubleField95_codec.WriteTagAndValue(output, DoubleField95);
+      }
+      if (doubleField96_ != null) {
+        _single_doubleField96_codec.WriteTagAndValue(output, DoubleField96);
+      }
+      if (doubleField97_ != null) {
+        _single_doubleField97_codec.WriteTagAndValue(output, DoubleField97);
+      }
+      if (doubleField98_ != null) {
+        _single_doubleField98_codec.WriteTagAndValue(output, DoubleField98);
+      }
+      if (doubleField99_ != null) {
+        _single_doubleField99_codec.WriteTagAndValue(output, DoubleField99);
+      }
+      repeatedIntField100_.WriteTo(output, _repeated_repeatedIntField100_codec);
+      if (doubleField101_ != null) {
+        _single_doubleField101_codec.WriteTagAndValue(output, DoubleField101);
+      }
+      if (doubleField102_ != null) {
+        _single_doubleField102_codec.WriteTagAndValue(output, DoubleField102);
+      }
+      if (doubleField103_ != null) {
+        _single_doubleField103_codec.WriteTagAndValue(output, DoubleField103);
+      }
+      if (doubleField104_ != null) {
+        _single_doubleField104_codec.WriteTagAndValue(output, DoubleField104);
+      }
+      if (doubleField105_ != null) {
+        _single_doubleField105_codec.WriteTagAndValue(output, DoubleField105);
+      }
+      if (doubleField106_ != null) {
+        _single_doubleField106_codec.WriteTagAndValue(output, DoubleField106);
+      }
+      if (int64Field107_ != null) {
+        _single_int64Field107_codec.WriteTagAndValue(output, Int64Field107);
+      }
+      if (doubleField108_ != null) {
+        _single_doubleField108_codec.WriteTagAndValue(output, DoubleField108);
+      }
+      if (doubleField109_ != null) {
+        _single_doubleField109_codec.WriteTagAndValue(output, DoubleField109);
+      }
+      if (int64Field110_ != null) {
+        _single_int64Field110_codec.WriteTagAndValue(output, Int64Field110);
+      }
+      if (doubleField111_ != null) {
+        _single_doubleField111_codec.WriteTagAndValue(output, DoubleField111);
+      }
+      if (int64Field112_ != null) {
+        _single_int64Field112_codec.WriteTagAndValue(output, Int64Field112);
+      }
+      if (doubleField113_ != null) {
+        _single_doubleField113_codec.WriteTagAndValue(output, DoubleField113);
+      }
+      if (int64Field114_ != null) {
+        _single_int64Field114_codec.WriteTagAndValue(output, Int64Field114);
+      }
+      if (int64Field115_ != null) {
+        _single_int64Field115_codec.WriteTagAndValue(output, Int64Field115);
+      }
+      if (doubleField116_ != null) {
+        _single_doubleField116_codec.WriteTagAndValue(output, DoubleField116);
+      }
+      if (int64Field117_ != null) {
+        _single_int64Field117_codec.WriteTagAndValue(output, Int64Field117);
+      }
+      if (doubleField118_ != null) {
+        _single_doubleField118_codec.WriteTagAndValue(output, DoubleField118);
+      }
+      if (doubleField119_ != null) {
+        _single_doubleField119_codec.WriteTagAndValue(output, DoubleField119);
+      }
+      if (doubleField120_ != null) {
+        _single_doubleField120_codec.WriteTagAndValue(output, DoubleField120);
+      }
+      if (doubleField121_ != null) {
+        _single_doubleField121_codec.WriteTagAndValue(output, DoubleField121);
+      }
+      if (doubleField122_ != null) {
+        _single_doubleField122_codec.WriteTagAndValue(output, DoubleField122);
+      }
+      if (doubleField123_ != null) {
+        _single_doubleField123_codec.WriteTagAndValue(output, DoubleField123);
+      }
+      if (doubleField124_ != null) {
+        _single_doubleField124_codec.WriteTagAndValue(output, DoubleField124);
+      }
+      if (int64Field125_ != null) {
+        _single_int64Field125_codec.WriteTagAndValue(output, Int64Field125);
+      }
+      if (int64Field126_ != null) {
+        _single_int64Field126_codec.WriteTagAndValue(output, Int64Field126);
+      }
+      if (int64Field127_ != null) {
+        _single_int64Field127_codec.WriteTagAndValue(output, Int64Field127);
+      }
+      if (doubleField128_ != null) {
+        _single_doubleField128_codec.WriteTagAndValue(output, DoubleField128);
+      }
+      if (doubleField129_ != null) {
+        _single_doubleField129_codec.WriteTagAndValue(output, DoubleField129);
+      }
+      if (_unknownFields != null) {
+        _unknownFields.WriteTo(output);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (doubleField95_ != null) {
+        size += _single_doubleField95_codec.CalculateSizeWithTag(DoubleField95);
+      }
+      if (doubleField1_ != null) {
+        size += _single_doubleField1_codec.CalculateSizeWithTag(DoubleField1);
+      }
+      if (doubleField79_ != null) {
+        size += _single_doubleField79_codec.CalculateSizeWithTag(DoubleField79);
+      }
+      if (int64Field2_ != null) {
+        size += _single_int64Field2_codec.CalculateSizeWithTag(Int64Field2);
+      }
+      if (doubleField96_ != null) {
+        size += _single_doubleField96_codec.CalculateSizeWithTag(DoubleField96);
+      }
+      if (int64Field3_ != null) {
+        size += _single_int64Field3_codec.CalculateSizeWithTag(Int64Field3);
+      }
+      if (int64Field4_ != null) {
+        size += _single_int64Field4_codec.CalculateSizeWithTag(Int64Field4);
+      }
+      if (doubleField97_ != null) {
+        size += _single_doubleField97_codec.CalculateSizeWithTag(DoubleField97);
+      }
+      if (doubleField65_ != null) {
+        size += _single_doubleField65_codec.CalculateSizeWithTag(DoubleField65);
+      }
+      if (doubleField66_ != null) {
+        size += _single_doubleField66_codec.CalculateSizeWithTag(DoubleField66);
+      }
+      if (doubleField7_ != null) {
+        size += _single_doubleField7_codec.CalculateSizeWithTag(DoubleField7);
+      }
+      if (doubleField62_ != null) {
+        size += _single_doubleField62_codec.CalculateSizeWithTag(DoubleField62);
+      }
+      if (doubleField118_ != null) {
+        size += _single_doubleField118_codec.CalculateSizeWithTag(DoubleField118);
+      }
+      if (doubleField119_ != null) {
+        size += _single_doubleField119_codec.CalculateSizeWithTag(DoubleField119);
+      }
+      if (doubleField67_ != null) {
+        size += _single_doubleField67_codec.CalculateSizeWithTag(DoubleField67);
+      }
+      if (doubleField120_ != null) {
+        size += _single_doubleField120_codec.CalculateSizeWithTag(DoubleField120);
+      }
+      if (doubleField121_ != null) {
+        size += _single_doubleField121_codec.CalculateSizeWithTag(DoubleField121);
+      }
+      if (doubleField122_ != null) {
+        size += _single_doubleField122_codec.CalculateSizeWithTag(DoubleField122);
+      }
+      if (doubleField123_ != null) {
+        size += _single_doubleField123_codec.CalculateSizeWithTag(DoubleField123);
+      }
+      if (doubleField124_ != null) {
+        size += _single_doubleField124_codec.CalculateSizeWithTag(DoubleField124);
+      }
+      if (doubleField8_ != null) {
+        size += _single_doubleField8_codec.CalculateSizeWithTag(DoubleField8);
+      }
+      if (doubleField9_ != null) {
+        size += _single_doubleField9_codec.CalculateSizeWithTag(DoubleField9);
+      }
+      if (doubleField98_ != null) {
+        size += _single_doubleField98_codec.CalculateSizeWithTag(DoubleField98);
+      }
+      if (doubleField10_ != null) {
+        size += _single_doubleField10_codec.CalculateSizeWithTag(DoubleField10);
+      }
+      if (doubleField11_ != null) {
+        size += _single_doubleField11_codec.CalculateSizeWithTag(DoubleField11);
+      }
+      if (doubleField99_ != null) {
+        size += _single_doubleField99_codec.CalculateSizeWithTag(DoubleField99);
+      }
+      if (doubleField84_ != null) {
+        size += _single_doubleField84_codec.CalculateSizeWithTag(DoubleField84);
+      }
+      if (doubleField14_ != null) {
+        size += _single_doubleField14_codec.CalculateSizeWithTag(DoubleField14);
+      }
+      if (doubleField77_ != null) {
+        size += _single_doubleField77_codec.CalculateSizeWithTag(DoubleField77);
+      }
+      if (doubleField15_ != null) {
+        size += _single_doubleField15_codec.CalculateSizeWithTag(DoubleField15);
+      }
+      if (int64Field19_ != null) {
+        size += _single_int64Field19_codec.CalculateSizeWithTag(Int64Field19);
+      }
+      if (int64Field115_ != null) {
+        size += _single_int64Field115_codec.CalculateSizeWithTag(Int64Field115);
+      }
+      if (doubleField116_ != null) {
+        size += _single_doubleField116_codec.CalculateSizeWithTag(DoubleField116);
+      }
+      if (int64Field117_ != null) {
+        size += _single_int64Field117_codec.CalculateSizeWithTag(Int64Field117);
+      }
+      if (doubleField20_ != null) {
+        size += _single_doubleField20_codec.CalculateSizeWithTag(DoubleField20);
+      }
+      if (doubleField21_ != null) {
+        size += _single_doubleField21_codec.CalculateSizeWithTag(DoubleField21);
+      }
+      if (stringField73_ != null) {
+        size += _single_stringField73_codec.CalculateSizeWithTag(StringField73);
+      }
+      if (stringField74_ != null) {
+        size += _single_stringField74_codec.CalculateSizeWithTag(StringField74);
+      }
+      if (doubleField22_ != null) {
+        size += _single_doubleField22_codec.CalculateSizeWithTag(DoubleField22);
+      }
+      if (doubleField69_ != null) {
+        size += _single_doubleField69_codec.CalculateSizeWithTag(DoubleField69);
+      }
+      if (doubleField70_ != null) {
+        size += _single_doubleField70_codec.CalculateSizeWithTag(DoubleField70);
+      }
+      if (doubleField71_ != null) {
+        size += _single_doubleField71_codec.CalculateSizeWithTag(DoubleField71);
+      }
+      if (doubleField72_ != null) {
+        size += _single_doubleField72_codec.CalculateSizeWithTag(DoubleField72);
+      }
+      if (doubleField25_ != null) {
+        size += _single_doubleField25_codec.CalculateSizeWithTag(DoubleField25);
+      }
+      if (int64Field26_ != null) {
+        size += _single_int64Field26_codec.CalculateSizeWithTag(Int64Field26);
+      }
+      if (doubleField68_ != null) {
+        size += _single_doubleField68_codec.CalculateSizeWithTag(DoubleField68);
+      }
+      if (doubleField28_ != null) {
+        size += _single_doubleField28_codec.CalculateSizeWithTag(DoubleField28);
+      }
+      if (doubleField106_ != null) {
+        size += _single_doubleField106_codec.CalculateSizeWithTag(DoubleField106);
+      }
+      if (doubleField29_ != null) {
+        size += _single_doubleField29_codec.CalculateSizeWithTag(DoubleField29);
+      }
+      if (doubleField30_ != null) {
+        size += _single_doubleField30_codec.CalculateSizeWithTag(DoubleField30);
+      }
+      if (doubleField101_ != null) {
+        size += _single_doubleField101_codec.CalculateSizeWithTag(DoubleField101);
+      }
+      if (doubleField102_ != null) {
+        size += _single_doubleField102_codec.CalculateSizeWithTag(DoubleField102);
+      }
+      if (doubleField103_ != null) {
+        size += _single_doubleField103_codec.CalculateSizeWithTag(DoubleField103);
+      }
+      if (doubleField104_ != null) {
+        size += _single_doubleField104_codec.CalculateSizeWithTag(DoubleField104);
+      }
+      if (doubleField105_ != null) {
+        size += _single_doubleField105_codec.CalculateSizeWithTag(DoubleField105);
+      }
+      if (doubleField31_ != null) {
+        size += _single_doubleField31_codec.CalculateSizeWithTag(DoubleField31);
+      }
+      if (int64Field32_ != null) {
+        size += _single_int64Field32_codec.CalculateSizeWithTag(Int64Field32);
+      }
+      if (doubleField75_ != null) {
+        size += _single_doubleField75_codec.CalculateSizeWithTag(DoubleField75);
+      }
+      if (doubleField129_ != null) {
+        size += _single_doubleField129_codec.CalculateSizeWithTag(DoubleField129);
+      }
+      if (EnumField80 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField80);
+      }
+      if (EnumField81 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField81);
+      }
+      if (int64Field82_ != null) {
+        size += _single_int64Field82_codec.CalculateSizeWithTag(Int64Field82);
+      }
+      if (EnumField83 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField83);
+      }
+      if (int64Field85_ != null) {
+        size += _single_int64Field85_codec.CalculateSizeWithTag(Int64Field85);
+      }
+      if (int64Field86_ != null) {
+        size += _single_int64Field86_codec.CalculateSizeWithTag(Int64Field86);
+      }
+      if (int64Field87_ != null) {
+        size += _single_int64Field87_codec.CalculateSizeWithTag(Int64Field87);
+      }
+      if (int64Field125_ != null) {
+        size += _single_int64Field125_codec.CalculateSizeWithTag(Int64Field125);
+      }
+      if (int64Field37_ != null) {
+        size += _single_int64Field37_codec.CalculateSizeWithTag(Int64Field37);
+      }
+      if (doubleField38_ != null) {
+        size += _single_doubleField38_codec.CalculateSizeWithTag(DoubleField38);
+      }
+      if (interactions_ != null) {
+        size += _single_interactions_codec.CalculateSizeWithTag(Interactions);
+      }
+      size += repeatedIntField100_.CalculateSize(_repeated_repeatedIntField100_codec);
+      if (doubleField40_ != null) {
+        size += _single_doubleField40_codec.CalculateSizeWithTag(DoubleField40);
+      }
+      if (int64Field41_ != null) {
+        size += _single_int64Field41_codec.CalculateSizeWithTag(Int64Field41);
+      }
+      if (int64Field126_ != null) {
+        size += _single_int64Field126_codec.CalculateSizeWithTag(Int64Field126);
+      }
+      if (int64Field127_ != null) {
+        size += _single_int64Field127_codec.CalculateSizeWithTag(Int64Field127);
+      }
+      if (doubleField128_ != null) {
+        size += _single_doubleField128_codec.CalculateSizeWithTag(DoubleField128);
+      }
+      if (doubleField109_ != null) {
+        size += _single_doubleField109_codec.CalculateSizeWithTag(DoubleField109);
+      }
+      if (int64Field110_ != null) {
+        size += _single_int64Field110_codec.CalculateSizeWithTag(Int64Field110);
+      }
+      if (doubleField111_ != null) {
+        size += _single_doubleField111_codec.CalculateSizeWithTag(DoubleField111);
+      }
+      if (int64Field112_ != null) {
+        size += _single_int64Field112_codec.CalculateSizeWithTag(Int64Field112);
+      }
+      if (doubleField113_ != null) {
+        size += _single_doubleField113_codec.CalculateSizeWithTag(DoubleField113);
+      }
+      if (int64Field114_ != null) {
+        size += _single_int64Field114_codec.CalculateSizeWithTag(Int64Field114);
+      }
+      if (doubleField42_ != null) {
+        size += _single_doubleField42_codec.CalculateSizeWithTag(DoubleField42);
+      }
+      if (int64Field43_ != null) {
+        size += _single_int64Field43_codec.CalculateSizeWithTag(Int64Field43);
+      }
+      if (int64Field44_ != null) {
+        size += _single_int64Field44_codec.CalculateSizeWithTag(Int64Field44);
+      }
+      if (doubleField45_ != null) {
+        size += _single_doubleField45_codec.CalculateSizeWithTag(DoubleField45);
+      }
+      if (doubleField46_ != null) {
+        size += _single_doubleField46_codec.CalculateSizeWithTag(DoubleField46);
+      }
+      if (doubleField78_ != null) {
+        size += _single_doubleField78_codec.CalculateSizeWithTag(DoubleField78);
+      }
+      if (doubleField88_ != null) {
+        size += _single_doubleField88_codec.CalculateSizeWithTag(DoubleField88);
+      }
+      if (doubleField47_ != null) {
+        size += _single_doubleField47_codec.CalculateSizeWithTag(DoubleField47);
+      }
+      if (doubleField89_ != null) {
+        size += _single_doubleField89_codec.CalculateSizeWithTag(DoubleField89);
+      }
+      if (doubleField48_ != null) {
+        size += _single_doubleField48_codec.CalculateSizeWithTag(DoubleField48);
+      }
+      if (doubleField49_ != null) {
+        size += _single_doubleField49_codec.CalculateSizeWithTag(DoubleField49);
+      }
+      if (doubleField50_ != null) {
+        size += _single_doubleField50_codec.CalculateSizeWithTag(DoubleField50);
+      }
+      if (doubleField90_ != null) {
+        size += _single_doubleField90_codec.CalculateSizeWithTag(DoubleField90);
+      }
+      if (doubleField51_ != null) {
+        size += _single_doubleField51_codec.CalculateSizeWithTag(DoubleField51);
+      }
+      if (doubleField91_ != null) {
+        size += _single_doubleField91_codec.CalculateSizeWithTag(DoubleField91);
+      }
+      if (doubleField92_ != null) {
+        size += _single_doubleField92_codec.CalculateSizeWithTag(DoubleField92);
+      }
+      if (int64Field107_ != null) {
+        size += _single_int64Field107_codec.CalculateSizeWithTag(Int64Field107);
+      }
+      if (doubleField93_ != null) {
+        size += _single_doubleField93_codec.CalculateSizeWithTag(DoubleField93);
+      }
+      if (doubleField108_ != null) {
+        size += _single_doubleField108_codec.CalculateSizeWithTag(DoubleField108);
+      }
+      if (doubleField52_ != null) {
+        size += _single_doubleField52_codec.CalculateSizeWithTag(DoubleField52);
+      }
+      if (doubleField53_ != null) {
+        size += _single_doubleField53_codec.CalculateSizeWithTag(DoubleField53);
+      }
+      if (doubleField94_ != null) {
+        size += _single_doubleField94_codec.CalculateSizeWithTag(DoubleField94);
+      }
+      if (doubleField54_ != null) {
+        size += _single_doubleField54_codec.CalculateSizeWithTag(DoubleField54);
+      }
+      if (doubleField55_ != null) {
+        size += _single_doubleField55_codec.CalculateSizeWithTag(DoubleField55);
+      }
+      if (doubleField56_ != null) {
+        size += _single_doubleField56_codec.CalculateSizeWithTag(DoubleField56);
+      }
+      if (doubleField57_ != null) {
+        size += _single_doubleField57_codec.CalculateSizeWithTag(DoubleField57);
+      }
+      if (doubleField58_ != null) {
+        size += _single_doubleField58_codec.CalculateSizeWithTag(DoubleField58);
+      }
+      if (int64Field59_ != null) {
+        size += _single_int64Field59_codec.CalculateSizeWithTag(Int64Field59);
+      }
+      if (int64Field60_ != null) {
+        size += _single_int64Field60_codec.CalculateSizeWithTag(Int64Field60);
+      }
+      if (_unknownFields != null) {
+        size += _unknownFields.CalculateSize();
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(ManyWrapperFieldsMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.doubleField95_ != null) {
+        if (doubleField95_ == null || other.DoubleField95 != 0D) {
+          DoubleField95 = other.DoubleField95;
+        }
+      }
+      if (other.doubleField1_ != null) {
+        if (doubleField1_ == null || other.DoubleField1 != 0D) {
+          DoubleField1 = other.DoubleField1;
+        }
+      }
+      if (other.doubleField79_ != null) {
+        if (doubleField79_ == null || other.DoubleField79 != 0D) {
+          DoubleField79 = other.DoubleField79;
+        }
+      }
+      if (other.int64Field2_ != null) {
+        if (int64Field2_ == null || other.Int64Field2 != 0L) {
+          Int64Field2 = other.Int64Field2;
+        }
+      }
+      if (other.doubleField96_ != null) {
+        if (doubleField96_ == null || other.DoubleField96 != 0D) {
+          DoubleField96 = other.DoubleField96;
+        }
+      }
+      if (other.int64Field3_ != null) {
+        if (int64Field3_ == null || other.Int64Field3 != 0L) {
+          Int64Field3 = other.Int64Field3;
+        }
+      }
+      if (other.int64Field4_ != null) {
+        if (int64Field4_ == null || other.Int64Field4 != 0L) {
+          Int64Field4 = other.Int64Field4;
+        }
+      }
+      if (other.doubleField97_ != null) {
+        if (doubleField97_ == null || other.DoubleField97 != 0D) {
+          DoubleField97 = other.DoubleField97;
+        }
+      }
+      if (other.doubleField65_ != null) {
+        if (doubleField65_ == null || other.DoubleField65 != 0D) {
+          DoubleField65 = other.DoubleField65;
+        }
+      }
+      if (other.doubleField66_ != null) {
+        if (doubleField66_ == null || other.DoubleField66 != 0D) {
+          DoubleField66 = other.DoubleField66;
+        }
+      }
+      if (other.doubleField7_ != null) {
+        if (doubleField7_ == null || other.DoubleField7 != 0D) {
+          DoubleField7 = other.DoubleField7;
+        }
+      }
+      if (other.doubleField62_ != null) {
+        if (doubleField62_ == null || other.DoubleField62 != 0D) {
+          DoubleField62 = other.DoubleField62;
+        }
+      }
+      if (other.doubleField118_ != null) {
+        if (doubleField118_ == null || other.DoubleField118 != 0D) {
+          DoubleField118 = other.DoubleField118;
+        }
+      }
+      if (other.doubleField119_ != null) {
+        if (doubleField119_ == null || other.DoubleField119 != 0D) {
+          DoubleField119 = other.DoubleField119;
+        }
+      }
+      if (other.doubleField67_ != null) {
+        if (doubleField67_ == null || other.DoubleField67 != 0D) {
+          DoubleField67 = other.DoubleField67;
+        }
+      }
+      if (other.doubleField120_ != null) {
+        if (doubleField120_ == null || other.DoubleField120 != 0D) {
+          DoubleField120 = other.DoubleField120;
+        }
+      }
+      if (other.doubleField121_ != null) {
+        if (doubleField121_ == null || other.DoubleField121 != 0D) {
+          DoubleField121 = other.DoubleField121;
+        }
+      }
+      if (other.doubleField122_ != null) {
+        if (doubleField122_ == null || other.DoubleField122 != 0D) {
+          DoubleField122 = other.DoubleField122;
+        }
+      }
+      if (other.doubleField123_ != null) {
+        if (doubleField123_ == null || other.DoubleField123 != 0D) {
+          DoubleField123 = other.DoubleField123;
+        }
+      }
+      if (other.doubleField124_ != null) {
+        if (doubleField124_ == null || other.DoubleField124 != 0D) {
+          DoubleField124 = other.DoubleField124;
+        }
+      }
+      if (other.doubleField8_ != null) {
+        if (doubleField8_ == null || other.DoubleField8 != 0D) {
+          DoubleField8 = other.DoubleField8;
+        }
+      }
+      if (other.doubleField9_ != null) {
+        if (doubleField9_ == null || other.DoubleField9 != 0D) {
+          DoubleField9 = other.DoubleField9;
+        }
+      }
+      if (other.doubleField98_ != null) {
+        if (doubleField98_ == null || other.DoubleField98 != 0D) {
+          DoubleField98 = other.DoubleField98;
+        }
+      }
+      if (other.doubleField10_ != null) {
+        if (doubleField10_ == null || other.DoubleField10 != 0D) {
+          DoubleField10 = other.DoubleField10;
+        }
+      }
+      if (other.doubleField11_ != null) {
+        if (doubleField11_ == null || other.DoubleField11 != 0D) {
+          DoubleField11 = other.DoubleField11;
+        }
+      }
+      if (other.doubleField99_ != null) {
+        if (doubleField99_ == null || other.DoubleField99 != 0D) {
+          DoubleField99 = other.DoubleField99;
+        }
+      }
+      if (other.doubleField84_ != null) {
+        if (doubleField84_ == null || other.DoubleField84 != 0D) {
+          DoubleField84 = other.DoubleField84;
+        }
+      }
+      if (other.doubleField14_ != null) {
+        if (doubleField14_ == null || other.DoubleField14 != 0D) {
+          DoubleField14 = other.DoubleField14;
+        }
+      }
+      if (other.doubleField77_ != null) {
+        if (doubleField77_ == null || other.DoubleField77 != 0D) {
+          DoubleField77 = other.DoubleField77;
+        }
+      }
+      if (other.doubleField15_ != null) {
+        if (doubleField15_ == null || other.DoubleField15 != 0D) {
+          DoubleField15 = other.DoubleField15;
+        }
+      }
+      if (other.int64Field19_ != null) {
+        if (int64Field19_ == null || other.Int64Field19 != 0L) {
+          Int64Field19 = other.Int64Field19;
+        }
+      }
+      if (other.int64Field115_ != null) {
+        if (int64Field115_ == null || other.Int64Field115 != 0L) {
+          Int64Field115 = other.Int64Field115;
+        }
+      }
+      if (other.doubleField116_ != null) {
+        if (doubleField116_ == null || other.DoubleField116 != 0D) {
+          DoubleField116 = other.DoubleField116;
+        }
+      }
+      if (other.int64Field117_ != null) {
+        if (int64Field117_ == null || other.Int64Field117 != 0L) {
+          Int64Field117 = other.Int64Field117;
+        }
+      }
+      if (other.doubleField20_ != null) {
+        if (doubleField20_ == null || other.DoubleField20 != 0D) {
+          DoubleField20 = other.DoubleField20;
+        }
+      }
+      if (other.doubleField21_ != null) {
+        if (doubleField21_ == null || other.DoubleField21 != 0D) {
+          DoubleField21 = other.DoubleField21;
+        }
+      }
+      if (other.stringField73_ != null) {
+        if (stringField73_ == null || other.StringField73 != "") {
+          StringField73 = other.StringField73;
+        }
+      }
+      if (other.stringField74_ != null) {
+        if (stringField74_ == null || other.StringField74 != "") {
+          StringField74 = other.StringField74;
+        }
+      }
+      if (other.doubleField22_ != null) {
+        if (doubleField22_ == null || other.DoubleField22 != 0D) {
+          DoubleField22 = other.DoubleField22;
+        }
+      }
+      if (other.doubleField69_ != null) {
+        if (doubleField69_ == null || other.DoubleField69 != 0D) {
+          DoubleField69 = other.DoubleField69;
+        }
+      }
+      if (other.doubleField70_ != null) {
+        if (doubleField70_ == null || other.DoubleField70 != 0D) {
+          DoubleField70 = other.DoubleField70;
+        }
+      }
+      if (other.doubleField71_ != null) {
+        if (doubleField71_ == null || other.DoubleField71 != 0D) {
+          DoubleField71 = other.DoubleField71;
+        }
+      }
+      if (other.doubleField72_ != null) {
+        if (doubleField72_ == null || other.DoubleField72 != 0D) {
+          DoubleField72 = other.DoubleField72;
+        }
+      }
+      if (other.doubleField25_ != null) {
+        if (doubleField25_ == null || other.DoubleField25 != 0D) {
+          DoubleField25 = other.DoubleField25;
+        }
+      }
+      if (other.int64Field26_ != null) {
+        if (int64Field26_ == null || other.Int64Field26 != 0L) {
+          Int64Field26 = other.Int64Field26;
+        }
+      }
+      if (other.doubleField68_ != null) {
+        if (doubleField68_ == null || other.DoubleField68 != 0D) {
+          DoubleField68 = other.DoubleField68;
+        }
+      }
+      if (other.doubleField28_ != null) {
+        if (doubleField28_ == null || other.DoubleField28 != 0D) {
+          DoubleField28 = other.DoubleField28;
+        }
+      }
+      if (other.doubleField106_ != null) {
+        if (doubleField106_ == null || other.DoubleField106 != 0D) {
+          DoubleField106 = other.DoubleField106;
+        }
+      }
+      if (other.doubleField29_ != null) {
+        if (doubleField29_ == null || other.DoubleField29 != 0D) {
+          DoubleField29 = other.DoubleField29;
+        }
+      }
+      if (other.doubleField30_ != null) {
+        if (doubleField30_ == null || other.DoubleField30 != 0D) {
+          DoubleField30 = other.DoubleField30;
+        }
+      }
+      if (other.doubleField101_ != null) {
+        if (doubleField101_ == null || other.DoubleField101 != 0D) {
+          DoubleField101 = other.DoubleField101;
+        }
+      }
+      if (other.doubleField102_ != null) {
+        if (doubleField102_ == null || other.DoubleField102 != 0D) {
+          DoubleField102 = other.DoubleField102;
+        }
+      }
+      if (other.doubleField103_ != null) {
+        if (doubleField103_ == null || other.DoubleField103 != 0D) {
+          DoubleField103 = other.DoubleField103;
+        }
+      }
+      if (other.doubleField104_ != null) {
+        if (doubleField104_ == null || other.DoubleField104 != 0D) {
+          DoubleField104 = other.DoubleField104;
+        }
+      }
+      if (other.doubleField105_ != null) {
+        if (doubleField105_ == null || other.DoubleField105 != 0D) {
+          DoubleField105 = other.DoubleField105;
+        }
+      }
+      if (other.doubleField31_ != null) {
+        if (doubleField31_ == null || other.DoubleField31 != 0D) {
+          DoubleField31 = other.DoubleField31;
+        }
+      }
+      if (other.int64Field32_ != null) {
+        if (int64Field32_ == null || other.Int64Field32 != 0L) {
+          Int64Field32 = other.Int64Field32;
+        }
+      }
+      if (other.doubleField75_ != null) {
+        if (doubleField75_ == null || other.DoubleField75 != 0D) {
+          DoubleField75 = other.DoubleField75;
+        }
+      }
+      if (other.doubleField129_ != null) {
+        if (doubleField129_ == null || other.DoubleField129 != 0D) {
+          DoubleField129 = other.DoubleField129;
+        }
+      }
+      if (other.EnumField80 != 0) {
+        EnumField80 = other.EnumField80;
+      }
+      if (other.EnumField81 != 0) {
+        EnumField81 = other.EnumField81;
+      }
+      if (other.int64Field82_ != null) {
+        if (int64Field82_ == null || other.Int64Field82 != 0L) {
+          Int64Field82 = other.Int64Field82;
+        }
+      }
+      if (other.EnumField83 != 0) {
+        EnumField83 = other.EnumField83;
+      }
+      if (other.int64Field85_ != null) {
+        if (int64Field85_ == null || other.Int64Field85 != 0L) {
+          Int64Field85 = other.Int64Field85;
+        }
+      }
+      if (other.int64Field86_ != null) {
+        if (int64Field86_ == null || other.Int64Field86 != 0L) {
+          Int64Field86 = other.Int64Field86;
+        }
+      }
+      if (other.int64Field87_ != null) {
+        if (int64Field87_ == null || other.Int64Field87 != 0L) {
+          Int64Field87 = other.Int64Field87;
+        }
+      }
+      if (other.int64Field125_ != null) {
+        if (int64Field125_ == null || other.Int64Field125 != 0L) {
+          Int64Field125 = other.Int64Field125;
+        }
+      }
+      if (other.int64Field37_ != null) {
+        if (int64Field37_ == null || other.Int64Field37 != 0L) {
+          Int64Field37 = other.Int64Field37;
+        }
+      }
+      if (other.doubleField38_ != null) {
+        if (doubleField38_ == null || other.DoubleField38 != 0D) {
+          DoubleField38 = other.DoubleField38;
+        }
+      }
+      if (other.interactions_ != null) {
+        if (interactions_ == null || other.Interactions != 0L) {
+          Interactions = other.Interactions;
+        }
+      }
+      repeatedIntField100_.Add(other.repeatedIntField100_);
+      if (other.doubleField40_ != null) {
+        if (doubleField40_ == null || other.DoubleField40 != 0D) {
+          DoubleField40 = other.DoubleField40;
+        }
+      }
+      if (other.int64Field41_ != null) {
+        if (int64Field41_ == null || other.Int64Field41 != 0L) {
+          Int64Field41 = other.Int64Field41;
+        }
+      }
+      if (other.int64Field126_ != null) {
+        if (int64Field126_ == null || other.Int64Field126 != 0L) {
+          Int64Field126 = other.Int64Field126;
+        }
+      }
+      if (other.int64Field127_ != null) {
+        if (int64Field127_ == null || other.Int64Field127 != 0L) {
+          Int64Field127 = other.Int64Field127;
+        }
+      }
+      if (other.doubleField128_ != null) {
+        if (doubleField128_ == null || other.DoubleField128 != 0D) {
+          DoubleField128 = other.DoubleField128;
+        }
+      }
+      if (other.doubleField109_ != null) {
+        if (doubleField109_ == null || other.DoubleField109 != 0D) {
+          DoubleField109 = other.DoubleField109;
+        }
+      }
+      if (other.int64Field110_ != null) {
+        if (int64Field110_ == null || other.Int64Field110 != 0L) {
+          Int64Field110 = other.Int64Field110;
+        }
+      }
+      if (other.doubleField111_ != null) {
+        if (doubleField111_ == null || other.DoubleField111 != 0D) {
+          DoubleField111 = other.DoubleField111;
+        }
+      }
+      if (other.int64Field112_ != null) {
+        if (int64Field112_ == null || other.Int64Field112 != 0L) {
+          Int64Field112 = other.Int64Field112;
+        }
+      }
+      if (other.doubleField113_ != null) {
+        if (doubleField113_ == null || other.DoubleField113 != 0D) {
+          DoubleField113 = other.DoubleField113;
+        }
+      }
+      if (other.int64Field114_ != null) {
+        if (int64Field114_ == null || other.Int64Field114 != 0L) {
+          Int64Field114 = other.Int64Field114;
+        }
+      }
+      if (other.doubleField42_ != null) {
+        if (doubleField42_ == null || other.DoubleField42 != 0D) {
+          DoubleField42 = other.DoubleField42;
+        }
+      }
+      if (other.int64Field43_ != null) {
+        if (int64Field43_ == null || other.Int64Field43 != 0L) {
+          Int64Field43 = other.Int64Field43;
+        }
+      }
+      if (other.int64Field44_ != null) {
+        if (int64Field44_ == null || other.Int64Field44 != 0L) {
+          Int64Field44 = other.Int64Field44;
+        }
+      }
+      if (other.doubleField45_ != null) {
+        if (doubleField45_ == null || other.DoubleField45 != 0D) {
+          DoubleField45 = other.DoubleField45;
+        }
+      }
+      if (other.doubleField46_ != null) {
+        if (doubleField46_ == null || other.DoubleField46 != 0D) {
+          DoubleField46 = other.DoubleField46;
+        }
+      }
+      if (other.doubleField78_ != null) {
+        if (doubleField78_ == null || other.DoubleField78 != 0D) {
+          DoubleField78 = other.DoubleField78;
+        }
+      }
+      if (other.doubleField88_ != null) {
+        if (doubleField88_ == null || other.DoubleField88 != 0D) {
+          DoubleField88 = other.DoubleField88;
+        }
+      }
+      if (other.doubleField47_ != null) {
+        if (doubleField47_ == null || other.DoubleField47 != 0D) {
+          DoubleField47 = other.DoubleField47;
+        }
+      }
+      if (other.doubleField89_ != null) {
+        if (doubleField89_ == null || other.DoubleField89 != 0D) {
+          DoubleField89 = other.DoubleField89;
+        }
+      }
+      if (other.doubleField48_ != null) {
+        if (doubleField48_ == null || other.DoubleField48 != 0D) {
+          DoubleField48 = other.DoubleField48;
+        }
+      }
+      if (other.doubleField49_ != null) {
+        if (doubleField49_ == null || other.DoubleField49 != 0D) {
+          DoubleField49 = other.DoubleField49;
+        }
+      }
+      if (other.doubleField50_ != null) {
+        if (doubleField50_ == null || other.DoubleField50 != 0D) {
+          DoubleField50 = other.DoubleField50;
+        }
+      }
+      if (other.doubleField90_ != null) {
+        if (doubleField90_ == null || other.DoubleField90 != 0D) {
+          DoubleField90 = other.DoubleField90;
+        }
+      }
+      if (other.doubleField51_ != null) {
+        if (doubleField51_ == null || other.DoubleField51 != 0D) {
+          DoubleField51 = other.DoubleField51;
+        }
+      }
+      if (other.doubleField91_ != null) {
+        if (doubleField91_ == null || other.DoubleField91 != 0D) {
+          DoubleField91 = other.DoubleField91;
+        }
+      }
+      if (other.doubleField92_ != null) {
+        if (doubleField92_ == null || other.DoubleField92 != 0D) {
+          DoubleField92 = other.DoubleField92;
+        }
+      }
+      if (other.int64Field107_ != null) {
+        if (int64Field107_ == null || other.Int64Field107 != 0L) {
+          Int64Field107 = other.Int64Field107;
+        }
+      }
+      if (other.doubleField93_ != null) {
+        if (doubleField93_ == null || other.DoubleField93 != 0D) {
+          DoubleField93 = other.DoubleField93;
+        }
+      }
+      if (other.doubleField108_ != null) {
+        if (doubleField108_ == null || other.DoubleField108 != 0D) {
+          DoubleField108 = other.DoubleField108;
+        }
+      }
+      if (other.doubleField52_ != null) {
+        if (doubleField52_ == null || other.DoubleField52 != 0D) {
+          DoubleField52 = other.DoubleField52;
+        }
+      }
+      if (other.doubleField53_ != null) {
+        if (doubleField53_ == null || other.DoubleField53 != 0D) {
+          DoubleField53 = other.DoubleField53;
+        }
+      }
+      if (other.doubleField94_ != null) {
+        if (doubleField94_ == null || other.DoubleField94 != 0D) {
+          DoubleField94 = other.DoubleField94;
+        }
+      }
+      if (other.doubleField54_ != null) {
+        if (doubleField54_ == null || other.DoubleField54 != 0D) {
+          DoubleField54 = other.DoubleField54;
+        }
+      }
+      if (other.doubleField55_ != null) {
+        if (doubleField55_ == null || other.DoubleField55 != 0D) {
+          DoubleField55 = other.DoubleField55;
+        }
+      }
+      if (other.doubleField56_ != null) {
+        if (doubleField56_ == null || other.DoubleField56 != 0D) {
+          DoubleField56 = other.DoubleField56;
+        }
+      }
+      if (other.doubleField57_ != null) {
+        if (doubleField57_ == null || other.DoubleField57 != 0D) {
+          DoubleField57 = other.DoubleField57;
+        }
+      }
+      if (other.doubleField58_ != null) {
+        if (doubleField58_ == null || other.DoubleField58 != 0D) {
+          DoubleField58 = other.DoubleField58;
+        }
+      }
+      if (other.int64Field59_ != null) {
+        if (int64Field59_ == null || other.Int64Field59 != 0L) {
+          Int64Field59 = other.Int64Field59;
+        }
+      }
+      if (other.int64Field60_ != null) {
+        if (int64Field60_ == null || other.Int64Field60 != 0L) {
+          Int64Field60 = other.Int64Field60;
+        }
+      }
+      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+            break;
+          case 10: {
+            double? value = _single_doubleField1_codec.Read(input);
+            if (doubleField1_ == null || value != 0D) {
+              DoubleField1 = value;
+            }
+            break;
+          }
+          case 18: {
+            long? value = _single_int64Field2_codec.Read(input);
+            if (int64Field2_ == null || value != 0L) {
+              Int64Field2 = value;
+            }
+            break;
+          }
+          case 26: {
+            long? value = _single_int64Field3_codec.Read(input);
+            if (int64Field3_ == null || value != 0L) {
+              Int64Field3 = value;
+            }
+            break;
+          }
+          case 34: {
+            long? value = _single_int64Field4_codec.Read(input);
+            if (int64Field4_ == null || value != 0L) {
+              Int64Field4 = value;
+            }
+            break;
+          }
+          case 58: {
+            double? value = _single_doubleField7_codec.Read(input);
+            if (doubleField7_ == null || value != 0D) {
+              DoubleField7 = value;
+            }
+            break;
+          }
+          case 66: {
+            double? value = _single_doubleField8_codec.Read(input);
+            if (doubleField8_ == null || value != 0D) {
+              DoubleField8 = value;
+            }
+            break;
+          }
+          case 74: {
+            double? value = _single_doubleField9_codec.Read(input);
+            if (doubleField9_ == null || value != 0D) {
+              DoubleField9 = value;
+            }
+            break;
+          }
+          case 82: {
+            double? value = _single_doubleField10_codec.Read(input);
+            if (doubleField10_ == null || value != 0D) {
+              DoubleField10 = value;
+            }
+            break;
+          }
+          case 90: {
+            double? value = _single_doubleField11_codec.Read(input);
+            if (doubleField11_ == null || value != 0D) {
+              DoubleField11 = value;
+            }
+            break;
+          }
+          case 114: {
+            double? value = _single_doubleField14_codec.Read(input);
+            if (doubleField14_ == null || value != 0D) {
+              DoubleField14 = value;
+            }
+            break;
+          }
+          case 122: {
+            double? value = _single_doubleField15_codec.Read(input);
+            if (doubleField15_ == null || value != 0D) {
+              DoubleField15 = value;
+            }
+            break;
+          }
+          case 154: {
+            long? value = _single_int64Field19_codec.Read(input);
+            if (int64Field19_ == null || value != 0L) {
+              Int64Field19 = value;
+            }
+            break;
+          }
+          case 162: {
+            double? value = _single_doubleField20_codec.Read(input);
+            if (doubleField20_ == null || value != 0D) {
+              DoubleField20 = value;
+            }
+            break;
+          }
+          case 170: {
+            double? value = _single_doubleField21_codec.Read(input);
+            if (doubleField21_ == null || value != 0D) {
+              DoubleField21 = value;
+            }
+            break;
+          }
+          case 178: {
+            double? value = _single_doubleField22_codec.Read(input);
+            if (doubleField22_ == null || value != 0D) {
+              DoubleField22 = value;
+            }
+            break;
+          }
+          case 202: {
+            double? value = _single_doubleField25_codec.Read(input);
+            if (doubleField25_ == null || value != 0D) {
+              DoubleField25 = value;
+            }
+            break;
+          }
+          case 210: {
+            long? value = _single_int64Field26_codec.Read(input);
+            if (int64Field26_ == null || value != 0L) {
+              Int64Field26 = value;
+            }
+            break;
+          }
+          case 226: {
+            double? value = _single_doubleField28_codec.Read(input);
+            if (doubleField28_ == null || value != 0D) {
+              DoubleField28 = value;
+            }
+            break;
+          }
+          case 234: {
+            double? value = _single_doubleField29_codec.Read(input);
+            if (doubleField29_ == null || value != 0D) {
+              DoubleField29 = value;
+            }
+            break;
+          }
+          case 242: {
+            double? value = _single_doubleField30_codec.Read(input);
+            if (doubleField30_ == null || value != 0D) {
+              DoubleField30 = value;
+            }
+            break;
+          }
+          case 250: {
+            double? value = _single_doubleField31_codec.Read(input);
+            if (doubleField31_ == null || value != 0D) {
+              DoubleField31 = value;
+            }
+            break;
+          }
+          case 258: {
+            long? value = _single_int64Field32_codec.Read(input);
+            if (int64Field32_ == null || value != 0L) {
+              Int64Field32 = value;
+            }
+            break;
+          }
+          case 298: {
+            long? value = _single_int64Field37_codec.Read(input);
+            if (int64Field37_ == null || value != 0L) {
+              Int64Field37 = value;
+            }
+            break;
+          }
+          case 306: {
+            double? value = _single_doubleField38_codec.Read(input);
+            if (doubleField38_ == null || value != 0D) {
+              DoubleField38 = value;
+            }
+            break;
+          }
+          case 314: {
+            long? value = _single_interactions_codec.Read(input);
+            if (interactions_ == null || value != 0L) {
+              Interactions = value;
+            }
+            break;
+          }
+          case 322: {
+            double? value = _single_doubleField40_codec.Read(input);
+            if (doubleField40_ == null || value != 0D) {
+              DoubleField40 = value;
+            }
+            break;
+          }
+          case 330: {
+            long? value = _single_int64Field41_codec.Read(input);
+            if (int64Field41_ == null || value != 0L) {
+              Int64Field41 = value;
+            }
+            break;
+          }
+          case 338: {
+            double? value = _single_doubleField42_codec.Read(input);
+            if (doubleField42_ == null || value != 0D) {
+              DoubleField42 = value;
+            }
+            break;
+          }
+          case 346: {
+            long? value = _single_int64Field43_codec.Read(input);
+            if (int64Field43_ == null || value != 0L) {
+              Int64Field43 = value;
+            }
+            break;
+          }
+          case 354: {
+            long? value = _single_int64Field44_codec.Read(input);
+            if (int64Field44_ == null || value != 0L) {
+              Int64Field44 = value;
+            }
+            break;
+          }
+          case 362: {
+            double? value = _single_doubleField45_codec.Read(input);
+            if (doubleField45_ == null || value != 0D) {
+              DoubleField45 = value;
+            }
+            break;
+          }
+          case 370: {
+            double? value = _single_doubleField46_codec.Read(input);
+            if (doubleField46_ == null || value != 0D) {
+              DoubleField46 = value;
+            }
+            break;
+          }
+          case 378: {
+            double? value = _single_doubleField47_codec.Read(input);
+            if (doubleField47_ == null || value != 0D) {
+              DoubleField47 = value;
+            }
+            break;
+          }
+          case 386: {
+            double? value = _single_doubleField48_codec.Read(input);
+            if (doubleField48_ == null || value != 0D) {
+              DoubleField48 = value;
+            }
+            break;
+          }
+          case 394: {
+            double? value = _single_doubleField49_codec.Read(input);
+            if (doubleField49_ == null || value != 0D) {
+              DoubleField49 = value;
+            }
+            break;
+          }
+          case 402: {
+            double? value = _single_doubleField50_codec.Read(input);
+            if (doubleField50_ == null || value != 0D) {
+              DoubleField50 = value;
+            }
+            break;
+          }
+          case 410: {
+            double? value = _single_doubleField51_codec.Read(input);
+            if (doubleField51_ == null || value != 0D) {
+              DoubleField51 = value;
+            }
+            break;
+          }
+          case 418: {
+            double? value = _single_doubleField52_codec.Read(input);
+            if (doubleField52_ == null || value != 0D) {
+              DoubleField52 = value;
+            }
+            break;
+          }
+          case 426: {
+            double? value = _single_doubleField53_codec.Read(input);
+            if (doubleField53_ == null || value != 0D) {
+              DoubleField53 = value;
+            }
+            break;
+          }
+          case 434: {
+            double? value = _single_doubleField54_codec.Read(input);
+            if (doubleField54_ == null || value != 0D) {
+              DoubleField54 = value;
+            }
+            break;
+          }
+          case 442: {
+            double? value = _single_doubleField55_codec.Read(input);
+            if (doubleField55_ == null || value != 0D) {
+              DoubleField55 = value;
+            }
+            break;
+          }
+          case 450: {
+            double? value = _single_doubleField56_codec.Read(input);
+            if (doubleField56_ == null || value != 0D) {
+              DoubleField56 = value;
+            }
+            break;
+          }
+          case 458: {
+            double? value = _single_doubleField57_codec.Read(input);
+            if (doubleField57_ == null || value != 0D) {
+              DoubleField57 = value;
+            }
+            break;
+          }
+          case 466: {
+            double? value = _single_doubleField58_codec.Read(input);
+            if (doubleField58_ == null || value != 0D) {
+              DoubleField58 = value;
+            }
+            break;
+          }
+          case 474: {
+            long? value = _single_int64Field59_codec.Read(input);
+            if (int64Field59_ == null || value != 0L) {
+              Int64Field59 = value;
+            }
+            break;
+          }
+          case 482: {
+            long? value = _single_int64Field60_codec.Read(input);
+            if (int64Field60_ == null || value != 0L) {
+              Int64Field60 = value;
+            }
+            break;
+          }
+          case 498: {
+            double? value = _single_doubleField62_codec.Read(input);
+            if (doubleField62_ == null || value != 0D) {
+              DoubleField62 = value;
+            }
+            break;
+          }
+          case 522: {
+            double? value = _single_doubleField65_codec.Read(input);
+            if (doubleField65_ == null || value != 0D) {
+              DoubleField65 = value;
+            }
+            break;
+          }
+          case 530: {
+            double? value = _single_doubleField66_codec.Read(input);
+            if (doubleField66_ == null || value != 0D) {
+              DoubleField66 = value;
+            }
+            break;
+          }
+          case 538: {
+            double? value = _single_doubleField67_codec.Read(input);
+            if (doubleField67_ == null || value != 0D) {
+              DoubleField67 = value;
+            }
+            break;
+          }
+          case 546: {
+            double? value = _single_doubleField68_codec.Read(input);
+            if (doubleField68_ == null || value != 0D) {
+              DoubleField68 = value;
+            }
+            break;
+          }
+          case 554: {
+            double? value = _single_doubleField69_codec.Read(input);
+            if (doubleField69_ == null || value != 0D) {
+              DoubleField69 = value;
+            }
+            break;
+          }
+          case 562: {
+            double? value = _single_doubleField70_codec.Read(input);
+            if (doubleField70_ == null || value != 0D) {
+              DoubleField70 = value;
+            }
+            break;
+          }
+          case 570: {
+            double? value = _single_doubleField71_codec.Read(input);
+            if (doubleField71_ == null || value != 0D) {
+              DoubleField71 = value;
+            }
+            break;
+          }
+          case 578: {
+            double? value = _single_doubleField72_codec.Read(input);
+            if (doubleField72_ == null || value != 0D) {
+              DoubleField72 = value;
+            }
+            break;
+          }
+          case 586: {
+            string value = _single_stringField73_codec.Read(input);
+            if (stringField73_ == null || value != "") {
+              StringField73 = value;
+            }
+            break;
+          }
+          case 594: {
+            string value = _single_stringField74_codec.Read(input);
+            if (stringField74_ == null || value != "") {
+              StringField74 = value;
+            }
+            break;
+          }
+          case 602: {
+            double? value = _single_doubleField75_codec.Read(input);
+            if (doubleField75_ == null || value != 0D) {
+              DoubleField75 = value;
+            }
+            break;
+          }
+          case 618: {
+            double? value = _single_doubleField77_codec.Read(input);
+            if (doubleField77_ == null || value != 0D) {
+              DoubleField77 = value;
+            }
+            break;
+          }
+          case 626: {
+            double? value = _single_doubleField78_codec.Read(input);
+            if (doubleField78_ == null || value != 0D) {
+              DoubleField78 = value;
+            }
+            break;
+          }
+          case 634: {
+            double? value = _single_doubleField79_codec.Read(input);
+            if (doubleField79_ == null || value != 0D) {
+              DoubleField79 = value;
+            }
+            break;
+          }
+          case 640: {
+            EnumField80 = input.ReadInt32();
+            break;
+          }
+          case 648: {
+            EnumField81 = input.ReadInt32();
+            break;
+          }
+          case 658: {
+            long? value = _single_int64Field82_codec.Read(input);
+            if (int64Field82_ == null || value != 0L) {
+              Int64Field82 = value;
+            }
+            break;
+          }
+          case 664: {
+            EnumField83 = input.ReadInt32();
+            break;
+          }
+          case 674: {
+            double? value = _single_doubleField84_codec.Read(input);
+            if (doubleField84_ == null || value != 0D) {
+              DoubleField84 = value;
+            }
+            break;
+          }
+          case 682: {
+            long? value = _single_int64Field85_codec.Read(input);
+            if (int64Field85_ == null || value != 0L) {
+              Int64Field85 = value;
+            }
+            break;
+          }
+          case 690: {
+            long? value = _single_int64Field86_codec.Read(input);
+            if (int64Field86_ == null || value != 0L) {
+              Int64Field86 = value;
+            }
+            break;
+          }
+          case 698: {
+            long? value = _single_int64Field87_codec.Read(input);
+            if (int64Field87_ == null || value != 0L) {
+              Int64Field87 = value;
+            }
+            break;
+          }
+          case 706: {
+            double? value = _single_doubleField88_codec.Read(input);
+            if (doubleField88_ == null || value != 0D) {
+              DoubleField88 = value;
+            }
+            break;
+          }
+          case 714: {
+            double? value = _single_doubleField89_codec.Read(input);
+            if (doubleField89_ == null || value != 0D) {
+              DoubleField89 = value;
+            }
+            break;
+          }
+          case 722: {
+            double? value = _single_doubleField90_codec.Read(input);
+            if (doubleField90_ == null || value != 0D) {
+              DoubleField90 = value;
+            }
+            break;
+          }
+          case 730: {
+            double? value = _single_doubleField91_codec.Read(input);
+            if (doubleField91_ == null || value != 0D) {
+              DoubleField91 = value;
+            }
+            break;
+          }
+          case 738: {
+            double? value = _single_doubleField92_codec.Read(input);
+            if (doubleField92_ == null || value != 0D) {
+              DoubleField92 = value;
+            }
+            break;
+          }
+          case 746: {
+            double? value = _single_doubleField93_codec.Read(input);
+            if (doubleField93_ == null || value != 0D) {
+              DoubleField93 = value;
+            }
+            break;
+          }
+          case 754: {
+            double? value = _single_doubleField94_codec.Read(input);
+            if (doubleField94_ == null || value != 0D) {
+              DoubleField94 = value;
+            }
+            break;
+          }
+          case 762: {
+            double? value = _single_doubleField95_codec.Read(input);
+            if (doubleField95_ == null || value != 0D) {
+              DoubleField95 = value;
+            }
+            break;
+          }
+          case 770: {
+            double? value = _single_doubleField96_codec.Read(input);
+            if (doubleField96_ == null || value != 0D) {
+              DoubleField96 = value;
+            }
+            break;
+          }
+          case 778: {
+            double? value = _single_doubleField97_codec.Read(input);
+            if (doubleField97_ == null || value != 0D) {
+              DoubleField97 = value;
+            }
+            break;
+          }
+          case 786: {
+            double? value = _single_doubleField98_codec.Read(input);
+            if (doubleField98_ == null || value != 0D) {
+              DoubleField98 = value;
+            }
+            break;
+          }
+          case 794: {
+            double? value = _single_doubleField99_codec.Read(input);
+            if (doubleField99_ == null || value != 0D) {
+              DoubleField99 = value;
+            }
+            break;
+          }
+          case 802:
+          case 800: {
+            repeatedIntField100_.AddEntriesFrom(input, _repeated_repeatedIntField100_codec);
+            break;
+          }
+          case 810: {
+            double? value = _single_doubleField101_codec.Read(input);
+            if (doubleField101_ == null || value != 0D) {
+              DoubleField101 = value;
+            }
+            break;
+          }
+          case 818: {
+            double? value = _single_doubleField102_codec.Read(input);
+            if (doubleField102_ == null || value != 0D) {
+              DoubleField102 = value;
+            }
+            break;
+          }
+          case 826: {
+            double? value = _single_doubleField103_codec.Read(input);
+            if (doubleField103_ == null || value != 0D) {
+              DoubleField103 = value;
+            }
+            break;
+          }
+          case 834: {
+            double? value = _single_doubleField104_codec.Read(input);
+            if (doubleField104_ == null || value != 0D) {
+              DoubleField104 = value;
+            }
+            break;
+          }
+          case 842: {
+            double? value = _single_doubleField105_codec.Read(input);
+            if (doubleField105_ == null || value != 0D) {
+              DoubleField105 = value;
+            }
+            break;
+          }
+          case 850: {
+            double? value = _single_doubleField106_codec.Read(input);
+            if (doubleField106_ == null || value != 0D) {
+              DoubleField106 = value;
+            }
+            break;
+          }
+          case 858: {
+            long? value = _single_int64Field107_codec.Read(input);
+            if (int64Field107_ == null || value != 0L) {
+              Int64Field107 = value;
+            }
+            break;
+          }
+          case 866: {
+            double? value = _single_doubleField108_codec.Read(input);
+            if (doubleField108_ == null || value != 0D) {
+              DoubleField108 = value;
+            }
+            break;
+          }
+          case 874: {
+            double? value = _single_doubleField109_codec.Read(input);
+            if (doubleField109_ == null || value != 0D) {
+              DoubleField109 = value;
+            }
+            break;
+          }
+          case 882: {
+            long? value = _single_int64Field110_codec.Read(input);
+            if (int64Field110_ == null || value != 0L) {
+              Int64Field110 = value;
+            }
+            break;
+          }
+          case 890: {
+            double? value = _single_doubleField111_codec.Read(input);
+            if (doubleField111_ == null || value != 0D) {
+              DoubleField111 = value;
+            }
+            break;
+          }
+          case 898: {
+            long? value = _single_int64Field112_codec.Read(input);
+            if (int64Field112_ == null || value != 0L) {
+              Int64Field112 = value;
+            }
+            break;
+          }
+          case 906: {
+            double? value = _single_doubleField113_codec.Read(input);
+            if (doubleField113_ == null || value != 0D) {
+              DoubleField113 = value;
+            }
+            break;
+          }
+          case 914: {
+            long? value = _single_int64Field114_codec.Read(input);
+            if (int64Field114_ == null || value != 0L) {
+              Int64Field114 = value;
+            }
+            break;
+          }
+          case 922: {
+            long? value = _single_int64Field115_codec.Read(input);
+            if (int64Field115_ == null || value != 0L) {
+              Int64Field115 = value;
+            }
+            break;
+          }
+          case 930: {
+            double? value = _single_doubleField116_codec.Read(input);
+            if (doubleField116_ == null || value != 0D) {
+              DoubleField116 = value;
+            }
+            break;
+          }
+          case 938: {
+            long? value = _single_int64Field117_codec.Read(input);
+            if (int64Field117_ == null || value != 0L) {
+              Int64Field117 = value;
+            }
+            break;
+          }
+          case 946: {
+            double? value = _single_doubleField118_codec.Read(input);
+            if (doubleField118_ == null || value != 0D) {
+              DoubleField118 = value;
+            }
+            break;
+          }
+          case 954: {
+            double? value = _single_doubleField119_codec.Read(input);
+            if (doubleField119_ == null || value != 0D) {
+              DoubleField119 = value;
+            }
+            break;
+          }
+          case 962: {
+            double? value = _single_doubleField120_codec.Read(input);
+            if (doubleField120_ == null || value != 0D) {
+              DoubleField120 = value;
+            }
+            break;
+          }
+          case 970: {
+            double? value = _single_doubleField121_codec.Read(input);
+            if (doubleField121_ == null || value != 0D) {
+              DoubleField121 = value;
+            }
+            break;
+          }
+          case 978: {
+            double? value = _single_doubleField122_codec.Read(input);
+            if (doubleField122_ == null || value != 0D) {
+              DoubleField122 = value;
+            }
+            break;
+          }
+          case 986: {
+            double? value = _single_doubleField123_codec.Read(input);
+            if (doubleField123_ == null || value != 0D) {
+              DoubleField123 = value;
+            }
+            break;
+          }
+          case 994: {
+            double? value = _single_doubleField124_codec.Read(input);
+            if (doubleField124_ == null || value != 0D) {
+              DoubleField124 = value;
+            }
+            break;
+          }
+          case 1002: {
+            long? value = _single_int64Field125_codec.Read(input);
+            if (int64Field125_ == null || value != 0L) {
+              Int64Field125 = value;
+            }
+            break;
+          }
+          case 1010: {
+            long? value = _single_int64Field126_codec.Read(input);
+            if (int64Field126_ == null || value != 0L) {
+              Int64Field126 = value;
+            }
+            break;
+          }
+          case 1018: {
+            long? value = _single_int64Field127_codec.Read(input);
+            if (int64Field127_ == null || value != 0L) {
+              Int64Field127 = value;
+            }
+            break;
+          }
+          case 1026: {
+            double? value = _single_doubleField128_codec.Read(input);
+            if (doubleField128_ == null || value != 0D) {
+              DoubleField128 = value;
+            }
+            break;
+          }
+          case 1034: {
+            double? value = _single_doubleField129_codec.Read(input);
+            if (doubleField129_ == null || value != 0D) {
+              DoubleField129 = value;
+            }
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// same as ManyWrapperFieldsMessages, but with primitive fields
+  /// for comparison.
+  /// </summary>
+  public sealed partial class ManyPrimitiveFieldsMessage : pb::IMessage<ManyPrimitiveFieldsMessage> {
+    private static readonly pb::MessageParser<ManyPrimitiveFieldsMessage> _parser = new pb::MessageParser<ManyPrimitiveFieldsMessage>(() => new ManyPrimitiveFieldsMessage());
+    private pb::UnknownFieldSet _unknownFields;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<ManyPrimitiveFieldsMessage> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[1]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyPrimitiveFieldsMessage() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyPrimitiveFieldsMessage(ManyPrimitiveFieldsMessage other) : this() {
+      doubleField95_ = other.doubleField95_;
+      doubleField1_ = other.doubleField1_;
+      doubleField79_ = other.doubleField79_;
+      int64Field2_ = other.int64Field2_;
+      doubleField96_ = other.doubleField96_;
+      int64Field3_ = other.int64Field3_;
+      int64Field4_ = other.int64Field4_;
+      doubleField97_ = other.doubleField97_;
+      doubleField65_ = other.doubleField65_;
+      doubleField66_ = other.doubleField66_;
+      doubleField7_ = other.doubleField7_;
+      doubleField62_ = other.doubleField62_;
+      doubleField118_ = other.doubleField118_;
+      doubleField119_ = other.doubleField119_;
+      doubleField67_ = other.doubleField67_;
+      doubleField120_ = other.doubleField120_;
+      doubleField121_ = other.doubleField121_;
+      doubleField122_ = other.doubleField122_;
+      doubleField123_ = other.doubleField123_;
+      doubleField124_ = other.doubleField124_;
+      doubleField8_ = other.doubleField8_;
+      doubleField9_ = other.doubleField9_;
+      doubleField98_ = other.doubleField98_;
+      doubleField10_ = other.doubleField10_;
+      doubleField11_ = other.doubleField11_;
+      doubleField99_ = other.doubleField99_;
+      doubleField84_ = other.doubleField84_;
+      doubleField14_ = other.doubleField14_;
+      doubleField77_ = other.doubleField77_;
+      doubleField15_ = other.doubleField15_;
+      int64Field19_ = other.int64Field19_;
+      int64Field115_ = other.int64Field115_;
+      doubleField116_ = other.doubleField116_;
+      int64Field117_ = other.int64Field117_;
+      doubleField20_ = other.doubleField20_;
+      doubleField21_ = other.doubleField21_;
+      stringField73_ = other.stringField73_;
+      stringField74_ = other.stringField74_;
+      doubleField22_ = other.doubleField22_;
+      doubleField69_ = other.doubleField69_;
+      doubleField70_ = other.doubleField70_;
+      doubleField71_ = other.doubleField71_;
+      doubleField72_ = other.doubleField72_;
+      doubleField25_ = other.doubleField25_;
+      int64Field26_ = other.int64Field26_;
+      doubleField68_ = other.doubleField68_;
+      doubleField28_ = other.doubleField28_;
+      doubleField106_ = other.doubleField106_;
+      doubleField29_ = other.doubleField29_;
+      doubleField30_ = other.doubleField30_;
+      doubleField101_ = other.doubleField101_;
+      doubleField102_ = other.doubleField102_;
+      doubleField103_ = other.doubleField103_;
+      doubleField104_ = other.doubleField104_;
+      doubleField105_ = other.doubleField105_;
+      doubleField31_ = other.doubleField31_;
+      int64Field32_ = other.int64Field32_;
+      doubleField75_ = other.doubleField75_;
+      doubleField129_ = other.doubleField129_;
+      enumField80_ = other.enumField80_;
+      enumField81_ = other.enumField81_;
+      int64Field82_ = other.int64Field82_;
+      enumField83_ = other.enumField83_;
+      int64Field85_ = other.int64Field85_;
+      int64Field86_ = other.int64Field86_;
+      int64Field87_ = other.int64Field87_;
+      int64Field125_ = other.int64Field125_;
+      int64Field37_ = other.int64Field37_;
+      doubleField38_ = other.doubleField38_;
+      interactions_ = other.interactions_;
+      repeatedIntField100_ = other.repeatedIntField100_.Clone();
+      doubleField40_ = other.doubleField40_;
+      int64Field41_ = other.int64Field41_;
+      int64Field126_ = other.int64Field126_;
+      int64Field127_ = other.int64Field127_;
+      doubleField128_ = other.doubleField128_;
+      doubleField109_ = other.doubleField109_;
+      int64Field110_ = other.int64Field110_;
+      doubleField111_ = other.doubleField111_;
+      int64Field112_ = other.int64Field112_;
+      doubleField113_ = other.doubleField113_;
+      int64Field114_ = other.int64Field114_;
+      doubleField42_ = other.doubleField42_;
+      int64Field43_ = other.int64Field43_;
+      int64Field44_ = other.int64Field44_;
+      doubleField45_ = other.doubleField45_;
+      doubleField46_ = other.doubleField46_;
+      doubleField78_ = other.doubleField78_;
+      doubleField88_ = other.doubleField88_;
+      doubleField47_ = other.doubleField47_;
+      doubleField89_ = other.doubleField89_;
+      doubleField48_ = other.doubleField48_;
+      doubleField49_ = other.doubleField49_;
+      doubleField50_ = other.doubleField50_;
+      doubleField90_ = other.doubleField90_;
+      doubleField51_ = other.doubleField51_;
+      doubleField91_ = other.doubleField91_;
+      doubleField92_ = other.doubleField92_;
+      int64Field107_ = other.int64Field107_;
+      doubleField93_ = other.doubleField93_;
+      doubleField108_ = other.doubleField108_;
+      doubleField52_ = other.doubleField52_;
+      doubleField53_ = other.doubleField53_;
+      doubleField94_ = other.doubleField94_;
+      doubleField54_ = other.doubleField54_;
+      doubleField55_ = other.doubleField55_;
+      doubleField56_ = other.doubleField56_;
+      doubleField57_ = other.doubleField57_;
+      doubleField58_ = other.doubleField58_;
+      int64Field59_ = other.int64Field59_;
+      int64Field60_ = other.int64Field60_;
+      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public ManyPrimitiveFieldsMessage Clone() {
+      return new ManyPrimitiveFieldsMessage(this);
+    }
+
+    /// <summary>Field number for the "double_field_95" field.</summary>
+    public const int DoubleField95FieldNumber = 95;
+    private double doubleField95_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField95 {
+      get { return doubleField95_; }
+      set {
+        doubleField95_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_1" field.</summary>
+    public const int DoubleField1FieldNumber = 1;
+    private double doubleField1_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField1 {
+      get { return doubleField1_; }
+      set {
+        doubleField1_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_79" field.</summary>
+    public const int DoubleField79FieldNumber = 79;
+    private double doubleField79_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField79 {
+      get { return doubleField79_; }
+      set {
+        doubleField79_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_2" field.</summary>
+    public const int Int64Field2FieldNumber = 2;
+    private long int64Field2_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field2 {
+      get { return int64Field2_; }
+      set {
+        int64Field2_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_96" field.</summary>
+    public const int DoubleField96FieldNumber = 96;
+    private double doubleField96_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField96 {
+      get { return doubleField96_; }
+      set {
+        doubleField96_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_3" field.</summary>
+    public const int Int64Field3FieldNumber = 3;
+    private long int64Field3_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field3 {
+      get { return int64Field3_; }
+      set {
+        int64Field3_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_4" field.</summary>
+    public const int Int64Field4FieldNumber = 4;
+    private long int64Field4_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field4 {
+      get { return int64Field4_; }
+      set {
+        int64Field4_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_97" field.</summary>
+    public const int DoubleField97FieldNumber = 97;
+    private double doubleField97_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField97 {
+      get { return doubleField97_; }
+      set {
+        doubleField97_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_65" field.</summary>
+    public const int DoubleField65FieldNumber = 65;
+    private double doubleField65_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField65 {
+      get { return doubleField65_; }
+      set {
+        doubleField65_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_66" field.</summary>
+    public const int DoubleField66FieldNumber = 66;
+    private double doubleField66_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField66 {
+      get { return doubleField66_; }
+      set {
+        doubleField66_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_7" field.</summary>
+    public const int DoubleField7FieldNumber = 7;
+    private double doubleField7_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField7 {
+      get { return doubleField7_; }
+      set {
+        doubleField7_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_62" field.</summary>
+    public const int DoubleField62FieldNumber = 62;
+    private double doubleField62_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField62 {
+      get { return doubleField62_; }
+      set {
+        doubleField62_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_118" field.</summary>
+    public const int DoubleField118FieldNumber = 118;
+    private double doubleField118_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField118 {
+      get { return doubleField118_; }
+      set {
+        doubleField118_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_119" field.</summary>
+    public const int DoubleField119FieldNumber = 119;
+    private double doubleField119_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField119 {
+      get { return doubleField119_; }
+      set {
+        doubleField119_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_67" field.</summary>
+    public const int DoubleField67FieldNumber = 67;
+    private double doubleField67_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField67 {
+      get { return doubleField67_; }
+      set {
+        doubleField67_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_120" field.</summary>
+    public const int DoubleField120FieldNumber = 120;
+    private double doubleField120_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField120 {
+      get { return doubleField120_; }
+      set {
+        doubleField120_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_121" field.</summary>
+    public const int DoubleField121FieldNumber = 121;
+    private double doubleField121_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField121 {
+      get { return doubleField121_; }
+      set {
+        doubleField121_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_122" field.</summary>
+    public const int DoubleField122FieldNumber = 122;
+    private double doubleField122_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField122 {
+      get { return doubleField122_; }
+      set {
+        doubleField122_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_123" field.</summary>
+    public const int DoubleField123FieldNumber = 123;
+    private double doubleField123_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField123 {
+      get { return doubleField123_; }
+      set {
+        doubleField123_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_124" field.</summary>
+    public const int DoubleField124FieldNumber = 124;
+    private double doubleField124_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField124 {
+      get { return doubleField124_; }
+      set {
+        doubleField124_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_8" field.</summary>
+    public const int DoubleField8FieldNumber = 8;
+    private double doubleField8_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField8 {
+      get { return doubleField8_; }
+      set {
+        doubleField8_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_9" field.</summary>
+    public const int DoubleField9FieldNumber = 9;
+    private double doubleField9_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField9 {
+      get { return doubleField9_; }
+      set {
+        doubleField9_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_98" field.</summary>
+    public const int DoubleField98FieldNumber = 98;
+    private double doubleField98_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField98 {
+      get { return doubleField98_; }
+      set {
+        doubleField98_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_10" field.</summary>
+    public const int DoubleField10FieldNumber = 10;
+    private double doubleField10_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField10 {
+      get { return doubleField10_; }
+      set {
+        doubleField10_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_11" field.</summary>
+    public const int DoubleField11FieldNumber = 11;
+    private double doubleField11_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField11 {
+      get { return doubleField11_; }
+      set {
+        doubleField11_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_99" field.</summary>
+    public const int DoubleField99FieldNumber = 99;
+    private double doubleField99_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField99 {
+      get { return doubleField99_; }
+      set {
+        doubleField99_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_84" field.</summary>
+    public const int DoubleField84FieldNumber = 84;
+    private double doubleField84_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField84 {
+      get { return doubleField84_; }
+      set {
+        doubleField84_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_14" field.</summary>
+    public const int DoubleField14FieldNumber = 14;
+    private double doubleField14_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField14 {
+      get { return doubleField14_; }
+      set {
+        doubleField14_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_77" field.</summary>
+    public const int DoubleField77FieldNumber = 77;
+    private double doubleField77_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField77 {
+      get { return doubleField77_; }
+      set {
+        doubleField77_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_15" field.</summary>
+    public const int DoubleField15FieldNumber = 15;
+    private double doubleField15_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField15 {
+      get { return doubleField15_; }
+      set {
+        doubleField15_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_19" field.</summary>
+    public const int Int64Field19FieldNumber = 19;
+    private long int64Field19_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field19 {
+      get { return int64Field19_; }
+      set {
+        int64Field19_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_115" field.</summary>
+    public const int Int64Field115FieldNumber = 115;
+    private long int64Field115_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field115 {
+      get { return int64Field115_; }
+      set {
+        int64Field115_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_116" field.</summary>
+    public const int DoubleField116FieldNumber = 116;
+    private double doubleField116_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField116 {
+      get { return doubleField116_; }
+      set {
+        doubleField116_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_117" field.</summary>
+    public const int Int64Field117FieldNumber = 117;
+    private long int64Field117_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field117 {
+      get { return int64Field117_; }
+      set {
+        int64Field117_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_20" field.</summary>
+    public const int DoubleField20FieldNumber = 20;
+    private double doubleField20_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField20 {
+      get { return doubleField20_; }
+      set {
+        doubleField20_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_21" field.</summary>
+    public const int DoubleField21FieldNumber = 21;
+    private double doubleField21_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField21 {
+      get { return doubleField21_; }
+      set {
+        doubleField21_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "string_field_73" field.</summary>
+    public const int StringField73FieldNumber = 73;
+    private string stringField73_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string StringField73 {
+      get { return stringField73_; }
+      set {
+        stringField73_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "string_field_74" field.</summary>
+    public const int StringField74FieldNumber = 74;
+    private string stringField74_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string StringField74 {
+      get { return stringField74_; }
+      set {
+        stringField74_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "double_field_22" field.</summary>
+    public const int DoubleField22FieldNumber = 22;
+    private double doubleField22_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField22 {
+      get { return doubleField22_; }
+      set {
+        doubleField22_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_69" field.</summary>
+    public const int DoubleField69FieldNumber = 69;
+    private double doubleField69_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField69 {
+      get { return doubleField69_; }
+      set {
+        doubleField69_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_70" field.</summary>
+    public const int DoubleField70FieldNumber = 70;
+    private double doubleField70_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField70 {
+      get { return doubleField70_; }
+      set {
+        doubleField70_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_71" field.</summary>
+    public const int DoubleField71FieldNumber = 71;
+    private double doubleField71_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField71 {
+      get { return doubleField71_; }
+      set {
+        doubleField71_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_72" field.</summary>
+    public const int DoubleField72FieldNumber = 72;
+    private double doubleField72_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField72 {
+      get { return doubleField72_; }
+      set {
+        doubleField72_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_25" field.</summary>
+    public const int DoubleField25FieldNumber = 25;
+    private double doubleField25_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField25 {
+      get { return doubleField25_; }
+      set {
+        doubleField25_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_26" field.</summary>
+    public const int Int64Field26FieldNumber = 26;
+    private long int64Field26_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field26 {
+      get { return int64Field26_; }
+      set {
+        int64Field26_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_68" field.</summary>
+    public const int DoubleField68FieldNumber = 68;
+    private double doubleField68_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField68 {
+      get { return doubleField68_; }
+      set {
+        doubleField68_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_28" field.</summary>
+    public const int DoubleField28FieldNumber = 28;
+    private double doubleField28_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField28 {
+      get { return doubleField28_; }
+      set {
+        doubleField28_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_106" field.</summary>
+    public const int DoubleField106FieldNumber = 106;
+    private double doubleField106_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField106 {
+      get { return doubleField106_; }
+      set {
+        doubleField106_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_29" field.</summary>
+    public const int DoubleField29FieldNumber = 29;
+    private double doubleField29_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField29 {
+      get { return doubleField29_; }
+      set {
+        doubleField29_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_30" field.</summary>
+    public const int DoubleField30FieldNumber = 30;
+    private double doubleField30_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField30 {
+      get { return doubleField30_; }
+      set {
+        doubleField30_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_101" field.</summary>
+    public const int DoubleField101FieldNumber = 101;
+    private double doubleField101_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField101 {
+      get { return doubleField101_; }
+      set {
+        doubleField101_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_102" field.</summary>
+    public const int DoubleField102FieldNumber = 102;
+    private double doubleField102_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField102 {
+      get { return doubleField102_; }
+      set {
+        doubleField102_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_103" field.</summary>
+    public const int DoubleField103FieldNumber = 103;
+    private double doubleField103_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField103 {
+      get { return doubleField103_; }
+      set {
+        doubleField103_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_104" field.</summary>
+    public const int DoubleField104FieldNumber = 104;
+    private double doubleField104_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField104 {
+      get { return doubleField104_; }
+      set {
+        doubleField104_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_105" field.</summary>
+    public const int DoubleField105FieldNumber = 105;
+    private double doubleField105_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField105 {
+      get { return doubleField105_; }
+      set {
+        doubleField105_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_31" field.</summary>
+    public const int DoubleField31FieldNumber = 31;
+    private double doubleField31_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField31 {
+      get { return doubleField31_; }
+      set {
+        doubleField31_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_32" field.</summary>
+    public const int Int64Field32FieldNumber = 32;
+    private long int64Field32_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field32 {
+      get { return int64Field32_; }
+      set {
+        int64Field32_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_75" field.</summary>
+    public const int DoubleField75FieldNumber = 75;
+    private double doubleField75_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField75 {
+      get { return doubleField75_; }
+      set {
+        doubleField75_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_129" field.</summary>
+    public const int DoubleField129FieldNumber = 129;
+    private double doubleField129_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField129 {
+      get { return doubleField129_; }
+      set {
+        doubleField129_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "enum_field_80" field.</summary>
+    public const int EnumField80FieldNumber = 80;
+    private int enumField80_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField80 {
+      get { return enumField80_; }
+      set {
+        enumField80_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "enum_field_81" field.</summary>
+    public const int EnumField81FieldNumber = 81;
+    private int enumField81_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField81 {
+      get { return enumField81_; }
+      set {
+        enumField81_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_82" field.</summary>
+    public const int Int64Field82FieldNumber = 82;
+    private long int64Field82_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field82 {
+      get { return int64Field82_; }
+      set {
+        int64Field82_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "enum_field_83" field.</summary>
+    public const int EnumField83FieldNumber = 83;
+    private int enumField83_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int EnumField83 {
+      get { return enumField83_; }
+      set {
+        enumField83_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_85" field.</summary>
+    public const int Int64Field85FieldNumber = 85;
+    private long int64Field85_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field85 {
+      get { return int64Field85_; }
+      set {
+        int64Field85_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_86" field.</summary>
+    public const int Int64Field86FieldNumber = 86;
+    private long int64Field86_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field86 {
+      get { return int64Field86_; }
+      set {
+        int64Field86_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_87" field.</summary>
+    public const int Int64Field87FieldNumber = 87;
+    private long int64Field87_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field87 {
+      get { return int64Field87_; }
+      set {
+        int64Field87_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_125" field.</summary>
+    public const int Int64Field125FieldNumber = 125;
+    private long int64Field125_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field125 {
+      get { return int64Field125_; }
+      set {
+        int64Field125_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_37" field.</summary>
+    public const int Int64Field37FieldNumber = 37;
+    private long int64Field37_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field37 {
+      get { return int64Field37_; }
+      set {
+        int64Field37_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_38" field.</summary>
+    public const int DoubleField38FieldNumber = 38;
+    private double doubleField38_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField38 {
+      get { return doubleField38_; }
+      set {
+        doubleField38_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "interactions" field.</summary>
+    public const int InteractionsFieldNumber = 39;
+    private long interactions_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Interactions {
+      get { return interactions_; }
+      set {
+        interactions_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "repeated_int_field_100" field.</summary>
+    public const int RepeatedIntField100FieldNumber = 100;
+    private static readonly pb::FieldCodec<int> _repeated_repeatedIntField100_codec
+        = pb::FieldCodec.ForInt32(802);
+    private readonly pbc::RepeatedField<int> repeatedIntField100_ = new pbc::RepeatedField<int>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<int> RepeatedIntField100 {
+      get { return repeatedIntField100_; }
+    }
+
+    /// <summary>Field number for the "double_field_40" field.</summary>
+    public const int DoubleField40FieldNumber = 40;
+    private double doubleField40_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField40 {
+      get { return doubleField40_; }
+      set {
+        doubleField40_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_41" field.</summary>
+    public const int Int64Field41FieldNumber = 41;
+    private long int64Field41_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field41 {
+      get { return int64Field41_; }
+      set {
+        int64Field41_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_126" field.</summary>
+    public const int Int64Field126FieldNumber = 126;
+    private long int64Field126_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field126 {
+      get { return int64Field126_; }
+      set {
+        int64Field126_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_127" field.</summary>
+    public const int Int64Field127FieldNumber = 127;
+    private long int64Field127_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field127 {
+      get { return int64Field127_; }
+      set {
+        int64Field127_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_128" field.</summary>
+    public const int DoubleField128FieldNumber = 128;
+    private double doubleField128_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField128 {
+      get { return doubleField128_; }
+      set {
+        doubleField128_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_109" field.</summary>
+    public const int DoubleField109FieldNumber = 109;
+    private double doubleField109_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField109 {
+      get { return doubleField109_; }
+      set {
+        doubleField109_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_110" field.</summary>
+    public const int Int64Field110FieldNumber = 110;
+    private long int64Field110_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field110 {
+      get { return int64Field110_; }
+      set {
+        int64Field110_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_111" field.</summary>
+    public const int DoubleField111FieldNumber = 111;
+    private double doubleField111_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField111 {
+      get { return doubleField111_; }
+      set {
+        doubleField111_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_112" field.</summary>
+    public const int Int64Field112FieldNumber = 112;
+    private long int64Field112_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field112 {
+      get { return int64Field112_; }
+      set {
+        int64Field112_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_113" field.</summary>
+    public const int DoubleField113FieldNumber = 113;
+    private double doubleField113_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField113 {
+      get { return doubleField113_; }
+      set {
+        doubleField113_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_114" field.</summary>
+    public const int Int64Field114FieldNumber = 114;
+    private long int64Field114_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field114 {
+      get { return int64Field114_; }
+      set {
+        int64Field114_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_42" field.</summary>
+    public const int DoubleField42FieldNumber = 42;
+    private double doubleField42_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField42 {
+      get { return doubleField42_; }
+      set {
+        doubleField42_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_43" field.</summary>
+    public const int Int64Field43FieldNumber = 43;
+    private long int64Field43_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field43 {
+      get { return int64Field43_; }
+      set {
+        int64Field43_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_44" field.</summary>
+    public const int Int64Field44FieldNumber = 44;
+    private long int64Field44_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field44 {
+      get { return int64Field44_; }
+      set {
+        int64Field44_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_45" field.</summary>
+    public const int DoubleField45FieldNumber = 45;
+    private double doubleField45_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField45 {
+      get { return doubleField45_; }
+      set {
+        doubleField45_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_46" field.</summary>
+    public const int DoubleField46FieldNumber = 46;
+    private double doubleField46_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField46 {
+      get { return doubleField46_; }
+      set {
+        doubleField46_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_78" field.</summary>
+    public const int DoubleField78FieldNumber = 78;
+    private double doubleField78_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField78 {
+      get { return doubleField78_; }
+      set {
+        doubleField78_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_88" field.</summary>
+    public const int DoubleField88FieldNumber = 88;
+    private double doubleField88_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField88 {
+      get { return doubleField88_; }
+      set {
+        doubleField88_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_47" field.</summary>
+    public const int DoubleField47FieldNumber = 47;
+    private double doubleField47_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField47 {
+      get { return doubleField47_; }
+      set {
+        doubleField47_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_89" field.</summary>
+    public const int DoubleField89FieldNumber = 89;
+    private double doubleField89_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField89 {
+      get { return doubleField89_; }
+      set {
+        doubleField89_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_48" field.</summary>
+    public const int DoubleField48FieldNumber = 48;
+    private double doubleField48_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField48 {
+      get { return doubleField48_; }
+      set {
+        doubleField48_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_49" field.</summary>
+    public const int DoubleField49FieldNumber = 49;
+    private double doubleField49_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField49 {
+      get { return doubleField49_; }
+      set {
+        doubleField49_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_50" field.</summary>
+    public const int DoubleField50FieldNumber = 50;
+    private double doubleField50_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField50 {
+      get { return doubleField50_; }
+      set {
+        doubleField50_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_90" field.</summary>
+    public const int DoubleField90FieldNumber = 90;
+    private double doubleField90_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField90 {
+      get { return doubleField90_; }
+      set {
+        doubleField90_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_51" field.</summary>
+    public const int DoubleField51FieldNumber = 51;
+    private double doubleField51_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField51 {
+      get { return doubleField51_; }
+      set {
+        doubleField51_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_91" field.</summary>
+    public const int DoubleField91FieldNumber = 91;
+    private double doubleField91_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField91 {
+      get { return doubleField91_; }
+      set {
+        doubleField91_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_92" field.</summary>
+    public const int DoubleField92FieldNumber = 92;
+    private double doubleField92_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField92 {
+      get { return doubleField92_; }
+      set {
+        doubleField92_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_107" field.</summary>
+    public const int Int64Field107FieldNumber = 107;
+    private long int64Field107_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field107 {
+      get { return int64Field107_; }
+      set {
+        int64Field107_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_93" field.</summary>
+    public const int DoubleField93FieldNumber = 93;
+    private double doubleField93_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField93 {
+      get { return doubleField93_; }
+      set {
+        doubleField93_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_108" field.</summary>
+    public const int DoubleField108FieldNumber = 108;
+    private double doubleField108_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField108 {
+      get { return doubleField108_; }
+      set {
+        doubleField108_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_52" field.</summary>
+    public const int DoubleField52FieldNumber = 52;
+    private double doubleField52_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField52 {
+      get { return doubleField52_; }
+      set {
+        doubleField52_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_53" field.</summary>
+    public const int DoubleField53FieldNumber = 53;
+    private double doubleField53_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField53 {
+      get { return doubleField53_; }
+      set {
+        doubleField53_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_94" field.</summary>
+    public const int DoubleField94FieldNumber = 94;
+    private double doubleField94_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField94 {
+      get { return doubleField94_; }
+      set {
+        doubleField94_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_54" field.</summary>
+    public const int DoubleField54FieldNumber = 54;
+    private double doubleField54_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField54 {
+      get { return doubleField54_; }
+      set {
+        doubleField54_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_55" field.</summary>
+    public const int DoubleField55FieldNumber = 55;
+    private double doubleField55_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField55 {
+      get { return doubleField55_; }
+      set {
+        doubleField55_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_56" field.</summary>
+    public const int DoubleField56FieldNumber = 56;
+    private double doubleField56_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField56 {
+      get { return doubleField56_; }
+      set {
+        doubleField56_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_57" field.</summary>
+    public const int DoubleField57FieldNumber = 57;
+    private double doubleField57_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField57 {
+      get { return doubleField57_; }
+      set {
+        doubleField57_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "double_field_58" field.</summary>
+    public const int DoubleField58FieldNumber = 58;
+    private double doubleField58_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public double DoubleField58 {
+      get { return doubleField58_; }
+      set {
+        doubleField58_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_59" field.</summary>
+    public const int Int64Field59FieldNumber = 59;
+    private long int64Field59_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field59 {
+      get { return int64Field59_; }
+      set {
+        int64Field59_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "int64_field_60" field.</summary>
+    public const int Int64Field60FieldNumber = 60;
+    private long int64Field60_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public long Int64Field60 {
+      get { return int64Field60_; }
+      set {
+        int64Field60_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as ManyPrimitiveFieldsMessage);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(ManyPrimitiveFieldsMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField95, other.DoubleField95)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField1, other.DoubleField1)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField79, other.DoubleField79)) return false;
+      if (Int64Field2 != other.Int64Field2) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField96, other.DoubleField96)) return false;
+      if (Int64Field3 != other.Int64Field3) return false;
+      if (Int64Field4 != other.Int64Field4) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField97, other.DoubleField97)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField65, other.DoubleField65)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField66, other.DoubleField66)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField7, other.DoubleField7)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField62, other.DoubleField62)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField118, other.DoubleField118)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField119, other.DoubleField119)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField67, other.DoubleField67)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField120, other.DoubleField120)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField121, other.DoubleField121)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField122, other.DoubleField122)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField123, other.DoubleField123)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField124, other.DoubleField124)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField8, other.DoubleField8)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField9, other.DoubleField9)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField98, other.DoubleField98)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField10, other.DoubleField10)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField11, other.DoubleField11)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField99, other.DoubleField99)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField84, other.DoubleField84)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField14, other.DoubleField14)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField77, other.DoubleField77)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField15, other.DoubleField15)) return false;
+      if (Int64Field19 != other.Int64Field19) return false;
+      if (Int64Field115 != other.Int64Field115) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField116, other.DoubleField116)) return false;
+      if (Int64Field117 != other.Int64Field117) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField20, other.DoubleField20)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField21, other.DoubleField21)) return false;
+      if (StringField73 != other.StringField73) return false;
+      if (StringField74 != other.StringField74) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField22, other.DoubleField22)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField69, other.DoubleField69)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField70, other.DoubleField70)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField71, other.DoubleField71)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField72, other.DoubleField72)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField25, other.DoubleField25)) return false;
+      if (Int64Field26 != other.Int64Field26) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField68, other.DoubleField68)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField28, other.DoubleField28)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField106, other.DoubleField106)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField29, other.DoubleField29)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField30, other.DoubleField30)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField101, other.DoubleField101)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField102, other.DoubleField102)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField103, other.DoubleField103)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField104, other.DoubleField104)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField105, other.DoubleField105)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField31, other.DoubleField31)) return false;
+      if (Int64Field32 != other.Int64Field32) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField75, other.DoubleField75)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField129, other.DoubleField129)) return false;
+      if (EnumField80 != other.EnumField80) return false;
+      if (EnumField81 != other.EnumField81) return false;
+      if (Int64Field82 != other.Int64Field82) return false;
+      if (EnumField83 != other.EnumField83) return false;
+      if (Int64Field85 != other.Int64Field85) return false;
+      if (Int64Field86 != other.Int64Field86) return false;
+      if (Int64Field87 != other.Int64Field87) return false;
+      if (Int64Field125 != other.Int64Field125) return false;
+      if (Int64Field37 != other.Int64Field37) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField38, other.DoubleField38)) return false;
+      if (Interactions != other.Interactions) return false;
+      if(!repeatedIntField100_.Equals(other.repeatedIntField100_)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField40, other.DoubleField40)) return false;
+      if (Int64Field41 != other.Int64Field41) return false;
+      if (Int64Field126 != other.Int64Field126) return false;
+      if (Int64Field127 != other.Int64Field127) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField128, other.DoubleField128)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField109, other.DoubleField109)) return false;
+      if (Int64Field110 != other.Int64Field110) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField111, other.DoubleField111)) return false;
+      if (Int64Field112 != other.Int64Field112) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField113, other.DoubleField113)) return false;
+      if (Int64Field114 != other.Int64Field114) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField42, other.DoubleField42)) return false;
+      if (Int64Field43 != other.Int64Field43) return false;
+      if (Int64Field44 != other.Int64Field44) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField45, other.DoubleField45)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField46, other.DoubleField46)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField78, other.DoubleField78)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField88, other.DoubleField88)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField47, other.DoubleField47)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField89, other.DoubleField89)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField48, other.DoubleField48)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField49, other.DoubleField49)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField50, other.DoubleField50)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField90, other.DoubleField90)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField51, other.DoubleField51)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField91, other.DoubleField91)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField92, other.DoubleField92)) return false;
+      if (Int64Field107 != other.Int64Field107) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField93, other.DoubleField93)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField108, other.DoubleField108)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField52, other.DoubleField52)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField53, other.DoubleField53)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField94, other.DoubleField94)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField54, other.DoubleField54)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField55, other.DoubleField55)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField56, other.DoubleField56)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField57, other.DoubleField57)) return false;
+      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField58, other.DoubleField58)) return false;
+      if (Int64Field59 != other.Int64Field59) return false;
+      if (Int64Field60 != other.Int64Field60) return false;
+      return Equals(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (DoubleField95 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField95);
+      if (DoubleField1 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField1);
+      if (DoubleField79 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField79);
+      if (Int64Field2 != 0L) hash ^= Int64Field2.GetHashCode();
+      if (DoubleField96 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField96);
+      if (Int64Field3 != 0L) hash ^= Int64Field3.GetHashCode();
+      if (Int64Field4 != 0L) hash ^= Int64Field4.GetHashCode();
+      if (DoubleField97 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField97);
+      if (DoubleField65 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField65);
+      if (DoubleField66 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField66);
+      if (DoubleField7 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField7);
+      if (DoubleField62 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField62);
+      if (DoubleField118 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField118);
+      if (DoubleField119 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField119);
+      if (DoubleField67 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField67);
+      if (DoubleField120 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField120);
+      if (DoubleField121 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField121);
+      if (DoubleField122 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField122);
+      if (DoubleField123 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField123);
+      if (DoubleField124 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField124);
+      if (DoubleField8 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField8);
+      if (DoubleField9 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField9);
+      if (DoubleField98 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField98);
+      if (DoubleField10 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField10);
+      if (DoubleField11 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField11);
+      if (DoubleField99 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField99);
+      if (DoubleField84 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField84);
+      if (DoubleField14 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField14);
+      if (DoubleField77 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField77);
+      if (DoubleField15 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField15);
+      if (Int64Field19 != 0L) hash ^= Int64Field19.GetHashCode();
+      if (Int64Field115 != 0L) hash ^= Int64Field115.GetHashCode();
+      if (DoubleField116 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField116);
+      if (Int64Field117 != 0L) hash ^= Int64Field117.GetHashCode();
+      if (DoubleField20 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField20);
+      if (DoubleField21 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField21);
+      if (StringField73.Length != 0) hash ^= StringField73.GetHashCode();
+      if (StringField74.Length != 0) hash ^= StringField74.GetHashCode();
+      if (DoubleField22 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField22);
+      if (DoubleField69 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField69);
+      if (DoubleField70 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField70);
+      if (DoubleField71 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField71);
+      if (DoubleField72 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField72);
+      if (DoubleField25 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField25);
+      if (Int64Field26 != 0L) hash ^= Int64Field26.GetHashCode();
+      if (DoubleField68 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField68);
+      if (DoubleField28 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField28);
+      if (DoubleField106 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField106);
+      if (DoubleField29 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField29);
+      if (DoubleField30 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField30);
+      if (DoubleField101 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField101);
+      if (DoubleField102 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField102);
+      if (DoubleField103 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField103);
+      if (DoubleField104 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField104);
+      if (DoubleField105 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField105);
+      if (DoubleField31 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField31);
+      if (Int64Field32 != 0L) hash ^= Int64Field32.GetHashCode();
+      if (DoubleField75 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField75);
+      if (DoubleField129 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField129);
+      if (EnumField80 != 0) hash ^= EnumField80.GetHashCode();
+      if (EnumField81 != 0) hash ^= EnumField81.GetHashCode();
+      if (Int64Field82 != 0L) hash ^= Int64Field82.GetHashCode();
+      if (EnumField83 != 0) hash ^= EnumField83.GetHashCode();
+      if (Int64Field85 != 0L) hash ^= Int64Field85.GetHashCode();
+      if (Int64Field86 != 0L) hash ^= Int64Field86.GetHashCode();
+      if (Int64Field87 != 0L) hash ^= Int64Field87.GetHashCode();
+      if (Int64Field125 != 0L) hash ^= Int64Field125.GetHashCode();
+      if (Int64Field37 != 0L) hash ^= Int64Field37.GetHashCode();
+      if (DoubleField38 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField38);
+      if (Interactions != 0L) hash ^= Interactions.GetHashCode();
+      hash ^= repeatedIntField100_.GetHashCode();
+      if (DoubleField40 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField40);
+      if (Int64Field41 != 0L) hash ^= Int64Field41.GetHashCode();
+      if (Int64Field126 != 0L) hash ^= Int64Field126.GetHashCode();
+      if (Int64Field127 != 0L) hash ^= Int64Field127.GetHashCode();
+      if (DoubleField128 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField128);
+      if (DoubleField109 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField109);
+      if (Int64Field110 != 0L) hash ^= Int64Field110.GetHashCode();
+      if (DoubleField111 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField111);
+      if (Int64Field112 != 0L) hash ^= Int64Field112.GetHashCode();
+      if (DoubleField113 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField113);
+      if (Int64Field114 != 0L) hash ^= Int64Field114.GetHashCode();
+      if (DoubleField42 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField42);
+      if (Int64Field43 != 0L) hash ^= Int64Field43.GetHashCode();
+      if (Int64Field44 != 0L) hash ^= Int64Field44.GetHashCode();
+      if (DoubleField45 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField45);
+      if (DoubleField46 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField46);
+      if (DoubleField78 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField78);
+      if (DoubleField88 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField88);
+      if (DoubleField47 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField47);
+      if (DoubleField89 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField89);
+      if (DoubleField48 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField48);
+      if (DoubleField49 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField49);
+      if (DoubleField50 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField50);
+      if (DoubleField90 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField90);
+      if (DoubleField51 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField51);
+      if (DoubleField91 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField91);
+      if (DoubleField92 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField92);
+      if (Int64Field107 != 0L) hash ^= Int64Field107.GetHashCode();
+      if (DoubleField93 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField93);
+      if (DoubleField108 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField108);
+      if (DoubleField52 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField52);
+      if (DoubleField53 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField53);
+      if (DoubleField94 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField94);
+      if (DoubleField54 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField54);
+      if (DoubleField55 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField55);
+      if (DoubleField56 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField56);
+      if (DoubleField57 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField57);
+      if (DoubleField58 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField58);
+      if (Int64Field59 != 0L) hash ^= Int64Field59.GetHashCode();
+      if (Int64Field60 != 0L) hash ^= Int64Field60.GetHashCode();
+      if (_unknownFields != null) {
+        hash ^= _unknownFields.GetHashCode();
+      }
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (DoubleField1 != 0D) {
+        output.WriteRawTag(9);
+        output.WriteDouble(DoubleField1);
+      }
+      if (Int64Field2 != 0L) {
+        output.WriteRawTag(16);
+        output.WriteInt64(Int64Field2);
+      }
+      if (Int64Field3 != 0L) {
+        output.WriteRawTag(24);
+        output.WriteInt64(Int64Field3);
+      }
+      if (Int64Field4 != 0L) {
+        output.WriteRawTag(32);
+        output.WriteInt64(Int64Field4);
+      }
+      if (DoubleField7 != 0D) {
+        output.WriteRawTag(57);
+        output.WriteDouble(DoubleField7);
+      }
+      if (DoubleField8 != 0D) {
+        output.WriteRawTag(65);
+        output.WriteDouble(DoubleField8);
+      }
+      if (DoubleField9 != 0D) {
+        output.WriteRawTag(73);
+        output.WriteDouble(DoubleField9);
+      }
+      if (DoubleField10 != 0D) {
+        output.WriteRawTag(81);
+        output.WriteDouble(DoubleField10);
+      }
+      if (DoubleField11 != 0D) {
+        output.WriteRawTag(89);
+        output.WriteDouble(DoubleField11);
+      }
+      if (DoubleField14 != 0D) {
+        output.WriteRawTag(113);
+        output.WriteDouble(DoubleField14);
+      }
+      if (DoubleField15 != 0D) {
+        output.WriteRawTag(121);
+        output.WriteDouble(DoubleField15);
+      }
+      if (Int64Field19 != 0L) {
+        output.WriteRawTag(152, 1);
+        output.WriteInt64(Int64Field19);
+      }
+      if (DoubleField20 != 0D) {
+        output.WriteRawTag(161, 1);
+        output.WriteDouble(DoubleField20);
+      }
+      if (DoubleField21 != 0D) {
+        output.WriteRawTag(169, 1);
+        output.WriteDouble(DoubleField21);
+      }
+      if (DoubleField22 != 0D) {
+        output.WriteRawTag(177, 1);
+        output.WriteDouble(DoubleField22);
+      }
+      if (DoubleField25 != 0D) {
+        output.WriteRawTag(201, 1);
+        output.WriteDouble(DoubleField25);
+      }
+      if (Int64Field26 != 0L) {
+        output.WriteRawTag(208, 1);
+        output.WriteInt64(Int64Field26);
+      }
+      if (DoubleField28 != 0D) {
+        output.WriteRawTag(225, 1);
+        output.WriteDouble(DoubleField28);
+      }
+      if (DoubleField29 != 0D) {
+        output.WriteRawTag(233, 1);
+        output.WriteDouble(DoubleField29);
+      }
+      if (DoubleField30 != 0D) {
+        output.WriteRawTag(241, 1);
+        output.WriteDouble(DoubleField30);
+      }
+      if (DoubleField31 != 0D) {
+        output.WriteRawTag(249, 1);
+        output.WriteDouble(DoubleField31);
+      }
+      if (Int64Field32 != 0L) {
+        output.WriteRawTag(128, 2);
+        output.WriteInt64(Int64Field32);
+      }
+      if (Int64Field37 != 0L) {
+        output.WriteRawTag(168, 2);
+        output.WriteInt64(Int64Field37);
+      }
+      if (DoubleField38 != 0D) {
+        output.WriteRawTag(177, 2);
+        output.WriteDouble(DoubleField38);
+      }
+      if (Interactions != 0L) {
+        output.WriteRawTag(184, 2);
+        output.WriteInt64(Interactions);
+      }
+      if (DoubleField40 != 0D) {
+        output.WriteRawTag(193, 2);
+        output.WriteDouble(DoubleField40);
+      }
+      if (Int64Field41 != 0L) {
+        output.WriteRawTag(200, 2);
+        output.WriteInt64(Int64Field41);
+      }
+      if (DoubleField42 != 0D) {
+        output.WriteRawTag(209, 2);
+        output.WriteDouble(DoubleField42);
+      }
+      if (Int64Field43 != 0L) {
+        output.WriteRawTag(216, 2);
+        output.WriteInt64(Int64Field43);
+      }
+      if (Int64Field44 != 0L) {
+        output.WriteRawTag(224, 2);
+        output.WriteInt64(Int64Field44);
+      }
+      if (DoubleField45 != 0D) {
+        output.WriteRawTag(233, 2);
+        output.WriteDouble(DoubleField45);
+      }
+      if (DoubleField46 != 0D) {
+        output.WriteRawTag(241, 2);
+        output.WriteDouble(DoubleField46);
+      }
+      if (DoubleField47 != 0D) {
+        output.WriteRawTag(249, 2);
+        output.WriteDouble(DoubleField47);
+      }
+      if (DoubleField48 != 0D) {
+        output.WriteRawTag(129, 3);
+        output.WriteDouble(DoubleField48);
+      }
+      if (DoubleField49 != 0D) {
+        output.WriteRawTag(137, 3);
+        output.WriteDouble(DoubleField49);
+      }
+      if (DoubleField50 != 0D) {
+        output.WriteRawTag(145, 3);
+        output.WriteDouble(DoubleField50);
+      }
+      if (DoubleField51 != 0D) {
+        output.WriteRawTag(153, 3);
+        output.WriteDouble(DoubleField51);
+      }
+      if (DoubleField52 != 0D) {
+        output.WriteRawTag(161, 3);
+        output.WriteDouble(DoubleField52);
+      }
+      if (DoubleField53 != 0D) {
+        output.WriteRawTag(169, 3);
+        output.WriteDouble(DoubleField53);
+      }
+      if (DoubleField54 != 0D) {
+        output.WriteRawTag(177, 3);
+        output.WriteDouble(DoubleField54);
+      }
+      if (DoubleField55 != 0D) {
+        output.WriteRawTag(185, 3);
+        output.WriteDouble(DoubleField55);
+      }
+      if (DoubleField56 != 0D) {
+        output.WriteRawTag(193, 3);
+        output.WriteDouble(DoubleField56);
+      }
+      if (DoubleField57 != 0D) {
+        output.WriteRawTag(201, 3);
+        output.WriteDouble(DoubleField57);
+      }
+      if (DoubleField58 != 0D) {
+        output.WriteRawTag(209, 3);
+        output.WriteDouble(DoubleField58);
+      }
+      if (Int64Field59 != 0L) {
+        output.WriteRawTag(216, 3);
+        output.WriteInt64(Int64Field59);
+      }
+      if (Int64Field60 != 0L) {
+        output.WriteRawTag(224, 3);
+        output.WriteInt64(Int64Field60);
+      }
+      if (DoubleField62 != 0D) {
+        output.WriteRawTag(241, 3);
+        output.WriteDouble(DoubleField62);
+      }
+      if (DoubleField65 != 0D) {
+        output.WriteRawTag(137, 4);
+        output.WriteDouble(DoubleField65);
+      }
+      if (DoubleField66 != 0D) {
+        output.WriteRawTag(145, 4);
+        output.WriteDouble(DoubleField66);
+      }
+      if (DoubleField67 != 0D) {
+        output.WriteRawTag(153, 4);
+        output.WriteDouble(DoubleField67);
+      }
+      if (DoubleField68 != 0D) {
+        output.WriteRawTag(161, 4);
+        output.WriteDouble(DoubleField68);
+      }
+      if (DoubleField69 != 0D) {
+        output.WriteRawTag(169, 4);
+        output.WriteDouble(DoubleField69);
+      }
+      if (DoubleField70 != 0D) {
+        output.WriteRawTag(177, 4);
+        output.WriteDouble(DoubleField70);
+      }
+      if (DoubleField71 != 0D) {
+        output.WriteRawTag(185, 4);
+        output.WriteDouble(DoubleField71);
+      }
+      if (DoubleField72 != 0D) {
+        output.WriteRawTag(193, 4);
+        output.WriteDouble(DoubleField72);
+      }
+      if (StringField73.Length != 0) {
+        output.WriteRawTag(202, 4);
+        output.WriteString(StringField73);
+      }
+      if (StringField74.Length != 0) {
+        output.WriteRawTag(210, 4);
+        output.WriteString(StringField74);
+      }
+      if (DoubleField75 != 0D) {
+        output.WriteRawTag(217, 4);
+        output.WriteDouble(DoubleField75);
+      }
+      if (DoubleField77 != 0D) {
+        output.WriteRawTag(233, 4);
+        output.WriteDouble(DoubleField77);
+      }
+      if (DoubleField78 != 0D) {
+        output.WriteRawTag(241, 4);
+        output.WriteDouble(DoubleField78);
+      }
+      if (DoubleField79 != 0D) {
+        output.WriteRawTag(249, 4);
+        output.WriteDouble(DoubleField79);
+      }
+      if (EnumField80 != 0) {
+        output.WriteRawTag(128, 5);
+        output.WriteInt32(EnumField80);
+      }
+      if (EnumField81 != 0) {
+        output.WriteRawTag(136, 5);
+        output.WriteInt32(EnumField81);
+      }
+      if (Int64Field82 != 0L) {
+        output.WriteRawTag(144, 5);
+        output.WriteInt64(Int64Field82);
+      }
+      if (EnumField83 != 0) {
+        output.WriteRawTag(152, 5);
+        output.WriteInt32(EnumField83);
+      }
+      if (DoubleField84 != 0D) {
+        output.WriteRawTag(161, 5);
+        output.WriteDouble(DoubleField84);
+      }
+      if (Int64Field85 != 0L) {
+        output.WriteRawTag(168, 5);
+        output.WriteInt64(Int64Field85);
+      }
+      if (Int64Field86 != 0L) {
+        output.WriteRawTag(176, 5);
+        output.WriteInt64(Int64Field86);
+      }
+      if (Int64Field87 != 0L) {
+        output.WriteRawTag(184, 5);
+        output.WriteInt64(Int64Field87);
+      }
+      if (DoubleField88 != 0D) {
+        output.WriteRawTag(193, 5);
+        output.WriteDouble(DoubleField88);
+      }
+      if (DoubleField89 != 0D) {
+        output.WriteRawTag(201, 5);
+        output.WriteDouble(DoubleField89);
+      }
+      if (DoubleField90 != 0D) {
+        output.WriteRawTag(209, 5);
+        output.WriteDouble(DoubleField90);
+      }
+      if (DoubleField91 != 0D) {
+        output.WriteRawTag(217, 5);
+        output.WriteDouble(DoubleField91);
+      }
+      if (DoubleField92 != 0D) {
+        output.WriteRawTag(225, 5);
+        output.WriteDouble(DoubleField92);
+      }
+      if (DoubleField93 != 0D) {
+        output.WriteRawTag(233, 5);
+        output.WriteDouble(DoubleField93);
+      }
+      if (DoubleField94 != 0D) {
+        output.WriteRawTag(241, 5);
+        output.WriteDouble(DoubleField94);
+      }
+      if (DoubleField95 != 0D) {
+        output.WriteRawTag(249, 5);
+        output.WriteDouble(DoubleField95);
+      }
+      if (DoubleField96 != 0D) {
+        output.WriteRawTag(129, 6);
+        output.WriteDouble(DoubleField96);
+      }
+      if (DoubleField97 != 0D) {
+        output.WriteRawTag(137, 6);
+        output.WriteDouble(DoubleField97);
+      }
+      if (DoubleField98 != 0D) {
+        output.WriteRawTag(145, 6);
+        output.WriteDouble(DoubleField98);
+      }
+      if (DoubleField99 != 0D) {
+        output.WriteRawTag(153, 6);
+        output.WriteDouble(DoubleField99);
+      }
+      repeatedIntField100_.WriteTo(output, _repeated_repeatedIntField100_codec);
+      if (DoubleField101 != 0D) {
+        output.WriteRawTag(169, 6);
+        output.WriteDouble(DoubleField101);
+      }
+      if (DoubleField102 != 0D) {
+        output.WriteRawTag(177, 6);
+        output.WriteDouble(DoubleField102);
+      }
+      if (DoubleField103 != 0D) {
+        output.WriteRawTag(185, 6);
+        output.WriteDouble(DoubleField103);
+      }
+      if (DoubleField104 != 0D) {
+        output.WriteRawTag(193, 6);
+        output.WriteDouble(DoubleField104);
+      }
+      if (DoubleField105 != 0D) {
+        output.WriteRawTag(201, 6);
+        output.WriteDouble(DoubleField105);
+      }
+      if (DoubleField106 != 0D) {
+        output.WriteRawTag(209, 6);
+        output.WriteDouble(DoubleField106);
+      }
+      if (Int64Field107 != 0L) {
+        output.WriteRawTag(216, 6);
+        output.WriteInt64(Int64Field107);
+      }
+      if (DoubleField108 != 0D) {
+        output.WriteRawTag(225, 6);
+        output.WriteDouble(DoubleField108);
+      }
+      if (DoubleField109 != 0D) {
+        output.WriteRawTag(233, 6);
+        output.WriteDouble(DoubleField109);
+      }
+      if (Int64Field110 != 0L) {
+        output.WriteRawTag(240, 6);
+        output.WriteInt64(Int64Field110);
+      }
+      if (DoubleField111 != 0D) {
+        output.WriteRawTag(249, 6);
+        output.WriteDouble(DoubleField111);
+      }
+      if (Int64Field112 != 0L) {
+        output.WriteRawTag(128, 7);
+        output.WriteInt64(Int64Field112);
+      }
+      if (DoubleField113 != 0D) {
+        output.WriteRawTag(137, 7);
+        output.WriteDouble(DoubleField113);
+      }
+      if (Int64Field114 != 0L) {
+        output.WriteRawTag(144, 7);
+        output.WriteInt64(Int64Field114);
+      }
+      if (Int64Field115 != 0L) {
+        output.WriteRawTag(152, 7);
+        output.WriteInt64(Int64Field115);
+      }
+      if (DoubleField116 != 0D) {
+        output.WriteRawTag(161, 7);
+        output.WriteDouble(DoubleField116);
+      }
+      if (Int64Field117 != 0L) {
+        output.WriteRawTag(168, 7);
+        output.WriteInt64(Int64Field117);
+      }
+      if (DoubleField118 != 0D) {
+        output.WriteRawTag(177, 7);
+        output.WriteDouble(DoubleField118);
+      }
+      if (DoubleField119 != 0D) {
+        output.WriteRawTag(185, 7);
+        output.WriteDouble(DoubleField119);
+      }
+      if (DoubleField120 != 0D) {
+        output.WriteRawTag(193, 7);
+        output.WriteDouble(DoubleField120);
+      }
+      if (DoubleField121 != 0D) {
+        output.WriteRawTag(201, 7);
+        output.WriteDouble(DoubleField121);
+      }
+      if (DoubleField122 != 0D) {
+        output.WriteRawTag(209, 7);
+        output.WriteDouble(DoubleField122);
+      }
+      if (DoubleField123 != 0D) {
+        output.WriteRawTag(217, 7);
+        output.WriteDouble(DoubleField123);
+      }
+      if (DoubleField124 != 0D) {
+        output.WriteRawTag(225, 7);
+        output.WriteDouble(DoubleField124);
+      }
+      if (Int64Field125 != 0L) {
+        output.WriteRawTag(232, 7);
+        output.WriteInt64(Int64Field125);
+      }
+      if (Int64Field126 != 0L) {
+        output.WriteRawTag(240, 7);
+        output.WriteInt64(Int64Field126);
+      }
+      if (Int64Field127 != 0L) {
+        output.WriteRawTag(248, 7);
+        output.WriteInt64(Int64Field127);
+      }
+      if (DoubleField128 != 0D) {
+        output.WriteRawTag(129, 8);
+        output.WriteDouble(DoubleField128);
+      }
+      if (DoubleField129 != 0D) {
+        output.WriteRawTag(137, 8);
+        output.WriteDouble(DoubleField129);
+      }
+      if (_unknownFields != null) {
+        _unknownFields.WriteTo(output);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (DoubleField95 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField1 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField79 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field2 != 0L) {
+        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field2);
+      }
+      if (DoubleField96 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field3 != 0L) {
+        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field3);
+      }
+      if (Int64Field4 != 0L) {
+        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field4);
+      }
+      if (DoubleField97 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField65 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField66 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField7 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField62 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField118 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField119 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField67 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField120 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField121 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField122 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField123 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField124 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField8 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField9 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField98 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField10 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField11 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField99 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField84 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField14 != 0D) {
+        size += 1 + 8;
+      }
+      if (DoubleField77 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField15 != 0D) {
+        size += 1 + 8;
+      }
+      if (Int64Field19 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field19);
+      }
+      if (Int64Field115 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field115);
+      }
+      if (DoubleField116 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field117 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field117);
+      }
+      if (DoubleField20 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField21 != 0D) {
+        size += 2 + 8;
+      }
+      if (StringField73.Length != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeStringSize(StringField73);
+      }
+      if (StringField74.Length != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeStringSize(StringField74);
+      }
+      if (DoubleField22 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField69 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField70 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField71 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField72 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField25 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field26 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field26);
+      }
+      if (DoubleField68 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField28 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField106 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField29 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField30 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField101 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField102 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField103 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField104 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField105 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField31 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field32 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field32);
+      }
+      if (DoubleField75 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField129 != 0D) {
+        size += 2 + 8;
+      }
+      if (EnumField80 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField80);
+      }
+      if (EnumField81 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField81);
+      }
+      if (Int64Field82 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field82);
+      }
+      if (EnumField83 != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField83);
+      }
+      if (Int64Field85 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field85);
+      }
+      if (Int64Field86 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field86);
+      }
+      if (Int64Field87 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field87);
+      }
+      if (Int64Field125 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field125);
+      }
+      if (Int64Field37 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field37);
+      }
+      if (DoubleField38 != 0D) {
+        size += 2 + 8;
+      }
+      if (Interactions != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Interactions);
+      }
+      size += repeatedIntField100_.CalculateSize(_repeated_repeatedIntField100_codec);
+      if (DoubleField40 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field41 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field41);
+      }
+      if (Int64Field126 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field126);
+      }
+      if (Int64Field127 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field127);
+      }
+      if (DoubleField128 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField109 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field110 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field110);
+      }
+      if (DoubleField111 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field112 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field112);
+      }
+      if (DoubleField113 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field114 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field114);
+      }
+      if (DoubleField42 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field43 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field43);
+      }
+      if (Int64Field44 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field44);
+      }
+      if (DoubleField45 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField46 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField78 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField88 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField47 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField89 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField48 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField49 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField50 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField90 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField51 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField91 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField92 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field107 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field107);
+      }
+      if (DoubleField93 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField108 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField52 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField53 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField94 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField54 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField55 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField56 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField57 != 0D) {
+        size += 2 + 8;
+      }
+      if (DoubleField58 != 0D) {
+        size += 2 + 8;
+      }
+      if (Int64Field59 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field59);
+      }
+      if (Int64Field60 != 0L) {
+        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field60);
+      }
+      if (_unknownFields != null) {
+        size += _unknownFields.CalculateSize();
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(ManyPrimitiveFieldsMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.DoubleField95 != 0D) {
+        DoubleField95 = other.DoubleField95;
+      }
+      if (other.DoubleField1 != 0D) {
+        DoubleField1 = other.DoubleField1;
+      }
+      if (other.DoubleField79 != 0D) {
+        DoubleField79 = other.DoubleField79;
+      }
+      if (other.Int64Field2 != 0L) {
+        Int64Field2 = other.Int64Field2;
+      }
+      if (other.DoubleField96 != 0D) {
+        DoubleField96 = other.DoubleField96;
+      }
+      if (other.Int64Field3 != 0L) {
+        Int64Field3 = other.Int64Field3;
+      }
+      if (other.Int64Field4 != 0L) {
+        Int64Field4 = other.Int64Field4;
+      }
+      if (other.DoubleField97 != 0D) {
+        DoubleField97 = other.DoubleField97;
+      }
+      if (other.DoubleField65 != 0D) {
+        DoubleField65 = other.DoubleField65;
+      }
+      if (other.DoubleField66 != 0D) {
+        DoubleField66 = other.DoubleField66;
+      }
+      if (other.DoubleField7 != 0D) {
+        DoubleField7 = other.DoubleField7;
+      }
+      if (other.DoubleField62 != 0D) {
+        DoubleField62 = other.DoubleField62;
+      }
+      if (other.DoubleField118 != 0D) {
+        DoubleField118 = other.DoubleField118;
+      }
+      if (other.DoubleField119 != 0D) {
+        DoubleField119 = other.DoubleField119;
+      }
+      if (other.DoubleField67 != 0D) {
+        DoubleField67 = other.DoubleField67;
+      }
+      if (other.DoubleField120 != 0D) {
+        DoubleField120 = other.DoubleField120;
+      }
+      if (other.DoubleField121 != 0D) {
+        DoubleField121 = other.DoubleField121;
+      }
+      if (other.DoubleField122 != 0D) {
+        DoubleField122 = other.DoubleField122;
+      }
+      if (other.DoubleField123 != 0D) {
+        DoubleField123 = other.DoubleField123;
+      }
+      if (other.DoubleField124 != 0D) {
+        DoubleField124 = other.DoubleField124;
+      }
+      if (other.DoubleField8 != 0D) {
+        DoubleField8 = other.DoubleField8;
+      }
+      if (other.DoubleField9 != 0D) {
+        DoubleField9 = other.DoubleField9;
+      }
+      if (other.DoubleField98 != 0D) {
+        DoubleField98 = other.DoubleField98;
+      }
+      if (other.DoubleField10 != 0D) {
+        DoubleField10 = other.DoubleField10;
+      }
+      if (other.DoubleField11 != 0D) {
+        DoubleField11 = other.DoubleField11;
+      }
+      if (other.DoubleField99 != 0D) {
+        DoubleField99 = other.DoubleField99;
+      }
+      if (other.DoubleField84 != 0D) {
+        DoubleField84 = other.DoubleField84;
+      }
+      if (other.DoubleField14 != 0D) {
+        DoubleField14 = other.DoubleField14;
+      }
+      if (other.DoubleField77 != 0D) {
+        DoubleField77 = other.DoubleField77;
+      }
+      if (other.DoubleField15 != 0D) {
+        DoubleField15 = other.DoubleField15;
+      }
+      if (other.Int64Field19 != 0L) {
+        Int64Field19 = other.Int64Field19;
+      }
+      if (other.Int64Field115 != 0L) {
+        Int64Field115 = other.Int64Field115;
+      }
+      if (other.DoubleField116 != 0D) {
+        DoubleField116 = other.DoubleField116;
+      }
+      if (other.Int64Field117 != 0L) {
+        Int64Field117 = other.Int64Field117;
+      }
+      if (other.DoubleField20 != 0D) {
+        DoubleField20 = other.DoubleField20;
+      }
+      if (other.DoubleField21 != 0D) {
+        DoubleField21 = other.DoubleField21;
+      }
+      if (other.StringField73.Length != 0) {
+        StringField73 = other.StringField73;
+      }
+      if (other.StringField74.Length != 0) {
+        StringField74 = other.StringField74;
+      }
+      if (other.DoubleField22 != 0D) {
+        DoubleField22 = other.DoubleField22;
+      }
+      if (other.DoubleField69 != 0D) {
+        DoubleField69 = other.DoubleField69;
+      }
+      if (other.DoubleField70 != 0D) {
+        DoubleField70 = other.DoubleField70;
+      }
+      if (other.DoubleField71 != 0D) {
+        DoubleField71 = other.DoubleField71;
+      }
+      if (other.DoubleField72 != 0D) {
+        DoubleField72 = other.DoubleField72;
+      }
+      if (other.DoubleField25 != 0D) {
+        DoubleField25 = other.DoubleField25;
+      }
+      if (other.Int64Field26 != 0L) {
+        Int64Field26 = other.Int64Field26;
+      }
+      if (other.DoubleField68 != 0D) {
+        DoubleField68 = other.DoubleField68;
+      }
+      if (other.DoubleField28 != 0D) {
+        DoubleField28 = other.DoubleField28;
+      }
+      if (other.DoubleField106 != 0D) {
+        DoubleField106 = other.DoubleField106;
+      }
+      if (other.DoubleField29 != 0D) {
+        DoubleField29 = other.DoubleField29;
+      }
+      if (other.DoubleField30 != 0D) {
+        DoubleField30 = other.DoubleField30;
+      }
+      if (other.DoubleField101 != 0D) {
+        DoubleField101 = other.DoubleField101;
+      }
+      if (other.DoubleField102 != 0D) {
+        DoubleField102 = other.DoubleField102;
+      }
+      if (other.DoubleField103 != 0D) {
+        DoubleField103 = other.DoubleField103;
+      }
+      if (other.DoubleField104 != 0D) {
+        DoubleField104 = other.DoubleField104;
+      }
+      if (other.DoubleField105 != 0D) {
+        DoubleField105 = other.DoubleField105;
+      }
+      if (other.DoubleField31 != 0D) {
+        DoubleField31 = other.DoubleField31;
+      }
+      if (other.Int64Field32 != 0L) {
+        Int64Field32 = other.Int64Field32;
+      }
+      if (other.DoubleField75 != 0D) {
+        DoubleField75 = other.DoubleField75;
+      }
+      if (other.DoubleField129 != 0D) {
+        DoubleField129 = other.DoubleField129;
+      }
+      if (other.EnumField80 != 0) {
+        EnumField80 = other.EnumField80;
+      }
+      if (other.EnumField81 != 0) {
+        EnumField81 = other.EnumField81;
+      }
+      if (other.Int64Field82 != 0L) {
+        Int64Field82 = other.Int64Field82;
+      }
+      if (other.EnumField83 != 0) {
+        EnumField83 = other.EnumField83;
+      }
+      if (other.Int64Field85 != 0L) {
+        Int64Field85 = other.Int64Field85;
+      }
+      if (other.Int64Field86 != 0L) {
+        Int64Field86 = other.Int64Field86;
+      }
+      if (other.Int64Field87 != 0L) {
+        Int64Field87 = other.Int64Field87;
+      }
+      if (other.Int64Field125 != 0L) {
+        Int64Field125 = other.Int64Field125;
+      }
+      if (other.Int64Field37 != 0L) {
+        Int64Field37 = other.Int64Field37;
+      }
+      if (other.DoubleField38 != 0D) {
+        DoubleField38 = other.DoubleField38;
+      }
+      if (other.Interactions != 0L) {
+        Interactions = other.Interactions;
+      }
+      repeatedIntField100_.Add(other.repeatedIntField100_);
+      if (other.DoubleField40 != 0D) {
+        DoubleField40 = other.DoubleField40;
+      }
+      if (other.Int64Field41 != 0L) {
+        Int64Field41 = other.Int64Field41;
+      }
+      if (other.Int64Field126 != 0L) {
+        Int64Field126 = other.Int64Field126;
+      }
+      if (other.Int64Field127 != 0L) {
+        Int64Field127 = other.Int64Field127;
+      }
+      if (other.DoubleField128 != 0D) {
+        DoubleField128 = other.DoubleField128;
+      }
+      if (other.DoubleField109 != 0D) {
+        DoubleField109 = other.DoubleField109;
+      }
+      if (other.Int64Field110 != 0L) {
+        Int64Field110 = other.Int64Field110;
+      }
+      if (other.DoubleField111 != 0D) {
+        DoubleField111 = other.DoubleField111;
+      }
+      if (other.Int64Field112 != 0L) {
+        Int64Field112 = other.Int64Field112;
+      }
+      if (other.DoubleField113 != 0D) {
+        DoubleField113 = other.DoubleField113;
+      }
+      if (other.Int64Field114 != 0L) {
+        Int64Field114 = other.Int64Field114;
+      }
+      if (other.DoubleField42 != 0D) {
+        DoubleField42 = other.DoubleField42;
+      }
+      if (other.Int64Field43 != 0L) {
+        Int64Field43 = other.Int64Field43;
+      }
+      if (other.Int64Field44 != 0L) {
+        Int64Field44 = other.Int64Field44;
+      }
+      if (other.DoubleField45 != 0D) {
+        DoubleField45 = other.DoubleField45;
+      }
+      if (other.DoubleField46 != 0D) {
+        DoubleField46 = other.DoubleField46;
+      }
+      if (other.DoubleField78 != 0D) {
+        DoubleField78 = other.DoubleField78;
+      }
+      if (other.DoubleField88 != 0D) {
+        DoubleField88 = other.DoubleField88;
+      }
+      if (other.DoubleField47 != 0D) {
+        DoubleField47 = other.DoubleField47;
+      }
+      if (other.DoubleField89 != 0D) {
+        DoubleField89 = other.DoubleField89;
+      }
+      if (other.DoubleField48 != 0D) {
+        DoubleField48 = other.DoubleField48;
+      }
+      if (other.DoubleField49 != 0D) {
+        DoubleField49 = other.DoubleField49;
+      }
+      if (other.DoubleField50 != 0D) {
+        DoubleField50 = other.DoubleField50;
+      }
+      if (other.DoubleField90 != 0D) {
+        DoubleField90 = other.DoubleField90;
+      }
+      if (other.DoubleField51 != 0D) {
+        DoubleField51 = other.DoubleField51;
+      }
+      if (other.DoubleField91 != 0D) {
+        DoubleField91 = other.DoubleField91;
+      }
+      if (other.DoubleField92 != 0D) {
+        DoubleField92 = other.DoubleField92;
+      }
+      if (other.Int64Field107 != 0L) {
+        Int64Field107 = other.Int64Field107;
+      }
+      if (other.DoubleField93 != 0D) {
+        DoubleField93 = other.DoubleField93;
+      }
+      if (other.DoubleField108 != 0D) {
+        DoubleField108 = other.DoubleField108;
+      }
+      if (other.DoubleField52 != 0D) {
+        DoubleField52 = other.DoubleField52;
+      }
+      if (other.DoubleField53 != 0D) {
+        DoubleField53 = other.DoubleField53;
+      }
+      if (other.DoubleField94 != 0D) {
+        DoubleField94 = other.DoubleField94;
+      }
+      if (other.DoubleField54 != 0D) {
+        DoubleField54 = other.DoubleField54;
+      }
+      if (other.DoubleField55 != 0D) {
+        DoubleField55 = other.DoubleField55;
+      }
+      if (other.DoubleField56 != 0D) {
+        DoubleField56 = other.DoubleField56;
+      }
+      if (other.DoubleField57 != 0D) {
+        DoubleField57 = other.DoubleField57;
+      }
+      if (other.DoubleField58 != 0D) {
+        DoubleField58 = other.DoubleField58;
+      }
+      if (other.Int64Field59 != 0L) {
+        Int64Field59 = other.Int64Field59;
+      }
+      if (other.Int64Field60 != 0L) {
+        Int64Field60 = other.Int64Field60;
+      }
+      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+            break;
+          case 9: {
+            DoubleField1 = input.ReadDouble();
+            break;
+          }
+          case 16: {
+            Int64Field2 = input.ReadInt64();
+            break;
+          }
+          case 24: {
+            Int64Field3 = input.ReadInt64();
+            break;
+          }
+          case 32: {
+            Int64Field4 = input.ReadInt64();
+            break;
+          }
+          case 57: {
+            DoubleField7 = input.ReadDouble();
+            break;
+          }
+          case 65: {
+            DoubleField8 = input.ReadDouble();
+            break;
+          }
+          case 73: {
+            DoubleField9 = input.ReadDouble();
+            break;
+          }
+          case 81: {
+            DoubleField10 = input.ReadDouble();
+            break;
+          }
+          case 89: {
+            DoubleField11 = input.ReadDouble();
+            break;
+          }
+          case 113: {
+            DoubleField14 = input.ReadDouble();
+            break;
+          }
+          case 121: {
+            DoubleField15 = input.ReadDouble();
+            break;
+          }
+          case 152: {
+            Int64Field19 = input.ReadInt64();
+            break;
+          }
+          case 161: {
+            DoubleField20 = input.ReadDouble();
+            break;
+          }
+          case 169: {
+            DoubleField21 = input.ReadDouble();
+            break;
+          }
+          case 177: {
+            DoubleField22 = input.ReadDouble();
+            break;
+          }
+          case 201: {
+            DoubleField25 = input.ReadDouble();
+            break;
+          }
+          case 208: {
+            Int64Field26 = input.ReadInt64();
+            break;
+          }
+          case 225: {
+            DoubleField28 = input.ReadDouble();
+            break;
+          }
+          case 233: {
+            DoubleField29 = input.ReadDouble();
+            break;
+          }
+          case 241: {
+            DoubleField30 = input.ReadDouble();
+            break;
+          }
+          case 249: {
+            DoubleField31 = input.ReadDouble();
+            break;
+          }
+          case 256: {
+            Int64Field32 = input.ReadInt64();
+            break;
+          }
+          case 296: {
+            Int64Field37 = input.ReadInt64();
+            break;
+          }
+          case 305: {
+            DoubleField38 = input.ReadDouble();
+            break;
+          }
+          case 312: {
+            Interactions = input.ReadInt64();
+            break;
+          }
+          case 321: {
+            DoubleField40 = input.ReadDouble();
+            break;
+          }
+          case 328: {
+            Int64Field41 = input.ReadInt64();
+            break;
+          }
+          case 337: {
+            DoubleField42 = input.ReadDouble();
+            break;
+          }
+          case 344: {
+            Int64Field43 = input.ReadInt64();
+            break;
+          }
+          case 352: {
+            Int64Field44 = input.ReadInt64();
+            break;
+          }
+          case 361: {
+            DoubleField45 = input.ReadDouble();
+            break;
+          }
+          case 369: {
+            DoubleField46 = input.ReadDouble();
+            break;
+          }
+          case 377: {
+            DoubleField47 = input.ReadDouble();
+            break;
+          }
+          case 385: {
+            DoubleField48 = input.ReadDouble();
+            break;
+          }
+          case 393: {
+            DoubleField49 = input.ReadDouble();
+            break;
+          }
+          case 401: {
+            DoubleField50 = input.ReadDouble();
+            break;
+          }
+          case 409: {
+            DoubleField51 = input.ReadDouble();
+            break;
+          }
+          case 417: {
+            DoubleField52 = input.ReadDouble();
+            break;
+          }
+          case 425: {
+            DoubleField53 = input.ReadDouble();
+            break;
+          }
+          case 433: {
+            DoubleField54 = input.ReadDouble();
+            break;
+          }
+          case 441: {
+            DoubleField55 = input.ReadDouble();
+            break;
+          }
+          case 449: {
+            DoubleField56 = input.ReadDouble();
+            break;
+          }
+          case 457: {
+            DoubleField57 = input.ReadDouble();
+            break;
+          }
+          case 465: {
+            DoubleField58 = input.ReadDouble();
+            break;
+          }
+          case 472: {
+            Int64Field59 = input.ReadInt64();
+            break;
+          }
+          case 480: {
+            Int64Field60 = input.ReadInt64();
+            break;
+          }
+          case 497: {
+            DoubleField62 = input.ReadDouble();
+            break;
+          }
+          case 521: {
+            DoubleField65 = input.ReadDouble();
+            break;
+          }
+          case 529: {
+            DoubleField66 = input.ReadDouble();
+            break;
+          }
+          case 537: {
+            DoubleField67 = input.ReadDouble();
+            break;
+          }
+          case 545: {
+            DoubleField68 = input.ReadDouble();
+            break;
+          }
+          case 553: {
+            DoubleField69 = input.ReadDouble();
+            break;
+          }
+          case 561: {
+            DoubleField70 = input.ReadDouble();
+            break;
+          }
+          case 569: {
+            DoubleField71 = input.ReadDouble();
+            break;
+          }
+          case 577: {
+            DoubleField72 = input.ReadDouble();
+            break;
+          }
+          case 586: {
+            StringField73 = input.ReadString();
+            break;
+          }
+          case 594: {
+            StringField74 = input.ReadString();
+            break;
+          }
+          case 601: {
+            DoubleField75 = input.ReadDouble();
+            break;
+          }
+          case 617: {
+            DoubleField77 = input.ReadDouble();
+            break;
+          }
+          case 625: {
+            DoubleField78 = input.ReadDouble();
+            break;
+          }
+          case 633: {
+            DoubleField79 = input.ReadDouble();
+            break;
+          }
+          case 640: {
+            EnumField80 = input.ReadInt32();
+            break;
+          }
+          case 648: {
+            EnumField81 = input.ReadInt32();
+            break;
+          }
+          case 656: {
+            Int64Field82 = input.ReadInt64();
+            break;
+          }
+          case 664: {
+            EnumField83 = input.ReadInt32();
+            break;
+          }
+          case 673: {
+            DoubleField84 = input.ReadDouble();
+            break;
+          }
+          case 680: {
+            Int64Field85 = input.ReadInt64();
+            break;
+          }
+          case 688: {
+            Int64Field86 = input.ReadInt64();
+            break;
+          }
+          case 696: {
+            Int64Field87 = input.ReadInt64();
+            break;
+          }
+          case 705: {
+            DoubleField88 = input.ReadDouble();
+            break;
+          }
+          case 713: {
+            DoubleField89 = input.ReadDouble();
+            break;
+          }
+          case 721: {
+            DoubleField90 = input.ReadDouble();
+            break;
+          }
+          case 729: {
+            DoubleField91 = input.ReadDouble();
+            break;
+          }
+          case 737: {
+            DoubleField92 = input.ReadDouble();
+            break;
+          }
+          case 745: {
+            DoubleField93 = input.ReadDouble();
+            break;
+          }
+          case 753: {
+            DoubleField94 = input.ReadDouble();
+            break;
+          }
+          case 761: {
+            DoubleField95 = input.ReadDouble();
+            break;
+          }
+          case 769: {
+            DoubleField96 = input.ReadDouble();
+            break;
+          }
+          case 777: {
+            DoubleField97 = input.ReadDouble();
+            break;
+          }
+          case 785: {
+            DoubleField98 = input.ReadDouble();
+            break;
+          }
+          case 793: {
+            DoubleField99 = input.ReadDouble();
+            break;
+          }
+          case 802:
+          case 800: {
+            repeatedIntField100_.AddEntriesFrom(input, _repeated_repeatedIntField100_codec);
+            break;
+          }
+          case 809: {
+            DoubleField101 = input.ReadDouble();
+            break;
+          }
+          case 817: {
+            DoubleField102 = input.ReadDouble();
+            break;
+          }
+          case 825: {
+            DoubleField103 = input.ReadDouble();
+            break;
+          }
+          case 833: {
+            DoubleField104 = input.ReadDouble();
+            break;
+          }
+          case 841: {
+            DoubleField105 = input.ReadDouble();
+            break;
+          }
+          case 849: {
+            DoubleField106 = input.ReadDouble();
+            break;
+          }
+          case 856: {
+            Int64Field107 = input.ReadInt64();
+            break;
+          }
+          case 865: {
+            DoubleField108 = input.ReadDouble();
+            break;
+          }
+          case 873: {
+            DoubleField109 = input.ReadDouble();
+            break;
+          }
+          case 880: {
+            Int64Field110 = input.ReadInt64();
+            break;
+          }
+          case 889: {
+            DoubleField111 = input.ReadDouble();
+            break;
+          }
+          case 896: {
+            Int64Field112 = input.ReadInt64();
+            break;
+          }
+          case 905: {
+            DoubleField113 = input.ReadDouble();
+            break;
+          }
+          case 912: {
+            Int64Field114 = input.ReadInt64();
+            break;
+          }
+          case 920: {
+            Int64Field115 = input.ReadInt64();
+            break;
+          }
+          case 929: {
+            DoubleField116 = input.ReadDouble();
+            break;
+          }
+          case 936: {
+            Int64Field117 = input.ReadInt64();
+            break;
+          }
+          case 945: {
+            DoubleField118 = input.ReadDouble();
+            break;
+          }
+          case 953: {
+            DoubleField119 = input.ReadDouble();
+            break;
+          }
+          case 961: {
+            DoubleField120 = input.ReadDouble();
+            break;
+          }
+          case 969: {
+            DoubleField121 = input.ReadDouble();
+            break;
+          }
+          case 977: {
+            DoubleField122 = input.ReadDouble();
+            break;
+          }
+          case 985: {
+            DoubleField123 = input.ReadDouble();
+            break;
+          }
+          case 993: {
+            DoubleField124 = input.ReadDouble();
+            break;
+          }
+          case 1000: {
+            Int64Field125 = input.ReadInt64();
+            break;
+          }
+          case 1008: {
+            Int64Field126 = input.ReadInt64();
+            break;
+          }
+          case 1016: {
+            Int64Field127 = input.ReadInt64();
+            break;
+          }
+          case 1025: {
+            DoubleField128 = input.ReadDouble();
+            break;
+          }
+          case 1033: {
+            DoubleField129 = input.ReadDouble();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/csharp/src/Google.Protobuf.Benchmarks/wrapper_benchmark_messages.proto b/csharp/src/Google.Protobuf.Benchmarks/wrapper_benchmark_messages.proto
new file mode 100644
index 0000000..6802c25
--- /dev/null
+++ b/csharp/src/Google.Protobuf.Benchmarks/wrapper_benchmark_messages.proto
@@ -0,0 +1,237 @@
+syntax = "proto3";
+
+package google.protobuf.benchmarks;
+
+import "google/protobuf/wrappers.proto";
+
+// a message that has a large number of wrapper fields
+// obfuscated version of an internal message
+message ManyWrapperFieldsMessage {
+  google.protobuf.DoubleValue double_field_95 = 95;
+  google.protobuf.DoubleValue double_field_1 = 1;
+  google.protobuf.DoubleValue double_field_79 = 79;
+  google.protobuf.Int64Value int64_field_2 = 2;
+  google.protobuf.DoubleValue double_field_96 = 96;
+  google.protobuf.Int64Value int64_field_3 = 3;
+  google.protobuf.Int64Value int64_field_4 = 4;
+  google.protobuf.DoubleValue double_field_97 = 97;
+  google.protobuf.DoubleValue double_field_65 = 65;
+  google.protobuf.DoubleValue double_field_66 = 66;
+  google.protobuf.DoubleValue double_field_7 = 7;
+  google.protobuf.DoubleValue double_field_62 = 62;
+  google.protobuf.DoubleValue double_field_118 = 118;
+  google.protobuf.DoubleValue double_field_119 = 119;
+  google.protobuf.DoubleValue double_field_67 = 67;
+  google.protobuf.DoubleValue double_field_120 = 120;
+  google.protobuf.DoubleValue double_field_121 = 121;
+  google.protobuf.DoubleValue double_field_122 = 122;
+  google.protobuf.DoubleValue double_field_123 = 123;
+  google.protobuf.DoubleValue double_field_124 = 124;
+  google.protobuf.DoubleValue double_field_8 = 8;
+  google.protobuf.DoubleValue double_field_9 = 9;
+  google.protobuf.DoubleValue double_field_98 = 98;
+  google.protobuf.DoubleValue double_field_10 = 10;
+  google.protobuf.DoubleValue double_field_11 = 11;
+  google.protobuf.DoubleValue double_field_99 = 99;
+  google.protobuf.DoubleValue double_field_84 = 84;
+  google.protobuf.DoubleValue double_field_14 = 14;
+  google.protobuf.DoubleValue double_field_77 = 77;
+  google.protobuf.DoubleValue double_field_15 = 15;
+  google.protobuf.Int64Value int64_field_19 = 19;
+  google.protobuf.Int64Value int64_field_115 = 115;
+  google.protobuf.DoubleValue double_field_116 = 116;
+  google.protobuf.Int64Value int64_field_117 = 117;
+  google.protobuf.DoubleValue double_field_20 = 20;
+  google.protobuf.DoubleValue double_field_21 = 21;
+  google.protobuf.StringValue string_field_73 = 73;
+  google.protobuf.StringValue string_field_74 = 74;
+  google.protobuf.DoubleValue double_field_22 = 22;
+  google.protobuf.DoubleValue double_field_69 = 69;
+  google.protobuf.DoubleValue double_field_70 = 70;
+  google.protobuf.DoubleValue double_field_71 = 71;
+  google.protobuf.DoubleValue double_field_72 = 72;
+  google.protobuf.DoubleValue double_field_25 = 25;
+  google.protobuf.Int64Value int64_field_26 = 26;
+  google.protobuf.DoubleValue double_field_68 = 68;
+  google.protobuf.DoubleValue double_field_28 = 28;
+  google.protobuf.DoubleValue double_field_106 = 106;
+  google.protobuf.DoubleValue double_field_29 = 29;
+  google.protobuf.DoubleValue double_field_30 = 30;
+  google.protobuf.DoubleValue double_field_101 = 101;
+  google.protobuf.DoubleValue double_field_102 = 102;
+  google.protobuf.DoubleValue double_field_103 = 103;
+  google.protobuf.DoubleValue double_field_104 = 104;
+  google.protobuf.DoubleValue double_field_105 = 105;
+  google.protobuf.DoubleValue double_field_31 = 31;
+  google.protobuf.Int64Value int64_field_32 = 32;
+  google.protobuf.DoubleValue double_field_75 = 75;
+  google.protobuf.DoubleValue double_field_129 = 129;
+  int32 enum_field_80 = 80;
+  int32 enum_field_81 = 81;
+  google.protobuf.Int64Value int64_field_82 = 82;
+  int32 enum_field_83 = 83;
+  google.protobuf.Int64Value int64_field_85 = 85;
+  google.protobuf.Int64Value int64_field_86 = 86;
+  google.protobuf.Int64Value int64_field_87 = 87;
+  google.protobuf.Int64Value int64_field_125 = 125;
+  google.protobuf.Int64Value int64_field_37 = 37;
+  google.protobuf.DoubleValue double_field_38 = 38;
+  google.protobuf.Int64Value interactions = 39;
+  repeated int32 repeated_int_field_100 = 100;
+  google.protobuf.DoubleValue double_field_40 = 40;
+  google.protobuf.Int64Value int64_field_41 = 41;
+  google.protobuf.Int64Value int64_field_126 = 126;
+  google.protobuf.Int64Value int64_field_127 = 127;
+  google.protobuf.DoubleValue double_field_128 = 128;
+  google.protobuf.DoubleValue double_field_109 = 109;
+  google.protobuf.Int64Value int64_field_110 = 110;
+  google.protobuf.DoubleValue double_field_111 = 111;
+  google.protobuf.Int64Value int64_field_112 = 112;
+  google.protobuf.DoubleValue double_field_113 = 113;
+  google.protobuf.Int64Value int64_field_114 = 114;
+  google.protobuf.DoubleValue double_field_42 = 42;
+  google.protobuf.Int64Value int64_field_43 = 43;
+  google.protobuf.Int64Value int64_field_44 = 44;
+  google.protobuf.DoubleValue double_field_45 = 45;
+  google.protobuf.DoubleValue double_field_46 = 46;
+  google.protobuf.DoubleValue double_field_78 = 78;
+  google.protobuf.DoubleValue double_field_88 = 88;
+  google.protobuf.DoubleValue double_field_47 = 47;
+  google.protobuf.DoubleValue double_field_89 = 89;
+  google.protobuf.DoubleValue double_field_48 = 48;
+  google.protobuf.DoubleValue double_field_49 = 49;
+  google.protobuf.DoubleValue double_field_50 = 50;
+  google.protobuf.DoubleValue double_field_90 = 90;
+  google.protobuf.DoubleValue double_field_51 = 51;
+  google.protobuf.DoubleValue double_field_91 = 91;
+  google.protobuf.DoubleValue double_field_92 = 92;
+  google.protobuf.Int64Value int64_field_107 = 107;
+  google.protobuf.DoubleValue double_field_93 = 93;
+  google.protobuf.DoubleValue double_field_108 = 108;
+  google.protobuf.DoubleValue double_field_52 = 52;
+  google.protobuf.DoubleValue double_field_53 = 53;
+  google.protobuf.DoubleValue double_field_94 = 94;
+  google.protobuf.DoubleValue double_field_54 = 54;
+  google.protobuf.DoubleValue double_field_55 = 55;
+  google.protobuf.DoubleValue double_field_56 = 56;
+  google.protobuf.DoubleValue double_field_57 = 57;
+  google.protobuf.DoubleValue double_field_58 = 58;
+  google.protobuf.Int64Value int64_field_59 = 59;
+  google.protobuf.Int64Value int64_field_60 = 60;
+}
+
+// same as ManyWrapperFieldsMessages, but with primitive fields
+// for comparison.
+message ManyPrimitiveFieldsMessage {
+  double double_field_95 = 95;
+  double double_field_1 = 1;
+  double double_field_79 = 79;
+  int64 int64_field_2 = 2;
+  double double_field_96 = 96;
+  int64 int64_field_3 = 3;
+  int64 int64_field_4 = 4;
+  double double_field_97 = 97;
+  double double_field_65 = 65;
+  double double_field_66 = 66;
+  double double_field_7 = 7;
+  double double_field_62 = 62;
+  double double_field_118 = 118;
+  double double_field_119 = 119;
+  double double_field_67 = 67;
+  double double_field_120 = 120;
+  double double_field_121 = 121;
+  double double_field_122 = 122;
+  double double_field_123 = 123;
+  double double_field_124 = 124;
+  double double_field_8 = 8;
+  double double_field_9 = 9;
+  double double_field_98 = 98;
+  double double_field_10 = 10;
+  double double_field_11 = 11;
+  double double_field_99 = 99;
+  double double_field_84 = 84;
+  double double_field_14 = 14;
+  double double_field_77 = 77;
+  double double_field_15 = 15;
+  int64 int64_field_19 = 19;
+  int64 int64_field_115 = 115;
+  double double_field_116 = 116;
+  int64 int64_field_117 = 117;
+  double double_field_20 = 20;
+  double double_field_21 = 21;
+  string string_field_73 = 73;
+  string string_field_74 = 74;
+  double double_field_22 = 22;
+  double double_field_69 = 69;
+  double double_field_70 = 70;
+  double double_field_71 = 71;
+  double double_field_72 = 72;
+  double double_field_25 = 25;
+  int64 int64_field_26 = 26;
+  double double_field_68 = 68;
+  double double_field_28 = 28;
+  double double_field_106 = 106;
+  double double_field_29 = 29;
+  double double_field_30 = 30;
+  double double_field_101 = 101;
+  double double_field_102 = 102;
+  double double_field_103 = 103;
+  double double_field_104 = 104;
+  double double_field_105 = 105;
+  double double_field_31 = 31;
+  int64 int64_field_32 = 32;
+  double double_field_75 = 75;
+  double double_field_129 = 129;
+  int32 enum_field_80 = 80;
+  int32 enum_field_81 = 81;
+  int64 int64_field_82 = 82;
+  int32 enum_field_83 = 83;
+  int64 int64_field_85 = 85;
+  int64 int64_field_86 = 86;
+  int64 int64_field_87 = 87;
+  int64 int64_field_125 = 125;
+  int64 int64_field_37 = 37;
+  double double_field_38 = 38;
+  int64 interactions = 39;
+  repeated int32 repeated_int_field_100 = 100;
+  double double_field_40 = 40;
+  int64 int64_field_41 = 41;
+  int64 int64_field_126 = 126;
+  int64 int64_field_127 = 127;
+  double double_field_128 = 128;
+  double double_field_109 = 109;
+  int64 int64_field_110 = 110;
+  double double_field_111 = 111;
+  int64 int64_field_112 = 112;
+  double double_field_113 = 113;
+  int64 int64_field_114 = 114;
+  double double_field_42 = 42;
+  int64 int64_field_43 = 43;
+  int64 int64_field_44 = 44;
+  double double_field_45 = 45;
+  double double_field_46 = 46;
+  double double_field_78 = 78;
+  double double_field_88 = 88;
+  double double_field_47 = 47;
+  double double_field_89 = 89;
+  double double_field_48 = 48;
+  double double_field_49 = 49;
+  double double_field_50 = 50;
+  double double_field_90 = 90;
+  double double_field_51 = 51;
+  double double_field_91 = 91;
+  double double_field_92 = 92;
+  int64 int64_field_107 = 107;
+  double double_field_93 = 93;
+  double double_field_108 = 108;
+  double double_field_52 = 52;
+  double double_field_53 = 53;
+  double double_field_94 = 94;
+  double double_field_54 = 54;
+  double double_field_55 = 55;
+  double double_field_56 = 56;
+  double double_field_57 = 57;
+  double double_field_58 = 58;
+  int64 int64_field_59 = 59;
+  int64 int64_field_60 = 60;
+}
\ No newline at end of file
diff --git a/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs b/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
index 8a9c3d0..4a425f7 100644
--- a/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
+++ b/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
@@ -386,7 +386,7 @@
         }
 
         [Test]
-        public void UnknownFieldInWrapper()
+        public void UnknownFieldInWrapperInt32FastPath()
         {
             var stream = new MemoryStream();
             var output = new CodedOutputStream(stream);
@@ -395,13 +395,40 @@
             var valueTag = WireFormat.MakeTag(Int32Value.ValueFieldNumber, WireFormat.WireType.Varint);
 
             output.WriteTag(wrapperTag);
-            output.WriteLength(4); // unknownTag + value 5 + valueType + value 6, each 1 byte
+            // Wrapper message is just long enough - 6 bytes - to use the wrapper fast-path.
+            output.WriteLength(6); // unknownTag + value 5 + valueType, each 1 byte, + value 65536, 3 bytes
             output.WriteTag(unknownTag);
             output.WriteInt32((int) valueTag); // Sneakily "pretend" it's a tag when it's really a value
             output.WriteTag(valueTag);
+            output.WriteInt32(65536);
+            
+            output.Flush();
+            Assert.AreEqual(8, stream.Length); // tag (1 byte) + length (1 byte) + message (6 bytes)
+            stream.Position = 0;
+
+            var message = TestWellKnownTypes.Parser.ParseFrom(stream);
+            Assert.AreEqual(65536, message.Int32Field);
+        }
+
+        [Test]
+        public void UnknownFieldInWrapperInt32SlowPath()
+        {
+            var stream = new MemoryStream();
+            var output = new CodedOutputStream(stream);
+            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int32FieldFieldNumber, WireFormat.WireType.LengthDelimited);
+            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
+            var valueTag = WireFormat.MakeTag(Int32Value.ValueFieldNumber, WireFormat.WireType.Varint);
+
+            output.WriteTag(wrapperTag);
+            // Wrapper message is too short to be used on the wrapper fast-path.
+            output.WriteLength(4); // unknownTag + value 5 + valueType + value 6, each 1 byte
+            output.WriteTag(unknownTag);
+            output.WriteInt32((int)valueTag); // Sneakily "pretend" it's a tag when it's really a value
+            output.WriteTag(valueTag);
             output.WriteInt32(6);
 
             output.Flush();
+            Assert.Less(stream.Length, 8); // tag (1 byte) + length (1 byte) + message
             stream.Position = 0;
 
             var message = TestWellKnownTypes.Parser.ParseFrom(stream);
@@ -409,6 +436,56 @@
         }
 
         [Test]
+        public void UnknownFieldInWrapperInt64FastPath()
+        {
+            var stream = new MemoryStream();
+            var output = new CodedOutputStream(stream);
+            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int64FieldFieldNumber, WireFormat.WireType.LengthDelimited);
+            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
+            var valueTag = WireFormat.MakeTag(Int64Value.ValueFieldNumber, WireFormat.WireType.Varint);
+
+            output.WriteTag(wrapperTag);
+            // Wrapper message is just long enough - 10 bytes - to use the wrapper fast-path.
+            output.WriteLength(11); // unknownTag + value 5 + valueType, each 1 byte, + value 0xfffffffffffff, 8 bytes
+            output.WriteTag(unknownTag);
+            output.WriteInt64((int)valueTag); // Sneakily "pretend" it's a tag when it's really a value
+            output.WriteTag(valueTag);
+            output.WriteInt64(0xfffffffffffffL);
+
+            output.Flush();
+            Assert.AreEqual(13, stream.Length); // tag (1 byte) + length (1 byte) + message (11 bytes)
+            stream.Position = 0;
+
+            var message = TestWellKnownTypes.Parser.ParseFrom(stream);
+            Assert.AreEqual(0xfffffffffffffL, message.Int64Field);
+        }
+
+        [Test]
+        public void UnknownFieldInWrapperInt64SlowPath()
+        {
+            var stream = new MemoryStream();
+            var output = new CodedOutputStream(stream);
+            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int64FieldFieldNumber, WireFormat.WireType.LengthDelimited);
+            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
+            var valueTag = WireFormat.MakeTag(Int64Value.ValueFieldNumber, WireFormat.WireType.Varint);
+
+            output.WriteTag(wrapperTag);
+            // Wrapper message is too short to be used on the wrapper fast-path.
+            output.WriteLength(4); // unknownTag + value 5 + valueType + value 6, each 1 byte
+            output.WriteTag(unknownTag);
+            output.WriteInt64((int)valueTag); // Sneakily "pretend" it's a tag when it's really a value
+            output.WriteTag(valueTag);
+            output.WriteInt64(6);
+
+            output.Flush();
+            Assert.Less(stream.Length, 12); // tag (1 byte) + length (1 byte) + message
+            stream.Position = 0;
+
+            var message = TestWellKnownTypes.Parser.ParseFrom(stream);
+            Assert.AreEqual(6L, message.Int64Field);
+        }
+
+        [Test]
         public void ClearWithReflection()
         {
             // String and Bytes are the tricky ones here, as the CLR type of the property
diff --git a/csharp/src/Google.Protobuf/CodedInputStream.cs b/csharp/src/Google.Protobuf/CodedInputStream.cs
index 4d13f88..44934f3 100644
--- a/csharp/src/Google.Protobuf/CodedInputStream.cs
+++ b/csharp/src/Google.Protobuf/CodedInputStream.cs
@@ -481,7 +481,33 @@
         /// </summary>

         public double ReadDouble()

         {

-            return BitConverter.Int64BitsToDouble((long) ReadRawLittleEndian64());

+            if (bufferPos + 8 <= bufferSize)

+            {

+                if (BitConverter.IsLittleEndian)

+                {

+                    var result = BitConverter.ToDouble(buffer, bufferPos);

+                    bufferPos += 8;

+                    return result;

+                }

+                else

+                {

+                    var bytes = new byte[8];

+                    bytes[0] = buffer[bufferPos + 7];

+                    bytes[1] = buffer[bufferPos + 6];

+                    bytes[2] = buffer[bufferPos + 5];

+                    bytes[3] = buffer[bufferPos + 4];

+                    bytes[4] = buffer[bufferPos + 3];

+                    bytes[5] = buffer[bufferPos + 2];

+                    bytes[6] = buffer[bufferPos + 1];

+                    bytes[7] = buffer[bufferPos];

+                    bufferPos += 8;

+                    return BitConverter.ToDouble(bytes, 0);

+                }

+            }

+            else

+            {

+                return BitConverter.Int64BitsToDouble((long)ReadRawLittleEndian64());

+            }

         }

 

         /// <summary>

@@ -711,7 +737,260 @@
             return false;

         }

 

-        #endregion

+        internal static float? ReadFloatWrapperLittleEndian(CodedInputStream input)

+        {

+            // length:1 + tag:1 + value:4 = 6 bytes

+            if (input.bufferPos + 6 <= input.bufferSize)

+            {

+                // The entire wrapper message is already contained in `buffer`.

+                int length = input.buffer[input.bufferPos];

+                if (length == 0)

+                {

+                    input.bufferPos++;

+                    return 0F;

+                }

+                // tag:1 + value:4 = length of 5 bytes

+                // field=1, type=32-bit = tag of 13

+                if (length != 5 || input.buffer[input.bufferPos + 1] != 13)

+                {

+                    return ReadFloatWrapperSlow(input);

+                }

+                var result = BitConverter.ToSingle(input.buffer, input.bufferPos + 2);

+                input.bufferPos += 6;

+                return result;

+            }

+            else

+            {

+                return ReadFloatWrapperSlow(input);

+            }

+        }

+

+        internal static float? ReadFloatWrapperSlow(CodedInputStream input)

+        {

+            int length = input.ReadLength();

+            if (length == 0)

+            {

+                return 0F;

+            }

+            int finalBufferPos = input.totalBytesRetired + input.bufferPos + length;

+            float result = 0F;

+            do

+            {

+                // field=1, type=32-bit = tag of 13

+                if (input.ReadTag() == 13)

+                {

+                    result = input.ReadFloat();

+                }

+                else

+                {

+                    input.SkipLastField();

+                }

+            }

+            while (input.totalBytesRetired + input.bufferPos < finalBufferPos);

+            return result;

+        }

+

+        internal static double? ReadDoubleWrapperLittleEndian(CodedInputStream input)

+        {

+            // length:1 + tag:1 + value:8 = 10 bytes

+            if (input.bufferPos + 10 <= input.bufferSize)

+            {

+                // The entire wrapper message is already contained in `buffer`.

+                int length = input.buffer[input.bufferPos];

+                if (length == 0)

+                {

+                    input.bufferPos++;

+                    return 0D;

+                }

+                // tag:1 + value:8 = length of 9 bytes

+                // field=1, type=64-bit = tag of 9

+                if (length != 9 || input.buffer[input.bufferPos + 1] != 9)

+                {

+                    return ReadDoubleWrapperSlow(input);

+                }

+                var result = BitConverter.ToDouble(input.buffer, input.bufferPos + 2);

+                input.bufferPos += 10;

+                return result;

+            }

+            else

+            {

+                return ReadDoubleWrapperSlow(input);

+            }

+        }

+

+        internal static double? ReadDoubleWrapperSlow(CodedInputStream input)

+        {

+            int length = input.ReadLength();

+            if (length == 0)

+            {

+                return 0D;

+            }

+            int finalBufferPos = input.totalBytesRetired + input.bufferPos + length;

+            double result = 0D;

+            do

+            {

+                // field=1, type=64-bit = tag of 9

+                if (input.ReadTag() == 9)

+                {

+                    result = input.ReadDouble();

+                }

+                else

+                {

+                    input.SkipLastField();

+                }

+            }

+            while (input.totalBytesRetired + input.bufferPos < finalBufferPos);

+            return result;

+        }

+

+        internal static bool? ReadBoolWrapper(CodedInputStream input)

+        {

+            return ReadUInt32Wrapper(input) != 0;

+        }

+

+        internal static uint? ReadUInt32Wrapper(CodedInputStream input)

+        {

+            // length:1 + tag:1 + value:5(varint32-max) = 7 bytes

+            if (input.bufferPos + 7 <= input.bufferSize)

+            {

+                // The entire wrapper message is already contained in `buffer`.

+                int pos0 = input.bufferPos;

+                int length = input.buffer[input.bufferPos++];

+                if (length == 0)

+                {

+                    return 0;

+                }

+                // Length will always fit in a single byte.

+                if (length >= 128)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt32WrapperSlow(input);

+                }

+                int finalBufferPos = input.bufferPos + length;

+                // field=1, type=varint = tag of 8

+                if (input.buffer[input.bufferPos++] != 8)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt32WrapperSlow(input);

+                }

+                var result = input.ReadUInt32();

+                // Verify this message only contained a single field.

+                if (input.bufferPos != finalBufferPos)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt32WrapperSlow(input);

+                }

+                return result;

+            }

+            else

+            {

+                return ReadUInt32WrapperSlow(input);

+            }

+        }

+

+        private static uint? ReadUInt32WrapperSlow(CodedInputStream input)

+        {

+            int length = input.ReadLength();

+            if (length == 0)

+            {

+                return 0;

+            }

+            int finalBufferPos = input.totalBytesRetired + input.bufferPos + length;

+            uint result = 0;

+            do

+            {

+                // field=1, type=varint = tag of 8

+                if (input.ReadTag() == 8)

+                {

+                    result = input.ReadUInt32();

+                }

+                else

+                {

+                    input.SkipLastField();

+                }

+            }

+            while (input.totalBytesRetired + input.bufferPos < finalBufferPos);

+            return result;

+        }

+

+        internal static int? ReadInt32Wrapper(CodedInputStream input)

+        {

+            return (int?)ReadUInt32Wrapper(input);

+        }

+

+        internal static ulong? ReadUInt64Wrapper(CodedInputStream input)

+        {

+            // field=1, type=varint = tag of 8

+            const int expectedTag = 8;

+            // length:1 + tag:1 + value:10(varint64-max) = 12 bytes

+            if (input.bufferPos + 12 <= input.bufferSize)

+            {

+                // The entire wrapper message is already contained in `buffer`.

+                int pos0 = input.bufferPos;

+                int length = input.buffer[input.bufferPos++];

+                if (length == 0)

+                {

+                    return 0L;

+                }

+                // Length will always fit in a single byte.

+                if (length >= 128)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt64WrapperSlow(input);

+                }

+                int finalBufferPos = input.bufferPos + length;

+                if (input.buffer[input.bufferPos++] != expectedTag)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt64WrapperSlow(input);

+                }

+                var result = input.ReadUInt64();

+                // Verify this message only contained a single field.

+                if (input.bufferPos != finalBufferPos)

+                {

+                    input.bufferPos = pos0;

+                    return ReadUInt64WrapperSlow(input);

+                }

+                return result;

+            }

+            else

+            {

+                return ReadUInt64WrapperSlow(input);

+            }

+        }

+

+        internal static ulong? ReadUInt64WrapperSlow(CodedInputStream input)

+        {

+            // field=1, type=varint = tag of 8

+            const int expectedTag = 8;

+            int length = input.ReadLength();

+            if (length == 0)

+            {

+                return 0L;

+            }

+            int finalBufferPos = input.totalBytesRetired + input.bufferPos + length;

+            ulong result = 0L;

+            do

+            {

+                if (input.ReadTag() == expectedTag)

+                {

+                    result = input.ReadUInt64();

+                }

+                else

+                {

+                    input.SkipLastField();

+                }

+            }

+            while (input.totalBytesRetired + input.bufferPos < finalBufferPos);

+            return result;

+        }

+

+        internal static long? ReadInt64Wrapper(CodedInputStream input)

+        {

+            return (long?)ReadUInt64Wrapper(input);

+        }

+

+#endregion

 

         #region Underlying reading primitives

 

@@ -876,17 +1155,42 @@
         /// </summary>

         internal ulong ReadRawVarint64()

         {

-            int shift = 0;

-            ulong result = 0;

-            while (shift < 64)

+            if (bufferPos + 10 <= bufferSize)

             {

-                byte b = ReadRawByte();

-                result |= (ulong) (b & 0x7F) << shift;

-                if ((b & 0x80) == 0)

+                ulong result = buffer[bufferPos++];

+                if (result < 128)

                 {

                     return result;

                 }

-                shift += 7;

+                result &= 0x7f;

+                int shift = 7;

+                do

+                {

+                    byte b = buffer[bufferPos++];

+                    result |= (ulong)(b & 0x7F) << shift;

+                    if (b < 0x80)

+                    {

+                        return result;

+                    }

+                    shift += 7;

+                }

+                while (shift < 64);

+            }

+            else

+            {

+                int shift = 0;

+                ulong result = 0;

+                do

+                {

+                    byte b = ReadRawByte();

+                    result |= (ulong)(b & 0x7F) << shift;

+                    if (b < 0x80)

+                    {

+                        return result;

+                    }

+                    shift += 7;

+                }

+                while (shift < 64);

             }

             throw InvalidProtocolBufferException.MalformedVarint();

         }

@@ -896,11 +1200,32 @@
         /// </summary>

         internal uint ReadRawLittleEndian32()

         {

-            uint b1 = ReadRawByte();

-            uint b2 = ReadRawByte();

-            uint b3 = ReadRawByte();

-            uint b4 = ReadRawByte();

-            return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24);

+            if (bufferPos + 4 <= bufferSize)

+            {

+                if (BitConverter.IsLittleEndian)

+                {

+                    var result = BitConverter.ToUInt32(buffer, bufferPos);

+                    bufferPos += 4;

+                    return result;

+                }

+                else

+                {

+                    uint b1 = buffer[bufferPos];

+                    uint b2 = buffer[bufferPos + 1];

+                    uint b3 = buffer[bufferPos + 2];

+                    uint b4 = buffer[bufferPos + 3];

+                    bufferPos += 4;

+                    return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24);

+                }

+            }

+            else

+            {

+                uint b1 = ReadRawByte();

+                uint b2 = ReadRawByte();

+                uint b3 = ReadRawByte();

+                uint b4 = ReadRawByte();

+                return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24);

+            }

         }

 

         /// <summary>

@@ -908,16 +1233,42 @@
         /// </summary>

         internal ulong ReadRawLittleEndian64()

         {

-            ulong b1 = ReadRawByte();

-            ulong b2 = ReadRawByte();

-            ulong b3 = ReadRawByte();

-            ulong b4 = ReadRawByte();

-            ulong b5 = ReadRawByte();

-            ulong b6 = ReadRawByte();

-            ulong b7 = ReadRawByte();

-            ulong b8 = ReadRawByte();

-            return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24)

-                   | (b5 << 32) | (b6 << 40) | (b7 << 48) | (b8 << 56);

+            if (bufferPos + 8 <= bufferSize)

+            {

+                if (BitConverter.IsLittleEndian)

+                {

+                    var result = BitConverter.ToUInt64(buffer, bufferPos);

+                    bufferPos += 8;

+                    return result;

+                }

+                else

+                {

+                    ulong b1 = buffer[bufferPos];

+                    ulong b2 = buffer[bufferPos + 1];

+                    ulong b3 = buffer[bufferPos + 2];

+                    ulong b4 = buffer[bufferPos + 3];

+                    ulong b5 = buffer[bufferPos + 4];

+                    ulong b6 = buffer[bufferPos + 5];

+                    ulong b7 = buffer[bufferPos + 6];

+                    ulong b8 = buffer[bufferPos + 7];

+                    bufferPos += 8;

+                    return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24)

+                           | (b5 << 32) | (b6 << 40) | (b7 << 48) | (b8 << 56);

+                }

+            }

+            else

+            {

+                ulong b1 = ReadRawByte();

+                ulong b2 = ReadRawByte();

+                ulong b3 = ReadRawByte();

+                ulong b4 = ReadRawByte();

+                ulong b5 = ReadRawByte();

+                ulong b6 = ReadRawByte();

+                ulong b7 = ReadRawByte();

+                ulong b8 = ReadRawByte();

+                return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24)

+                       | (b5 << 32) | (b6 << 40) | (b7 << 48) | (b8 << 56);

+            }

         }

 

         /// <summary>

@@ -1301,6 +1652,6 @@
                 }

             }

         }

-        #endregion

+#endregion

     }

 }
\ No newline at end of file
diff --git a/csharp/src/Google.Protobuf/FieldCodec.cs b/csharp/src/Google.Protobuf/FieldCodec.cs
index 90d3113..fc69444 100644
--- a/csharp/src/Google.Protobuf/FieldCodec.cs
+++ b/csharp/src/Google.Protobuf/FieldCodec.cs
@@ -490,7 +490,7 @@
         {
             var nestedCodec = WrapperCodecs.GetCodec<T>();
             return new FieldCodec<T?>(
-                input => WrapperCodecs.Read<T>(input, nestedCodec),
+                WrapperCodecs.GetReader<T>(),
                 (output, value) => WrapperCodecs.Write<T>(output, value.Value, nestedCodec),
                 (CodedInputStream i, ref T? v) => v = WrapperCodecs.Read<T>(i, nestedCodec),
                 (ref T? v, T? v2) => { if (v2.HasValue) { v = v2; } return v.HasValue; },
@@ -522,6 +522,25 @@
                 { typeof(ByteString), ForBytes(WireFormat.MakeTag(WrappersReflection.WrapperValueFieldNumber, WireFormat.WireType.LengthDelimited)) }
             };
 
+            private static readonly Dictionary<System.Type, object> Readers = new Dictionary<System.Type, object>
+            {
+                // TODO: Provide more optimized readers.
+                { typeof(bool), (Func<CodedInputStream, bool?>)CodedInputStream.ReadBoolWrapper },
+                { typeof(int), (Func<CodedInputStream, int?>)CodedInputStream.ReadInt32Wrapper },
+                { typeof(long), (Func<CodedInputStream, long?>)CodedInputStream.ReadInt64Wrapper },
+                { typeof(uint), (Func<CodedInputStream, uint?>)CodedInputStream.ReadUInt32Wrapper },
+                { typeof(ulong), (Func<CodedInputStream, ulong?>)CodedInputStream.ReadUInt64Wrapper },
+                { typeof(float), BitConverter.IsLittleEndian ?
+                    (Func<CodedInputStream, float?>)CodedInputStream.ReadFloatWrapperLittleEndian :
+                    (Func<CodedInputStream, float?>)CodedInputStream.ReadFloatWrapperSlow },
+                { typeof(double), BitConverter.IsLittleEndian ?
+                    (Func<CodedInputStream, double?>)CodedInputStream.ReadDoubleWrapperLittleEndian :
+                    (Func<CodedInputStream, double?>)CodedInputStream.ReadDoubleWrapperSlow },
+                // `string` and `ByteString` less performance-sensitive. Do not implement for now.
+                { typeof(string), null },
+                { typeof(ByteString), null },
+            };
+
             /// <summary>
             /// Returns a field codec which effectively wraps a value of type T in a message.
             ///
@@ -536,6 +555,23 @@
                 return (FieldCodec<T>) value;
             }
 
+            internal static Func<CodedInputStream, T?> GetReader<T>() where T : struct
+            {
+                object value;
+                if (!Readers.TryGetValue(typeof(T), out value))
+                {
+                    throw new InvalidOperationException("Invalid type argument requested for wrapper reader: " + typeof(T));
+                }
+                if (value == null)
+                {
+                    // Return default unoptimized reader for the wrapper type.
+                    var nestedCoded = GetCodec<T>();
+                    return input => Read<T>(input, nestedCoded);
+                }
+                // Return optimized read for the wrapper type.
+                return (Func<CodedInputStream, T?>)value;
+            }
+
             internal static T Read<T>(CodedInputStream input, FieldCodec<T> codec)
             {
                 int length = input.ReadLength();