// <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>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ManyWrapperFieldsMessage> _parser = new pb::MessageParser<ManyWrapperFieldsMessage>(() => new ManyWrapperFieldsMessage());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ManyWrapperFieldsMessage> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ManyWrapperFieldsMessage() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long? Int64Field60 {
      get { return int64Field60_; }
      set {
        int64Field60_ = value;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ManyWrapperFieldsMessage);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      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);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (doubleField1_ != null) {
        _single_doubleField1_codec.WriteTagAndValue(ref output, DoubleField1);
      }
      if (int64Field2_ != null) {
        _single_int64Field2_codec.WriteTagAndValue(ref output, Int64Field2);
      }
      if (int64Field3_ != null) {
        _single_int64Field3_codec.WriteTagAndValue(ref output, Int64Field3);
      }
      if (int64Field4_ != null) {
        _single_int64Field4_codec.WriteTagAndValue(ref output, Int64Field4);
      }
      if (doubleField7_ != null) {
        _single_doubleField7_codec.WriteTagAndValue(ref output, DoubleField7);
      }
      if (doubleField8_ != null) {
        _single_doubleField8_codec.WriteTagAndValue(ref output, DoubleField8);
      }
      if (doubleField9_ != null) {
        _single_doubleField9_codec.WriteTagAndValue(ref output, DoubleField9);
      }
      if (doubleField10_ != null) {
        _single_doubleField10_codec.WriteTagAndValue(ref output, DoubleField10);
      }
      if (doubleField11_ != null) {
        _single_doubleField11_codec.WriteTagAndValue(ref output, DoubleField11);
      }
      if (doubleField14_ != null) {
        _single_doubleField14_codec.WriteTagAndValue(ref output, DoubleField14);
      }
      if (doubleField15_ != null) {
        _single_doubleField15_codec.WriteTagAndValue(ref output, DoubleField15);
      }
      if (int64Field19_ != null) {
        _single_int64Field19_codec.WriteTagAndValue(ref output, Int64Field19);
      }
      if (doubleField20_ != null) {
        _single_doubleField20_codec.WriteTagAndValue(ref output, DoubleField20);
      }
      if (doubleField21_ != null) {
        _single_doubleField21_codec.WriteTagAndValue(ref output, DoubleField21);
      }
      if (doubleField22_ != null) {
        _single_doubleField22_codec.WriteTagAndValue(ref output, DoubleField22);
      }
      if (doubleField25_ != null) {
        _single_doubleField25_codec.WriteTagAndValue(ref output, DoubleField25);
      }
      if (int64Field26_ != null) {
        _single_int64Field26_codec.WriteTagAndValue(ref output, Int64Field26);
      }
      if (doubleField28_ != null) {
        _single_doubleField28_codec.WriteTagAndValue(ref output, DoubleField28);
      }
      if (doubleField29_ != null) {
        _single_doubleField29_codec.WriteTagAndValue(ref output, DoubleField29);
      }
      if (doubleField30_ != null) {
        _single_doubleField30_codec.WriteTagAndValue(ref output, DoubleField30);
      }
      if (doubleField31_ != null) {
        _single_doubleField31_codec.WriteTagAndValue(ref output, DoubleField31);
      }
      if (int64Field32_ != null) {
        _single_int64Field32_codec.WriteTagAndValue(ref output, Int64Field32);
      }
      if (int64Field37_ != null) {
        _single_int64Field37_codec.WriteTagAndValue(ref output, Int64Field37);
      }
      if (doubleField38_ != null) {
        _single_doubleField38_codec.WriteTagAndValue(ref output, DoubleField38);
      }
      if (interactions_ != null) {
        _single_interactions_codec.WriteTagAndValue(ref output, Interactions);
      }
      if (doubleField40_ != null) {
        _single_doubleField40_codec.WriteTagAndValue(ref output, DoubleField40);
      }
      if (int64Field41_ != null) {
        _single_int64Field41_codec.WriteTagAndValue(ref output, Int64Field41);
      }
      if (doubleField42_ != null) {
        _single_doubleField42_codec.WriteTagAndValue(ref output, DoubleField42);
      }
      if (int64Field43_ != null) {
        _single_int64Field43_codec.WriteTagAndValue(ref output, Int64Field43);
      }
      if (int64Field44_ != null) {
        _single_int64Field44_codec.WriteTagAndValue(ref output, Int64Field44);
      }
      if (doubleField45_ != null) {
        _single_doubleField45_codec.WriteTagAndValue(ref output, DoubleField45);
      }
      if (doubleField46_ != null) {
        _single_doubleField46_codec.WriteTagAndValue(ref output, DoubleField46);
      }
      if (doubleField47_ != null) {
        _single_doubleField47_codec.WriteTagAndValue(ref output, DoubleField47);
      }
      if (doubleField48_ != null) {
        _single_doubleField48_codec.WriteTagAndValue(ref output, DoubleField48);
      }
      if (doubleField49_ != null) {
        _single_doubleField49_codec.WriteTagAndValue(ref output, DoubleField49);
      }
      if (doubleField50_ != null) {
        _single_doubleField50_codec.WriteTagAndValue(ref output, DoubleField50);
      }
      if (doubleField51_ != null) {
        _single_doubleField51_codec.WriteTagAndValue(ref output, DoubleField51);
      }
      if (doubleField52_ != null) {
        _single_doubleField52_codec.WriteTagAndValue(ref output, DoubleField52);
      }
      if (doubleField53_ != null) {
        _single_doubleField53_codec.WriteTagAndValue(ref output, DoubleField53);
      }
      if (doubleField54_ != null) {
        _single_doubleField54_codec.WriteTagAndValue(ref output, DoubleField54);
      }
      if (doubleField55_ != null) {
        _single_doubleField55_codec.WriteTagAndValue(ref output, DoubleField55);
      }
      if (doubleField56_ != null) {
        _single_doubleField56_codec.WriteTagAndValue(ref output, DoubleField56);
      }
      if (doubleField57_ != null) {
        _single_doubleField57_codec.WriteTagAndValue(ref output, DoubleField57);
      }
      if (doubleField58_ != null) {
        _single_doubleField58_codec.WriteTagAndValue(ref output, DoubleField58);
      }
      if (int64Field59_ != null) {
        _single_int64Field59_codec.WriteTagAndValue(ref output, Int64Field59);
      }
      if (int64Field60_ != null) {
        _single_int64Field60_codec.WriteTagAndValue(ref output, Int64Field60);
      }
      if (doubleField62_ != null) {
        _single_doubleField62_codec.WriteTagAndValue(ref output, DoubleField62);
      }
      if (doubleField65_ != null) {
        _single_doubleField65_codec.WriteTagAndValue(ref output, DoubleField65);
      }
      if (doubleField66_ != null) {
        _single_doubleField66_codec.WriteTagAndValue(ref output, DoubleField66);
      }
      if (doubleField67_ != null) {
        _single_doubleField67_codec.WriteTagAndValue(ref output, DoubleField67);
      }
      if (doubleField68_ != null) {
        _single_doubleField68_codec.WriteTagAndValue(ref output, DoubleField68);
      }
      if (doubleField69_ != null) {
        _single_doubleField69_codec.WriteTagAndValue(ref output, DoubleField69);
      }
      if (doubleField70_ != null) {
        _single_doubleField70_codec.WriteTagAndValue(ref output, DoubleField70);
      }
      if (doubleField71_ != null) {
        _single_doubleField71_codec.WriteTagAndValue(ref output, DoubleField71);
      }
      if (doubleField72_ != null) {
        _single_doubleField72_codec.WriteTagAndValue(ref output, DoubleField72);
      }
      if (stringField73_ != null) {
        _single_stringField73_codec.WriteTagAndValue(ref output, StringField73);
      }
      if (stringField74_ != null) {
        _single_stringField74_codec.WriteTagAndValue(ref output, StringField74);
      }
      if (doubleField75_ != null) {
        _single_doubleField75_codec.WriteTagAndValue(ref output, DoubleField75);
      }
      if (doubleField77_ != null) {
        _single_doubleField77_codec.WriteTagAndValue(ref output, DoubleField77);
      }
      if (doubleField78_ != null) {
        _single_doubleField78_codec.WriteTagAndValue(ref output, DoubleField78);
      }
      if (doubleField79_ != null) {
        _single_doubleField79_codec.WriteTagAndValue(ref 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(ref output, Int64Field82);
      }
      if (EnumField83 != 0) {
        output.WriteRawTag(152, 5);
        output.WriteInt32(EnumField83);
      }
      if (doubleField84_ != null) {
        _single_doubleField84_codec.WriteTagAndValue(ref output, DoubleField84);
      }
      if (int64Field85_ != null) {
        _single_int64Field85_codec.WriteTagAndValue(ref output, Int64Field85);
      }
      if (int64Field86_ != null) {
        _single_int64Field86_codec.WriteTagAndValue(ref output, Int64Field86);
      }
      if (int64Field87_ != null) {
        _single_int64Field87_codec.WriteTagAndValue(ref output, Int64Field87);
      }
      if (doubleField88_ != null) {
        _single_doubleField88_codec.WriteTagAndValue(ref output, DoubleField88);
      }
      if (doubleField89_ != null) {
        _single_doubleField89_codec.WriteTagAndValue(ref output, DoubleField89);
      }
      if (doubleField90_ != null) {
        _single_doubleField90_codec.WriteTagAndValue(ref output, DoubleField90);
      }
      if (doubleField91_ != null) {
        _single_doubleField91_codec.WriteTagAndValue(ref output, DoubleField91);
      }
      if (doubleField92_ != null) {
        _single_doubleField92_codec.WriteTagAndValue(ref output, DoubleField92);
      }
      if (doubleField93_ != null) {
        _single_doubleField93_codec.WriteTagAndValue(ref output, DoubleField93);
      }
      if (doubleField94_ != null) {
        _single_doubleField94_codec.WriteTagAndValue(ref output, DoubleField94);
      }
      if (doubleField95_ != null) {
        _single_doubleField95_codec.WriteTagAndValue(ref output, DoubleField95);
      }
      if (doubleField96_ != null) {
        _single_doubleField96_codec.WriteTagAndValue(ref output, DoubleField96);
      }
      if (doubleField97_ != null) {
        _single_doubleField97_codec.WriteTagAndValue(ref output, DoubleField97);
      }
      if (doubleField98_ != null) {
        _single_doubleField98_codec.WriteTagAndValue(ref output, DoubleField98);
      }
      if (doubleField99_ != null) {
        _single_doubleField99_codec.WriteTagAndValue(ref output, DoubleField99);
      }
      repeatedIntField100_.WriteTo(ref output, _repeated_repeatedIntField100_codec);
      if (doubleField101_ != null) {
        _single_doubleField101_codec.WriteTagAndValue(ref output, DoubleField101);
      }
      if (doubleField102_ != null) {
        _single_doubleField102_codec.WriteTagAndValue(ref output, DoubleField102);
      }
      if (doubleField103_ != null) {
        _single_doubleField103_codec.WriteTagAndValue(ref output, DoubleField103);
      }
      if (doubleField104_ != null) {
        _single_doubleField104_codec.WriteTagAndValue(ref output, DoubleField104);
      }
      if (doubleField105_ != null) {
        _single_doubleField105_codec.WriteTagAndValue(ref output, DoubleField105);
      }
      if (doubleField106_ != null) {
        _single_doubleField106_codec.WriteTagAndValue(ref output, DoubleField106);
      }
      if (int64Field107_ != null) {
        _single_int64Field107_codec.WriteTagAndValue(ref output, Int64Field107);
      }
      if (doubleField108_ != null) {
        _single_doubleField108_codec.WriteTagAndValue(ref output, DoubleField108);
      }
      if (doubleField109_ != null) {
        _single_doubleField109_codec.WriteTagAndValue(ref output, DoubleField109);
      }
      if (int64Field110_ != null) {
        _single_int64Field110_codec.WriteTagAndValue(ref output, Int64Field110);
      }
      if (doubleField111_ != null) {
        _single_doubleField111_codec.WriteTagAndValue(ref output, DoubleField111);
      }
      if (int64Field112_ != null) {
        _single_int64Field112_codec.WriteTagAndValue(ref output, Int64Field112);
      }
      if (doubleField113_ != null) {
        _single_doubleField113_codec.WriteTagAndValue(ref output, DoubleField113);
      }
      if (int64Field114_ != null) {
        _single_int64Field114_codec.WriteTagAndValue(ref output, Int64Field114);
      }
      if (int64Field115_ != null) {
        _single_int64Field115_codec.WriteTagAndValue(ref output, Int64Field115);
      }
      if (doubleField116_ != null) {
        _single_doubleField116_codec.WriteTagAndValue(ref output, DoubleField116);
      }
      if (int64Field117_ != null) {
        _single_int64Field117_codec.WriteTagAndValue(ref output, Int64Field117);
      }
      if (doubleField118_ != null) {
        _single_doubleField118_codec.WriteTagAndValue(ref output, DoubleField118);
      }
      if (doubleField119_ != null) {
        _single_doubleField119_codec.WriteTagAndValue(ref output, DoubleField119);
      }
      if (doubleField120_ != null) {
        _single_doubleField120_codec.WriteTagAndValue(ref output, DoubleField120);
      }
      if (doubleField121_ != null) {
        _single_doubleField121_codec.WriteTagAndValue(ref output, DoubleField121);
      }
      if (doubleField122_ != null) {
        _single_doubleField122_codec.WriteTagAndValue(ref output, DoubleField122);
      }
      if (doubleField123_ != null) {
        _single_doubleField123_codec.WriteTagAndValue(ref output, DoubleField123);
      }
      if (doubleField124_ != null) {
        _single_doubleField124_codec.WriteTagAndValue(ref output, DoubleField124);
      }
      if (int64Field125_ != null) {
        _single_int64Field125_codec.WriteTagAndValue(ref output, Int64Field125);
      }
      if (int64Field126_ != null) {
        _single_int64Field126_codec.WriteTagAndValue(ref output, Int64Field126);
      }
      if (int64Field127_ != null) {
        _single_int64Field127_codec.WriteTagAndValue(ref output, Int64Field127);
      }
      if (doubleField128_ != null) {
        _single_doubleField128_codec.WriteTagAndValue(ref output, DoubleField128);
      }
      if (doubleField129_ != null) {
        _single_doubleField129_codec.WriteTagAndValue(ref output, DoubleField129);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      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;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            double? value = _single_doubleField1_codec.Read(ref input);
            if (doubleField1_ == null || value != 0D) {
              DoubleField1 = value;
            }
            break;
          }
          case 18: {
            long? value = _single_int64Field2_codec.Read(ref input);
            if (int64Field2_ == null || value != 0L) {
              Int64Field2 = value;
            }
            break;
          }
          case 26: {
            long? value = _single_int64Field3_codec.Read(ref input);
            if (int64Field3_ == null || value != 0L) {
              Int64Field3 = value;
            }
            break;
          }
          case 34: {
            long? value = _single_int64Field4_codec.Read(ref input);
            if (int64Field4_ == null || value != 0L) {
              Int64Field4 = value;
            }
            break;
          }
          case 58: {
            double? value = _single_doubleField7_codec.Read(ref input);
            if (doubleField7_ == null || value != 0D) {
              DoubleField7 = value;
            }
            break;
          }
          case 66: {
            double? value = _single_doubleField8_codec.Read(ref input);
            if (doubleField8_ == null || value != 0D) {
              DoubleField8 = value;
            }
            break;
          }
          case 74: {
            double? value = _single_doubleField9_codec.Read(ref input);
            if (doubleField9_ == null || value != 0D) {
              DoubleField9 = value;
            }
            break;
          }
          case 82: {
            double? value = _single_doubleField10_codec.Read(ref input);
            if (doubleField10_ == null || value != 0D) {
              DoubleField10 = value;
            }
            break;
          }
          case 90: {
            double? value = _single_doubleField11_codec.Read(ref input);
            if (doubleField11_ == null || value != 0D) {
              DoubleField11 = value;
            }
            break;
          }
          case 114: {
            double? value = _single_doubleField14_codec.Read(ref input);
            if (doubleField14_ == null || value != 0D) {
              DoubleField14 = value;
            }
            break;
          }
          case 122: {
            double? value = _single_doubleField15_codec.Read(ref input);
            if (doubleField15_ == null || value != 0D) {
              DoubleField15 = value;
            }
            break;
          }
          case 154: {
            long? value = _single_int64Field19_codec.Read(ref input);
            if (int64Field19_ == null || value != 0L) {
              Int64Field19 = value;
            }
            break;
          }
          case 162: {
            double? value = _single_doubleField20_codec.Read(ref input);
            if (doubleField20_ == null || value != 0D) {
              DoubleField20 = value;
            }
            break;
          }
          case 170: {
            double? value = _single_doubleField21_codec.Read(ref input);
            if (doubleField21_ == null || value != 0D) {
              DoubleField21 = value;
            }
            break;
          }
          case 178: {
            double? value = _single_doubleField22_codec.Read(ref input);
            if (doubleField22_ == null || value != 0D) {
              DoubleField22 = value;
            }
            break;
          }
          case 202: {
            double? value = _single_doubleField25_codec.Read(ref input);
            if (doubleField25_ == null || value != 0D) {
              DoubleField25 = value;
            }
            break;
          }
          case 210: {
            long? value = _single_int64Field26_codec.Read(ref input);
            if (int64Field26_ == null || value != 0L) {
              Int64Field26 = value;
            }
            break;
          }
          case 226: {
            double? value = _single_doubleField28_codec.Read(ref input);
            if (doubleField28_ == null || value != 0D) {
              DoubleField28 = value;
            }
            break;
          }
          case 234: {
            double? value = _single_doubleField29_codec.Read(ref input);
            if (doubleField29_ == null || value != 0D) {
              DoubleField29 = value;
            }
            break;
          }
          case 242: {
            double? value = _single_doubleField30_codec.Read(ref input);
            if (doubleField30_ == null || value != 0D) {
              DoubleField30 = value;
            }
            break;
          }
          case 250: {
            double? value = _single_doubleField31_codec.Read(ref input);
            if (doubleField31_ == null || value != 0D) {
              DoubleField31 = value;
            }
            break;
          }
          case 258: {
            long? value = _single_int64Field32_codec.Read(ref input);
            if (int64Field32_ == null || value != 0L) {
              Int64Field32 = value;
            }
            break;
          }
          case 298: {
            long? value = _single_int64Field37_codec.Read(ref input);
            if (int64Field37_ == null || value != 0L) {
              Int64Field37 = value;
            }
            break;
          }
          case 306: {
            double? value = _single_doubleField38_codec.Read(ref input);
            if (doubleField38_ == null || value != 0D) {
              DoubleField38 = value;
            }
            break;
          }
          case 314: {
            long? value = _single_interactions_codec.Read(ref input);
            if (interactions_ == null || value != 0L) {
              Interactions = value;
            }
            break;
          }
          case 322: {
            double? value = _single_doubleField40_codec.Read(ref input);
            if (doubleField40_ == null || value != 0D) {
              DoubleField40 = value;
            }
            break;
          }
          case 330: {
            long? value = _single_int64Field41_codec.Read(ref input);
            if (int64Field41_ == null || value != 0L) {
              Int64Field41 = value;
            }
            break;
          }
          case 338: {
            double? value = _single_doubleField42_codec.Read(ref input);
            if (doubleField42_ == null || value != 0D) {
              DoubleField42 = value;
            }
            break;
          }
          case 346: {
            long? value = _single_int64Field43_codec.Read(ref input);
            if (int64Field43_ == null || value != 0L) {
              Int64Field43 = value;
            }
            break;
          }
          case 354: {
            long? value = _single_int64Field44_codec.Read(ref input);
            if (int64Field44_ == null || value != 0L) {
              Int64Field44 = value;
            }
            break;
          }
          case 362: {
            double? value = _single_doubleField45_codec.Read(ref input);
            if (doubleField45_ == null || value != 0D) {
              DoubleField45 = value;
            }
            break;
          }
          case 370: {
            double? value = _single_doubleField46_codec.Read(ref input);
            if (doubleField46_ == null || value != 0D) {
              DoubleField46 = value;
            }
            break;
          }
          case 378: {
            double? value = _single_doubleField47_codec.Read(ref input);
            if (doubleField47_ == null || value != 0D) {
              DoubleField47 = value;
            }
            break;
          }
          case 386: {
            double? value = _single_doubleField48_codec.Read(ref input);
            if (doubleField48_ == null || value != 0D) {
              DoubleField48 = value;
            }
            break;
          }
          case 394: {
            double? value = _single_doubleField49_codec.Read(ref input);
            if (doubleField49_ == null || value != 0D) {
              DoubleField49 = value;
            }
            break;
          }
          case 402: {
            double? value = _single_doubleField50_codec.Read(ref input);
            if (doubleField50_ == null || value != 0D) {
              DoubleField50 = value;
            }
            break;
          }
          case 410: {
            double? value = _single_doubleField51_codec.Read(ref input);
            if (doubleField51_ == null || value != 0D) {
              DoubleField51 = value;
            }
            break;
          }
          case 418: {
            double? value = _single_doubleField52_codec.Read(ref input);
            if (doubleField52_ == null || value != 0D) {
              DoubleField52 = value;
            }
            break;
          }
          case 426: {
            double? value = _single_doubleField53_codec.Read(ref input);
            if (doubleField53_ == null || value != 0D) {
              DoubleField53 = value;
            }
            break;
          }
          case 434: {
            double? value = _single_doubleField54_codec.Read(ref input);
            if (doubleField54_ == null || value != 0D) {
              DoubleField54 = value;
            }
            break;
          }
          case 442: {
            double? value = _single_doubleField55_codec.Read(ref input);
            if (doubleField55_ == null || value != 0D) {
              DoubleField55 = value;
            }
            break;
          }
          case 450: {
            double? value = _single_doubleField56_codec.Read(ref input);
            if (doubleField56_ == null || value != 0D) {
              DoubleField56 = value;
            }
            break;
          }
          case 458: {
            double? value = _single_doubleField57_codec.Read(ref input);
            if (doubleField57_ == null || value != 0D) {
              DoubleField57 = value;
            }
            break;
          }
          case 466: {
            double? value = _single_doubleField58_codec.Read(ref input);
            if (doubleField58_ == null || value != 0D) {
              DoubleField58 = value;
            }
            break;
          }
          case 474: {
            long? value = _single_int64Field59_codec.Read(ref input);
            if (int64Field59_ == null || value != 0L) {
              Int64Field59 = value;
            }
            break;
          }
          case 482: {
            long? value = _single_int64Field60_codec.Read(ref input);
            if (int64Field60_ == null || value != 0L) {
              Int64Field60 = value;
            }
            break;
          }
          case 498: {
            double? value = _single_doubleField62_codec.Read(ref input);
            if (doubleField62_ == null || value != 0D) {
              DoubleField62 = value;
            }
            break;
          }
          case 522: {
            double? value = _single_doubleField65_codec.Read(ref input);
            if (doubleField65_ == null || value != 0D) {
              DoubleField65 = value;
            }
            break;
          }
          case 530: {
            double? value = _single_doubleField66_codec.Read(ref input);
            if (doubleField66_ == null || value != 0D) {
              DoubleField66 = value;
            }
            break;
          }
          case 538: {
            double? value = _single_doubleField67_codec.Read(ref input);
            if (doubleField67_ == null || value != 0D) {
              DoubleField67 = value;
            }
            break;
          }
          case 546: {
            double? value = _single_doubleField68_codec.Read(ref input);
            if (doubleField68_ == null || value != 0D) {
              DoubleField68 = value;
            }
            break;
          }
          case 554: {
            double? value = _single_doubleField69_codec.Read(ref input);
            if (doubleField69_ == null || value != 0D) {
              DoubleField69 = value;
            }
            break;
          }
          case 562: {
            double? value = _single_doubleField70_codec.Read(ref input);
            if (doubleField70_ == null || value != 0D) {
              DoubleField70 = value;
            }
            break;
          }
          case 570: {
            double? value = _single_doubleField71_codec.Read(ref input);
            if (doubleField71_ == null || value != 0D) {
              DoubleField71 = value;
            }
            break;
          }
          case 578: {
            double? value = _single_doubleField72_codec.Read(ref input);
            if (doubleField72_ == null || value != 0D) {
              DoubleField72 = value;
            }
            break;
          }
          case 586: {
            string value = _single_stringField73_codec.Read(ref input);
            if (stringField73_ == null || value != "") {
              StringField73 = value;
            }
            break;
          }
          case 594: {
            string value = _single_stringField74_codec.Read(ref input);
            if (stringField74_ == null || value != "") {
              StringField74 = value;
            }
            break;
          }
          case 602: {
            double? value = _single_doubleField75_codec.Read(ref input);
            if (doubleField75_ == null || value != 0D) {
              DoubleField75 = value;
            }
            break;
          }
          case 618: {
            double? value = _single_doubleField77_codec.Read(ref input);
            if (doubleField77_ == null || value != 0D) {
              DoubleField77 = value;
            }
            break;
          }
          case 626: {
            double? value = _single_doubleField78_codec.Read(ref input);
            if (doubleField78_ == null || value != 0D) {
              DoubleField78 = value;
            }
            break;
          }
          case 634: {
            double? value = _single_doubleField79_codec.Read(ref 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(ref input);
            if (int64Field82_ == null || value != 0L) {
              Int64Field82 = value;
            }
            break;
          }
          case 664: {
            EnumField83 = input.ReadInt32();
            break;
          }
          case 674: {
            double? value = _single_doubleField84_codec.Read(ref input);
            if (doubleField84_ == null || value != 0D) {
              DoubleField84 = value;
            }
            break;
          }
          case 682: {
            long? value = _single_int64Field85_codec.Read(ref input);
            if (int64Field85_ == null || value != 0L) {
              Int64Field85 = value;
            }
            break;
          }
          case 690: {
            long? value = _single_int64Field86_codec.Read(ref input);
            if (int64Field86_ == null || value != 0L) {
              Int64Field86 = value;
            }
            break;
          }
          case 698: {
            long? value = _single_int64Field87_codec.Read(ref input);
            if (int64Field87_ == null || value != 0L) {
              Int64Field87 = value;
            }
            break;
          }
          case 706: {
            double? value = _single_doubleField88_codec.Read(ref input);
            if (doubleField88_ == null || value != 0D) {
              DoubleField88 = value;
            }
            break;
          }
          case 714: {
            double? value = _single_doubleField89_codec.Read(ref input);
            if (doubleField89_ == null || value != 0D) {
              DoubleField89 = value;
            }
            break;
          }
          case 722: {
            double? value = _single_doubleField90_codec.Read(ref input);
            if (doubleField90_ == null || value != 0D) {
              DoubleField90 = value;
            }
            break;
          }
          case 730: {
            double? value = _single_doubleField91_codec.Read(ref input);
            if (doubleField91_ == null || value != 0D) {
              DoubleField91 = value;
            }
            break;
          }
          case 738: {
            double? value = _single_doubleField92_codec.Read(ref input);
            if (doubleField92_ == null || value != 0D) {
              DoubleField92 = value;
            }
            break;
          }
          case 746: {
            double? value = _single_doubleField93_codec.Read(ref input);
            if (doubleField93_ == null || value != 0D) {
              DoubleField93 = value;
            }
            break;
          }
          case 754: {
            double? value = _single_doubleField94_codec.Read(ref input);
            if (doubleField94_ == null || value != 0D) {
              DoubleField94 = value;
            }
            break;
          }
          case 762: {
            double? value = _single_doubleField95_codec.Read(ref input);
            if (doubleField95_ == null || value != 0D) {
              DoubleField95 = value;
            }
            break;
          }
          case 770: {
            double? value = _single_doubleField96_codec.Read(ref input);
            if (doubleField96_ == null || value != 0D) {
              DoubleField96 = value;
            }
            break;
          }
          case 778: {
            double? value = _single_doubleField97_codec.Read(ref input);
            if (doubleField97_ == null || value != 0D) {
              DoubleField97 = value;
            }
            break;
          }
          case 786: {
            double? value = _single_doubleField98_codec.Read(ref input);
            if (doubleField98_ == null || value != 0D) {
              DoubleField98 = value;
            }
            break;
          }
          case 794: {
            double? value = _single_doubleField99_codec.Read(ref input);
            if (doubleField99_ == null || value != 0D) {
              DoubleField99 = value;
            }
            break;
          }
          case 802:
          case 800: {
            repeatedIntField100_.AddEntriesFrom(ref input, _repeated_repeatedIntField100_codec);
            break;
          }
          case 810: {
            double? value = _single_doubleField101_codec.Read(ref input);
            if (doubleField101_ == null || value != 0D) {
              DoubleField101 = value;
            }
            break;
          }
          case 818: {
            double? value = _single_doubleField102_codec.Read(ref input);
            if (doubleField102_ == null || value != 0D) {
              DoubleField102 = value;
            }
            break;
          }
          case 826: {
            double? value = _single_doubleField103_codec.Read(ref input);
            if (doubleField103_ == null || value != 0D) {
              DoubleField103 = value;
            }
            break;
          }
          case 834: {
            double? value = _single_doubleField104_codec.Read(ref input);
            if (doubleField104_ == null || value != 0D) {
              DoubleField104 = value;
            }
            break;
          }
          case 842: {
            double? value = _single_doubleField105_codec.Read(ref input);
            if (doubleField105_ == null || value != 0D) {
              DoubleField105 = value;
            }
            break;
          }
          case 850: {
            double? value = _single_doubleField106_codec.Read(ref input);
            if (doubleField106_ == null || value != 0D) {
              DoubleField106 = value;
            }
            break;
          }
          case 858: {
            long? value = _single_int64Field107_codec.Read(ref input);
            if (int64Field107_ == null || value != 0L) {
              Int64Field107 = value;
            }
            break;
          }
          case 866: {
            double? value = _single_doubleField108_codec.Read(ref input);
            if (doubleField108_ == null || value != 0D) {
              DoubleField108 = value;
            }
            break;
          }
          case 874: {
            double? value = _single_doubleField109_codec.Read(ref input);
            if (doubleField109_ == null || value != 0D) {
              DoubleField109 = value;
            }
            break;
          }
          case 882: {
            long? value = _single_int64Field110_codec.Read(ref input);
            if (int64Field110_ == null || value != 0L) {
              Int64Field110 = value;
            }
            break;
          }
          case 890: {
            double? value = _single_doubleField111_codec.Read(ref input);
            if (doubleField111_ == null || value != 0D) {
              DoubleField111 = value;
            }
            break;
          }
          case 898: {
            long? value = _single_int64Field112_codec.Read(ref input);
            if (int64Field112_ == null || value != 0L) {
              Int64Field112 = value;
            }
            break;
          }
          case 906: {
            double? value = _single_doubleField113_codec.Read(ref input);
            if (doubleField113_ == null || value != 0D) {
              DoubleField113 = value;
            }
            break;
          }
          case 914: {
            long? value = _single_int64Field114_codec.Read(ref input);
            if (int64Field114_ == null || value != 0L) {
              Int64Field114 = value;
            }
            break;
          }
          case 922: {
            long? value = _single_int64Field115_codec.Read(ref input);
            if (int64Field115_ == null || value != 0L) {
              Int64Field115 = value;
            }
            break;
          }
          case 930: {
            double? value = _single_doubleField116_codec.Read(ref input);
            if (doubleField116_ == null || value != 0D) {
              DoubleField116 = value;
            }
            break;
          }
          case 938: {
            long? value = _single_int64Field117_codec.Read(ref input);
            if (int64Field117_ == null || value != 0L) {
              Int64Field117 = value;
            }
            break;
          }
          case 946: {
            double? value = _single_doubleField118_codec.Read(ref input);
            if (doubleField118_ == null || value != 0D) {
              DoubleField118 = value;
            }
            break;
          }
          case 954: {
            double? value = _single_doubleField119_codec.Read(ref input);
            if (doubleField119_ == null || value != 0D) {
              DoubleField119 = value;
            }
            break;
          }
          case 962: {
            double? value = _single_doubleField120_codec.Read(ref input);
            if (doubleField120_ == null || value != 0D) {
              DoubleField120 = value;
            }
            break;
          }
          case 970: {
            double? value = _single_doubleField121_codec.Read(ref input);
            if (doubleField121_ == null || value != 0D) {
              DoubleField121 = value;
            }
            break;
          }
          case 978: {
            double? value = _single_doubleField122_codec.Read(ref input);
            if (doubleField122_ == null || value != 0D) {
              DoubleField122 = value;
            }
            break;
          }
          case 986: {
            double? value = _single_doubleField123_codec.Read(ref input);
            if (doubleField123_ == null || value != 0D) {
              DoubleField123 = value;
            }
            break;
          }
          case 994: {
            double? value = _single_doubleField124_codec.Read(ref input);
            if (doubleField124_ == null || value != 0D) {
              DoubleField124 = value;
            }
            break;
          }
          case 1002: {
            long? value = _single_int64Field125_codec.Read(ref input);
            if (int64Field125_ == null || value != 0L) {
              Int64Field125 = value;
            }
            break;
          }
          case 1010: {
            long? value = _single_int64Field126_codec.Read(ref input);
            if (int64Field126_ == null || value != 0L) {
              Int64Field126 = value;
            }
            break;
          }
          case 1018: {
            long? value = _single_int64Field127_codec.Read(ref input);
            if (int64Field127_ == null || value != 0L) {
              Int64Field127 = value;
            }
            break;
          }
          case 1026: {
            double? value = _single_doubleField128_codec.Read(ref input);
            if (doubleField128_ == null || value != 0D) {
              DoubleField128 = value;
            }
            break;
          }
          case 1034: {
            double? value = _single_doubleField129_codec.Read(ref input);
            if (doubleField129_ == null || value != 0D) {
              DoubleField129 = value;
            }
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// same as ManyWrapperFieldsMessages, but with primitive fields
  /// for comparison.
  /// </summary>
  public sealed partial class ManyPrimitiveFieldsMessage : pb::IMessage<ManyPrimitiveFieldsMessage>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ManyPrimitiveFieldsMessage> _parser = new pb::MessageParser<ManyPrimitiveFieldsMessage>(() => new ManyPrimitiveFieldsMessage());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ManyPrimitiveFieldsMessage> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ManyPrimitiveFieldsMessage() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long Int64Field60 {
      get { return int64Field60_; }
      set {
        int64Field60_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ManyPrimitiveFieldsMessage);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      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);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext 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(ref 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(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    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]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      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;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref 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(ref 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;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code
