// <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
