// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: google/protobuf/unittest_well_known_types.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.TestProtos {

  /// <summary>Holder for reflection information generated from google/protobuf/unittest_well_known_types.proto</summary>
  public static partial class UnittestWellKnownTypesReflection {

    #region Descriptor
    /// <summary>File descriptor for google/protobuf/unittest_well_known_types.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static UnittestWellKnownTypesReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "Ci9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfd2VsbF9rbm93bl90eXBlcy5w",
            "cm90bxIRcHJvdG9idWZfdW5pdHRlc3QaGWdvb2dsZS9wcm90b2J1Zi9hbnku",
            "cHJvdG8aGWdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8aHmdvb2dsZS9wcm90",
            "b2J1Zi9kdXJhdGlvbi5wcm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBy",
            "b3RvGiBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90bxokZ29vZ2xl",
            "L3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvGhxnb29nbGUvcHJvdG9i",
            "dWYvc3RydWN0LnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBy",
            "b3RvGhpnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bxoeZ29vZ2xlL3Byb3Rv",
            "YnVmL3dyYXBwZXJzLnByb3RvIr4HChJUZXN0V2VsbEtub3duVHlwZXMSJwoJ",
            "YW55X2ZpZWxkGAEgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRInCglhcGlf",
            "ZmllbGQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQXBpEjEKDmR1cmF0aW9u",
            "X2ZpZWxkGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEisKC2Vt",
            "cHR5X2ZpZWxkGAQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EjQKEGZp",
            "ZWxkX21hc2tfZmllbGQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRN",
            "YXNrEjwKFHNvdXJjZV9jb250ZXh0X2ZpZWxkGAYgASgLMh4uZ29vZ2xlLnBy",
            "b3RvYnVmLlNvdXJjZUNvbnRleHQSLQoMc3RydWN0X2ZpZWxkGAcgASgLMhcu",
            "Z29vZ2xlLnByb3RvYnVmLlN0cnVjdBIzCg90aW1lc3RhbXBfZmllbGQYCCAB",
            "KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEikKCnR5cGVfZmllbGQY",
            "CSABKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZRIyCgxkb3VibGVfZmllbGQY",
            "CiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMAoLZmxvYXRf",
            "ZmllbGQYCyABKAsyGy5nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZRIwCgtp",
            "bnQ2NF9maWVsZBgMIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVl",
            "EjIKDHVpbnQ2NF9maWVsZBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50",
            "NjRWYWx1ZRIwCgtpbnQzMl9maWVsZBgOIAEoCzIbLmdvb2dsZS5wcm90b2J1",
            "Zi5JbnQzMlZhbHVlEjIKDHVpbnQzMl9maWVsZBgPIAEoCzIcLmdvb2dsZS5w",
            "cm90b2J1Zi5VSW50MzJWYWx1ZRIuCgpib29sX2ZpZWxkGBAgASgLMhouZ29v",
            "Z2xlLnByb3RvYnVmLkJvb2xWYWx1ZRIyCgxzdHJpbmdfZmllbGQYESABKAsy",
            "HC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSMAoLYnl0ZXNfZmllbGQY",
            "EiABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZRIrCgt2YWx1ZV9m",
            "aWVsZBgTIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSKVBwoWUmVwZWF0",
            "ZWRXZWxsS25vd25UeXBlcxInCglhbnlfZmllbGQYASADKAsyFC5nb29nbGUu",
            "cHJvdG9idWYuQW55EicKCWFwaV9maWVsZBgCIAMoCzIULmdvb2dsZS5wcm90",
            "b2J1Zi5BcGkSMQoOZHVyYXRpb25fZmllbGQYAyADKAsyGS5nb29nbGUucHJv",
            "dG9idWYuRHVyYXRpb24SKwoLZW1wdHlfZmllbGQYBCADKAsyFi5nb29nbGUu",
            "cHJvdG9idWYuRW1wdHkSNAoQZmllbGRfbWFza19maWVsZBgFIAMoCzIaLmdv",
            "b2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sSPAoUc291cmNlX2NvbnRleHRfZmll",
            "bGQYBiADKAsyHi5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dBItCgxz",
            "dHJ1Y3RfZmllbGQYByADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMK",
            "D3RpbWVzdGFtcF9maWVsZBgIIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
            "c3RhbXASKQoKdHlwZV9maWVsZBgJIAMoCzIVLmdvb2dsZS5wcm90b2J1Zi5U",
            "eXBlEjIKDGRvdWJsZV9maWVsZBgKIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5E",
            "b3VibGVWYWx1ZRIwCgtmbG9hdF9maWVsZBgLIAMoCzIbLmdvb2dsZS5wcm90",
            "b2J1Zi5GbG9hdFZhbHVlEjAKC2ludDY0X2ZpZWxkGAwgAygLMhsuZ29vZ2xl",
            "LnByb3RvYnVmLkludDY0VmFsdWUSMgoMdWludDY0X2ZpZWxkGA0gAygLMhwu",
            "Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEjAKC2ludDMyX2ZpZWxkGA4g",
            "AygLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSMgoMdWludDMyX2Zp",
            "ZWxkGA8gAygLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlEi4KCmJv",
            "b2xfZmllbGQYECADKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjIK",
            "DHN0cmluZ19maWVsZBgRIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdW",
            "YWx1ZRIwCgtieXRlc19maWVsZBgSIAMoCzIbLmdvb2dsZS5wcm90b2J1Zi5C",
            "eXRlc1ZhbHVlIsUHChNPbmVvZldlbGxLbm93blR5cGVzEikKCWFueV9maWVs",
            "ZBgBIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABIpCglhcGlfZmllbGQY",
            "AiABKAsyFC5nb29nbGUucHJvdG9idWYuQXBpSAASMwoOZHVyYXRpb25fZmll",
            "bGQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25IABItCgtlbXB0",
            "eV9maWVsZBgEIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjYKEGZp",
            "ZWxkX21hc2tfZmllbGQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRN",
            "YXNrSAASPgoUc291cmNlX2NvbnRleHRfZmllbGQYBiABKAsyHi5nb29nbGUu",
            "cHJvdG9idWYuU291cmNlQ29udGV4dEgAEi8KDHN0cnVjdF9maWVsZBgHIAEo",
            "CzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIABI1Cg90aW1lc3RhbXBfZmll",
            "bGQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASKwoKdHlw",
            "ZV9maWVsZBgJIAEoCzIVLmdvb2dsZS5wcm90b2J1Zi5UeXBlSAASNAoMZG91",
            "YmxlX2ZpZWxkGAogASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVl",
            "SAASMgoLZmxvYXRfZmllbGQYCyABKAsyGy5nb29nbGUucHJvdG9idWYuRmxv",
            "YXRWYWx1ZUgAEjIKC2ludDY0X2ZpZWxkGAwgASgLMhsuZ29vZ2xlLnByb3Rv",
            "YnVmLkludDY0VmFsdWVIABI0Cgx1aW50NjRfZmllbGQYDSABKAsyHC5nb29n",
            "bGUucHJvdG9idWYuVUludDY0VmFsdWVIABIyCgtpbnQzMl9maWVsZBgOIAEo",
            "CzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlSAASNAoMdWludDMyX2Zp",
            "ZWxkGA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlSAASMAoK",
            "Ym9vbF9maWVsZBgQIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVI",
            "ABI0CgxzdHJpbmdfZmllbGQYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3Ry",
            "aW5nVmFsdWVIABIyCgtieXRlc19maWVsZBgSIAEoCzIbLmdvb2dsZS5wcm90",
            "b2J1Zi5CeXRlc1ZhbHVlSABCDQoLb25lb2ZfZmllbGQilhYKEU1hcFdlbGxL",
            "bm93blR5cGVzEkUKCWFueV9maWVsZBgBIAMoCzIyLnByb3RvYnVmX3VuaXR0",
            "ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkFueUZpZWxkRW50cnkSRQoJYXBpX2Zp",
            "ZWxkGAIgAygLMjIucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlw",
            "ZXMuQXBpRmllbGRFbnRyeRJPCg5kdXJhdGlvbl9maWVsZBgDIAMoCzI3LnBy",
            "b3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkR1cmF0aW9uRmll",
            "bGRFbnRyeRJJCgtlbXB0eV9maWVsZBgEIAMoCzI0LnByb3RvYnVmX3VuaXR0",
            "ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkVtcHR5RmllbGRFbnRyeRJSChBmaWVs",
            "ZF9tYXNrX2ZpZWxkGAUgAygLMjgucHJvdG9idWZfdW5pdHRlc3QuTWFwV2Vs",
            "bEtub3duVHlwZXMuRmllbGRNYXNrRmllbGRFbnRyeRJaChRzb3VyY2VfY29u",
            "dGV4dF9maWVsZBgGIAMoCzI8LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxL",
            "bm93blR5cGVzLlNvdXJjZUNvbnRleHRGaWVsZEVudHJ5EksKDHN0cnVjdF9m",
            "aWVsZBgHIAMoCzI1LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5",
            "cGVzLlN0cnVjdEZpZWxkRW50cnkSUQoPdGltZXN0YW1wX2ZpZWxkGAggAygL",
            "MjgucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVGltZXN0",
            "YW1wRmllbGRFbnRyeRJHCgp0eXBlX2ZpZWxkGAkgAygLMjMucHJvdG9idWZf",
            "dW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVHlwZUZpZWxkRW50cnkSSwoM",
            "ZG91YmxlX2ZpZWxkGAogAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2Vs",
            "bEtub3duVHlwZXMuRG91YmxlRmllbGRFbnRyeRJJCgtmbG9hdF9maWVsZBgL",
            "IAMoCzI0LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkZs",
            "b2F0RmllbGRFbnRyeRJJCgtpbnQ2NF9maWVsZBgMIAMoCzI0LnByb3RvYnVm",
            "X3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkludDY0RmllbGRFbnRyeRJL",
            "Cgx1aW50NjRfZmllbGQYDSADKAsyNS5wcm90b2J1Zl91bml0dGVzdC5NYXBX",
            "ZWxsS25vd25UeXBlcy5VaW50NjRGaWVsZEVudHJ5EkkKC2ludDMyX2ZpZWxk",
            "GA4gAygLMjQucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMu",
            "SW50MzJGaWVsZEVudHJ5EksKDHVpbnQzMl9maWVsZBgPIAMoCzI1LnByb3Rv",
            "YnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLlVpbnQzMkZpZWxkRW50",
            "cnkSRwoKYm9vbF9maWVsZBgQIAMoCzIzLnByb3RvYnVmX3VuaXR0ZXN0Lk1h",
            "cFdlbGxLbm93blR5cGVzLkJvb2xGaWVsZEVudHJ5EksKDHN0cmluZ19maWVs",
            "ZBgRIAMoCzI1LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVz",
            "LlN0cmluZ0ZpZWxkRW50cnkSSQoLYnl0ZXNfZmllbGQYEiADKAsyNC5wcm90",
            "b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5CeXRlc0ZpZWxkRW50",
            "cnkaRQoNQW55RmllbGRFbnRyeRILCgNrZXkYASABKAUSIwoFdmFsdWUYAiAB",
            "KAsyFC5nb29nbGUucHJvdG9idWYuQW55OgI4ARpFCg1BcGlGaWVsZEVudHJ5",
            "EgsKA2tleRgBIAEoBRIjCgV2YWx1ZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1",
            "Zi5BcGk6AjgBGk8KEkR1cmF0aW9uRmllbGRFbnRyeRILCgNrZXkYASABKAUS",
            "KAoFdmFsdWUYAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb246AjgB",
            "GkkKD0VtcHR5RmllbGRFbnRyeRILCgNrZXkYASABKAUSJQoFdmFsdWUYAiAB",
            "KAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHk6AjgBGlEKE0ZpZWxkTWFza0Zp",
            "ZWxkRW50cnkSCwoDa2V5GAEgASgFEikKBXZhbHVlGAIgASgLMhouZ29vZ2xl",
            "LnByb3RvYnVmLkZpZWxkTWFzazoCOAEaWQoXU291cmNlQ29udGV4dEZpZWxk",
            "RW50cnkSCwoDa2V5GAEgASgFEi0KBXZhbHVlGAIgASgLMh4uZ29vZ2xlLnBy",
            "b3RvYnVmLlNvdXJjZUNvbnRleHQ6AjgBGksKEFN0cnVjdEZpZWxkRW50cnkS",
            "CwoDa2V5GAEgASgFEiYKBXZhbHVlGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVm",
            "LlN0cnVjdDoCOAEaUQoTVGltZXN0YW1wRmllbGRFbnRyeRILCgNrZXkYASAB",
            "KAUSKQoFdmFsdWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w",
            "OgI4ARpHCg5UeXBlRmllbGRFbnRyeRILCgNrZXkYASABKAUSJAoFdmFsdWUY",
            "AiABKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZToCOAEaUAoQRG91YmxlRmll",
            "bGRFbnRyeRILCgNrZXkYASABKAUSKwoFdmFsdWUYAiABKAsyHC5nb29nbGUu",
            "cHJvdG9idWYuRG91YmxlVmFsdWU6AjgBGk4KD0Zsb2F0RmllbGRFbnRyeRIL",
            "CgNrZXkYASABKAUSKgoFdmFsdWUYAiABKAsyGy5nb29nbGUucHJvdG9idWYu",
            "RmxvYXRWYWx1ZToCOAEaTgoPSW50NjRGaWVsZEVudHJ5EgsKA2tleRgBIAEo",
            "BRIqCgV2YWx1ZRgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVl",
            "OgI4ARpQChBVaW50NjRGaWVsZEVudHJ5EgsKA2tleRgBIAEoBRIrCgV2YWx1",
            "ZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZToCOAEaTgoP",
            "SW50MzJGaWVsZEVudHJ5EgsKA2tleRgBIAEoBRIqCgV2YWx1ZRgCIAEoCzIb",
            "Lmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlOgI4ARpQChBVaW50MzJGaWVs",
            "ZEVudHJ5EgsKA2tleRgBIAEoBRIrCgV2YWx1ZRgCIAEoCzIcLmdvb2dsZS5w",
            "cm90b2J1Zi5VSW50MzJWYWx1ZToCOAEaTAoOQm9vbEZpZWxkRW50cnkSCwoD",
            "a2V5GAEgASgFEikKBXZhbHVlGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJv",
            "b2xWYWx1ZToCOAEaUAoQU3RyaW5nRmllbGRFbnRyeRILCgNrZXkYASABKAUS",
            "KwoFdmFsdWUYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWU6",
            "AjgBGk4KD0J5dGVzRmllbGRFbnRyeRILCgNrZXkYASABKAUSKgoFdmFsdWUY",
            "AiABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZToCOAFCOQoYY29t",
            "Lmdvb2dsZS5wcm90b2J1Zi50ZXN0UAGqAhpHb29nbGUuUHJvdG9idWYuVGVz",
            "dFByb3Rvc2IGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.AnyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.ApiReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.DurationReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.FieldMaskReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.SourceContextReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TypeReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestWellKnownTypes), global::Google.Protobuf.TestProtos.TestWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField", "ValueField" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.RepeatedWellKnownTypes), global::Google.Protobuf.TestProtos.RepeatedWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.OneofWellKnownTypes), global::Google.Protobuf.TestProtos.OneofWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, new[]{ "OneofField" }, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.MapWellKnownTypes), global::Google.Protobuf.TestProtos.MapWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, })
          }));
    }
    #endregion

  }
  #region Messages
  /// <summary>
  /// Test that we can include all well-known types.
  /// Each wrapper type is included separately, as languages
  /// map handle different wrappers in different ways.
  /// </summary>
  public sealed partial class TestWellKnownTypes : pb::IMessage<TestWellKnownTypes> {
    private static readonly pb::MessageParser<TestWellKnownTypes> _parser = new pb::MessageParser<TestWellKnownTypes>(() => new TestWellKnownTypes());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<TestWellKnownTypes> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestWellKnownTypesReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TestWellKnownTypes() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TestWellKnownTypes(TestWellKnownTypes other) : this() {
      anyField_ = other.anyField_ != null ? other.anyField_.Clone() : null;
      apiField_ = other.apiField_ != null ? other.apiField_.Clone() : null;
      durationField_ = other.durationField_ != null ? other.durationField_.Clone() : null;
      emptyField_ = other.emptyField_ != null ? other.emptyField_.Clone() : null;
      fieldMaskField_ = other.fieldMaskField_ != null ? other.fieldMaskField_.Clone() : null;
      sourceContextField_ = other.sourceContextField_ != null ? other.sourceContextField_.Clone() : null;
      structField_ = other.structField_ != null ? other.structField_.Clone() : null;
      timestampField_ = other.timestampField_ != null ? other.timestampField_.Clone() : null;
      typeField_ = other.typeField_ != null ? other.typeField_.Clone() : null;
      DoubleField = other.DoubleField;
      FloatField = other.FloatField;
      Int64Field = other.Int64Field;
      Uint64Field = other.Uint64Field;
      Int32Field = other.Int32Field;
      Uint32Field = other.Uint32Field;
      BoolField = other.BoolField;
      StringField = other.StringField;
      BytesField = other.BytesField;
      valueField_ = other.valueField_ != null ? other.valueField_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TestWellKnownTypes Clone() {
      return new TestWellKnownTypes(this);
    }

    /// <summary>Field number for the "any_field" field.</summary>
    public const int AnyFieldFieldNumber = 1;
    private global::Google.Protobuf.WellKnownTypes.Any anyField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Any AnyField {
      get { return anyField_; }
      set {
        anyField_ = value;
      }
    }

    /// <summary>Field number for the "api_field" field.</summary>
    public const int ApiFieldFieldNumber = 2;
    private global::Google.Protobuf.WellKnownTypes.Api apiField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Api ApiField {
      get { return apiField_; }
      set {
        apiField_ = value;
      }
    }

    /// <summary>Field number for the "duration_field" field.</summary>
    public const int DurationFieldFieldNumber = 3;
    private global::Google.Protobuf.WellKnownTypes.Duration durationField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Duration DurationField {
      get { return durationField_; }
      set {
        durationField_ = value;
      }
    }

    /// <summary>Field number for the "empty_field" field.</summary>
    public const int EmptyFieldFieldNumber = 4;
    private global::Google.Protobuf.WellKnownTypes.Empty emptyField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Empty EmptyField {
      get { return emptyField_; }
      set {
        emptyField_ = value;
      }
    }

    /// <summary>Field number for the "field_mask_field" field.</summary>
    public const int FieldMaskFieldFieldNumber = 5;
    private global::Google.Protobuf.WellKnownTypes.FieldMask fieldMaskField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.FieldMask FieldMaskField {
      get { return fieldMaskField_; }
      set {
        fieldMaskField_ = value;
      }
    }

    /// <summary>Field number for the "source_context_field" field.</summary>
    public const int SourceContextFieldFieldNumber = 6;
    private global::Google.Protobuf.WellKnownTypes.SourceContext sourceContextField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContextField {
      get { return sourceContextField_; }
      set {
        sourceContextField_ = value;
      }
    }

    /// <summary>Field number for the "struct_field" field.</summary>
    public const int StructFieldFieldNumber = 7;
    private global::Google.Protobuf.WellKnownTypes.Struct structField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Struct StructField {
      get { return structField_; }
      set {
        structField_ = value;
      }
    }

    /// <summary>Field number for the "timestamp_field" field.</summary>
    public const int TimestampFieldFieldNumber = 8;
    private global::Google.Protobuf.WellKnownTypes.Timestamp timestampField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Timestamp TimestampField {
      get { return timestampField_; }
      set {
        timestampField_ = value;
      }
    }

    /// <summary>Field number for the "type_field" field.</summary>
    public const int TypeFieldFieldNumber = 9;
    private global::Google.Protobuf.WellKnownTypes.Type typeField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Type TypeField {
      get { return typeField_; }
      set {
        typeField_ = value;
      }
    }

    /// <summary>Field number for the "double_field" field.</summary>
    public const int DoubleFieldFieldNumber = 10;
    private static readonly pb::FieldCodec<double?> _single_doubleField_codec = pb::FieldCodec.ForStructWrapper<double>(82);
    private double? doubleField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField {
      get { return doubleField_; }
      set {
        doubleField_ = value;
      }
    }


    /// <summary>Field number for the "float_field" field.</summary>
    public const int FloatFieldFieldNumber = 11;
    private static readonly pb::FieldCodec<float?> _single_floatField_codec = pb::FieldCodec.ForStructWrapper<float>(90);
    private float? floatField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float? FloatField {
      get { return floatField_; }
      set {
        floatField_ = value;
      }
    }


    /// <summary>Field number for the "int64_field" field.</summary>
    public const int Int64FieldFieldNumber = 12;
    private static readonly pb::FieldCodec<long?> _single_int64Field_codec = pb::FieldCodec.ForStructWrapper<long>(98);
    private long? int64Field_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field {
      get { return int64Field_; }
      set {
        int64Field_ = value;
      }
    }


    /// <summary>Field number for the "uint64_field" field.</summary>
    public const int Uint64FieldFieldNumber = 13;
    private static readonly pb::FieldCodec<ulong?> _single_uint64Field_codec = pb::FieldCodec.ForStructWrapper<ulong>(106);
    private ulong? uint64Field_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong? Uint64Field {
      get { return uint64Field_; }
      set {
        uint64Field_ = value;
      }
    }


    /// <summary>Field number for the "int32_field" field.</summary>
    public const int Int32FieldFieldNumber = 14;
    private static readonly pb::FieldCodec<int?> _single_int32Field_codec = pb::FieldCodec.ForStructWrapper<int>(114);
    private int? int32Field_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int? Int32Field {
      get { return int32Field_; }
      set {
        int32Field_ = value;
      }
    }


    /// <summary>Field number for the "uint32_field" field.</summary>
    public const int Uint32FieldFieldNumber = 15;
    private static readonly pb::FieldCodec<uint?> _single_uint32Field_codec = pb::FieldCodec.ForStructWrapper<uint>(122);
    private uint? uint32Field_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint? Uint32Field {
      get { return uint32Field_; }
      set {
        uint32Field_ = value;
      }
    }


    /// <summary>Field number for the "bool_field" field.</summary>
    public const int BoolFieldFieldNumber = 16;
    private static readonly pb::FieldCodec<bool?> _single_boolField_codec = pb::FieldCodec.ForStructWrapper<bool>(130);
    private bool? boolField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool? BoolField {
      get { return boolField_; }
      set {
        boolField_ = value;
      }
    }


    /// <summary>Field number for the "string_field" field.</summary>
    public const int StringFieldFieldNumber = 17;
    private static readonly pb::FieldCodec<string> _single_stringField_codec = pb::FieldCodec.ForClassWrapper<string>(138);
    private string stringField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField {
      get { return stringField_; }
      set {
        stringField_ = value;
      }
    }


    /// <summary>Field number for the "bytes_field" field.</summary>
    public const int BytesFieldFieldNumber = 18;
    private static readonly pb::FieldCodec<pb::ByteString> _single_bytesField_codec = pb::FieldCodec.ForClassWrapper<pb::ByteString>(146);
    private pb::ByteString bytesField_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pb::ByteString BytesField {
      get { return bytesField_; }
      set {
        bytesField_ = value;
      }
    }


    /// <summary>Field number for the "value_field" field.</summary>
    public const int ValueFieldFieldNumber = 19;
    private global::Google.Protobuf.WellKnownTypes.Value valueField_;
    /// <summary>
    /// Part of struct, but useful to be able to test separately
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Value ValueField {
      get { return valueField_; }
      set {
        valueField_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as TestWellKnownTypes);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(TestWellKnownTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(AnyField, other.AnyField)) return false;
      if (!object.Equals(ApiField, other.ApiField)) return false;
      if (!object.Equals(DurationField, other.DurationField)) return false;
      if (!object.Equals(EmptyField, other.EmptyField)) return false;
      if (!object.Equals(FieldMaskField, other.FieldMaskField)) return false;
      if (!object.Equals(SourceContextField, other.SourceContextField)) return false;
      if (!object.Equals(StructField, other.StructField)) return false;
      if (!object.Equals(TimestampField, other.TimestampField)) return false;
      if (!object.Equals(TypeField, other.TypeField)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField, other.DoubleField)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableSingleEqualityComparer.Equals(FloatField, other.FloatField)) return false;
      if (Int64Field != other.Int64Field) return false;
      if (Uint64Field != other.Uint64Field) return false;
      if (Int32Field != other.Int32Field) return false;
      if (Uint32Field != other.Uint32Field) return false;
      if (BoolField != other.BoolField) return false;
      if (StringField != other.StringField) return false;
      if (BytesField != other.BytesField) return false;
      if (!object.Equals(ValueField, other.ValueField)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (anyField_ != null) hash ^= AnyField.GetHashCode();
      if (apiField_ != null) hash ^= ApiField.GetHashCode();
      if (durationField_ != null) hash ^= DurationField.GetHashCode();
      if (emptyField_ != null) hash ^= EmptyField.GetHashCode();
      if (fieldMaskField_ != null) hash ^= FieldMaskField.GetHashCode();
      if (sourceContextField_ != null) hash ^= SourceContextField.GetHashCode();
      if (structField_ != null) hash ^= StructField.GetHashCode();
      if (timestampField_ != null) hash ^= TimestampField.GetHashCode();
      if (typeField_ != null) hash ^= TypeField.GetHashCode();
      if (doubleField_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField);
      if (floatField_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableSingleEqualityComparer.GetHashCode(FloatField);
      if (int64Field_ != null) hash ^= Int64Field.GetHashCode();
      if (uint64Field_ != null) hash ^= Uint64Field.GetHashCode();
      if (int32Field_ != null) hash ^= Int32Field.GetHashCode();
      if (uint32Field_ != null) hash ^= Uint32Field.GetHashCode();
      if (boolField_ != null) hash ^= BoolField.GetHashCode();
      if (stringField_ != null) hash ^= StringField.GetHashCode();
      if (bytesField_ != null) hash ^= BytesField.GetHashCode();
      if (valueField_ != null) hash ^= ValueField.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (anyField_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(AnyField);
      }
      if (apiField_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(ApiField);
      }
      if (durationField_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(DurationField);
      }
      if (emptyField_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(EmptyField);
      }
      if (fieldMaskField_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(FieldMaskField);
      }
      if (sourceContextField_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(SourceContextField);
      }
      if (structField_ != null) {
        output.WriteRawTag(58);
        output.WriteMessage(StructField);
      }
      if (timestampField_ != null) {
        output.WriteRawTag(66);
        output.WriteMessage(TimestampField);
      }
      if (typeField_ != null) {
        output.WriteRawTag(74);
        output.WriteMessage(TypeField);
      }
      if (doubleField_ != null) {
        _single_doubleField_codec.WriteTagAndValue(output, DoubleField);
      }
      if (floatField_ != null) {
        _single_floatField_codec.WriteTagAndValue(output, FloatField);
      }
      if (int64Field_ != null) {
        _single_int64Field_codec.WriteTagAndValue(output, Int64Field);
      }
      if (uint64Field_ != null) {
        _single_uint64Field_codec.WriteTagAndValue(output, Uint64Field);
      }
      if (int32Field_ != null) {
        _single_int32Field_codec.WriteTagAndValue(output, Int32Field);
      }
      if (uint32Field_ != null) {
        _single_uint32Field_codec.WriteTagAndValue(output, Uint32Field);
      }
      if (boolField_ != null) {
        _single_boolField_codec.WriteTagAndValue(output, BoolField);
      }
      if (stringField_ != null) {
        _single_stringField_codec.WriteTagAndValue(output, StringField);
      }
      if (bytesField_ != null) {
        _single_bytesField_codec.WriteTagAndValue(output, BytesField);
      }
      if (valueField_ != null) {
        output.WriteRawTag(154, 1);
        output.WriteMessage(ValueField);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (anyField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(AnyField);
      }
      if (apiField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ApiField);
      }
      if (durationField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DurationField);
      }
      if (emptyField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(EmptyField);
      }
      if (fieldMaskField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FieldMaskField);
      }
      if (sourceContextField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SourceContextField);
      }
      if (structField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(StructField);
      }
      if (timestampField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TimestampField);
      }
      if (typeField_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TypeField);
      }
      if (doubleField_ != null) {
        size += _single_doubleField_codec.CalculateSizeWithTag(DoubleField);
      }
      if (floatField_ != null) {
        size += _single_floatField_codec.CalculateSizeWithTag(FloatField);
      }
      if (int64Field_ != null) {
        size += _single_int64Field_codec.CalculateSizeWithTag(Int64Field);
      }
      if (uint64Field_ != null) {
        size += _single_uint64Field_codec.CalculateSizeWithTag(Uint64Field);
      }
      if (int32Field_ != null) {
        size += _single_int32Field_codec.CalculateSizeWithTag(Int32Field);
      }
      if (uint32Field_ != null) {
        size += _single_uint32Field_codec.CalculateSizeWithTag(Uint32Field);
      }
      if (boolField_ != null) {
        size += _single_boolField_codec.CalculateSizeWithTag(BoolField);
      }
      if (stringField_ != null) {
        size += _single_stringField_codec.CalculateSizeWithTag(StringField);
      }
      if (bytesField_ != null) {
        size += _single_bytesField_codec.CalculateSizeWithTag(BytesField);
      }
      if (valueField_ != null) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ValueField);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(TestWellKnownTypes other) {
      if (other == null) {
        return;
      }
      if (other.anyField_ != null) {
        if (anyField_ == null) {
          AnyField = new global::Google.Protobuf.WellKnownTypes.Any();
        }
        AnyField.MergeFrom(other.AnyField);
      }
      if (other.apiField_ != null) {
        if (apiField_ == null) {
          ApiField = new global::Google.Protobuf.WellKnownTypes.Api();
        }
        ApiField.MergeFrom(other.ApiField);
      }
      if (other.durationField_ != null) {
        if (durationField_ == null) {
          DurationField = new global::Google.Protobuf.WellKnownTypes.Duration();
        }
        DurationField.MergeFrom(other.DurationField);
      }
      if (other.emptyField_ != null) {
        if (emptyField_ == null) {
          EmptyField = new global::Google.Protobuf.WellKnownTypes.Empty();
        }
        EmptyField.MergeFrom(other.EmptyField);
      }
      if (other.fieldMaskField_ != null) {
        if (fieldMaskField_ == null) {
          FieldMaskField = new global::Google.Protobuf.WellKnownTypes.FieldMask();
        }
        FieldMaskField.MergeFrom(other.FieldMaskField);
      }
      if (other.sourceContextField_ != null) {
        if (sourceContextField_ == null) {
          SourceContextField = new global::Google.Protobuf.WellKnownTypes.SourceContext();
        }
        SourceContextField.MergeFrom(other.SourceContextField);
      }
      if (other.structField_ != null) {
        if (structField_ == null) {
          StructField = new global::Google.Protobuf.WellKnownTypes.Struct();
        }
        StructField.MergeFrom(other.StructField);
      }
      if (other.timestampField_ != null) {
        if (timestampField_ == null) {
          TimestampField = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        TimestampField.MergeFrom(other.TimestampField);
      }
      if (other.typeField_ != null) {
        if (typeField_ == null) {
          TypeField = new global::Google.Protobuf.WellKnownTypes.Type();
        }
        TypeField.MergeFrom(other.TypeField);
      }
      if (other.doubleField_ != null) {
        if (doubleField_ == null || other.DoubleField != 0D) {
          DoubleField = other.DoubleField;
        }
      }
      if (other.floatField_ != null) {
        if (floatField_ == null || other.FloatField != 0F) {
          FloatField = other.FloatField;
        }
      }
      if (other.int64Field_ != null) {
        if (int64Field_ == null || other.Int64Field != 0L) {
          Int64Field = other.Int64Field;
        }
      }
      if (other.uint64Field_ != null) {
        if (uint64Field_ == null || other.Uint64Field != 0UL) {
          Uint64Field = other.Uint64Field;
        }
      }
      if (other.int32Field_ != null) {
        if (int32Field_ == null || other.Int32Field != 0) {
          Int32Field = other.Int32Field;
        }
      }
      if (other.uint32Field_ != null) {
        if (uint32Field_ == null || other.Uint32Field != 0) {
          Uint32Field = other.Uint32Field;
        }
      }
      if (other.boolField_ != null) {
        if (boolField_ == null || other.BoolField != false) {
          BoolField = other.BoolField;
        }
      }
      if (other.stringField_ != null) {
        if (stringField_ == null || other.StringField != "") {
          StringField = other.StringField;
        }
      }
      if (other.bytesField_ != null) {
        if (bytesField_ == null || other.BytesField != pb::ByteString.Empty) {
          BytesField = other.BytesField;
        }
      }
      if (other.valueField_ != null) {
        if (valueField_ == null) {
          ValueField = new global::Google.Protobuf.WellKnownTypes.Value();
        }
        ValueField.MergeFrom(other.ValueField);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            if (!pb::UnknownFieldSet.MergeFieldFrom(ref _unknownFields, input)) {
              return;
            }
            break;
          case 10: {
            if (anyField_ == null) {
              AnyField = new global::Google.Protobuf.WellKnownTypes.Any();
            }
            input.ReadMessage(AnyField);
            break;
          }
          case 18: {
            if (apiField_ == null) {
              ApiField = new global::Google.Protobuf.WellKnownTypes.Api();
            }
            input.ReadMessage(ApiField);
            break;
          }
          case 26: {
            if (durationField_ == null) {
              DurationField = new global::Google.Protobuf.WellKnownTypes.Duration();
            }
            input.ReadMessage(DurationField);
            break;
          }
          case 34: {
            if (emptyField_ == null) {
              EmptyField = new global::Google.Protobuf.WellKnownTypes.Empty();
            }
            input.ReadMessage(EmptyField);
            break;
          }
          case 42: {
            if (fieldMaskField_ == null) {
              FieldMaskField = new global::Google.Protobuf.WellKnownTypes.FieldMask();
            }
            input.ReadMessage(FieldMaskField);
            break;
          }
          case 50: {
            if (sourceContextField_ == null) {
              SourceContextField = new global::Google.Protobuf.WellKnownTypes.SourceContext();
            }
            input.ReadMessage(SourceContextField);
            break;
          }
          case 58: {
            if (structField_ == null) {
              StructField = new global::Google.Protobuf.WellKnownTypes.Struct();
            }
            input.ReadMessage(StructField);
            break;
          }
          case 66: {
            if (timestampField_ == null) {
              TimestampField = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(TimestampField);
            break;
          }
          case 74: {
            if (typeField_ == null) {
              TypeField = new global::Google.Protobuf.WellKnownTypes.Type();
            }
            input.ReadMessage(TypeField);
            break;
          }
          case 82: {
            double? value = _single_doubleField_codec.Read(input);
            if (doubleField_ == null || value != 0D) {
              DoubleField = value;
            }
            break;
          }
          case 90: {
            float? value = _single_floatField_codec.Read(input);
            if (floatField_ == null || value != 0F) {
              FloatField = value;
            }
            break;
          }
          case 98: {
            long? value = _single_int64Field_codec.Read(input);
            if (int64Field_ == null || value != 0L) {
              Int64Field = value;
            }
            break;
          }
          case 106: {
            ulong? value = _single_uint64Field_codec.Read(input);
            if (uint64Field_ == null || value != 0UL) {
              Uint64Field = value;
            }
            break;
          }
          case 114: {
            int? value = _single_int32Field_codec.Read(input);
            if (int32Field_ == null || value != 0) {
              Int32Field = value;
            }
            break;
          }
          case 122: {
            uint? value = _single_uint32Field_codec.Read(input);
            if (uint32Field_ == null || value != 0) {
              Uint32Field = value;
            }
            break;
          }
          case 130: {
            bool? value = _single_boolField_codec.Read(input);
            if (boolField_ == null || value != false) {
              BoolField = value;
            }
            break;
          }
          case 138: {
            string value = _single_stringField_codec.Read(input);
            if (stringField_ == null || value != "") {
              StringField = value;
            }
            break;
          }
          case 146: {
            pb::ByteString value = _single_bytesField_codec.Read(input);
            if (bytesField_ == null || value != pb::ByteString.Empty) {
              BytesField = value;
            }
            break;
          }
          case 154: {
            if (valueField_ == null) {
              ValueField = new global::Google.Protobuf.WellKnownTypes.Value();
            }
            input.ReadMessage(ValueField);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// A repeated field for each well-known type.
  /// </summary>
  public sealed partial class RepeatedWellKnownTypes : pb::IMessage<RepeatedWellKnownTypes> {
    private static readonly pb::MessageParser<RepeatedWellKnownTypes> _parser = new pb::MessageParser<RepeatedWellKnownTypes>(() => new RepeatedWellKnownTypes());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<RepeatedWellKnownTypes> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestWellKnownTypesReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RepeatedWellKnownTypes() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RepeatedWellKnownTypes(RepeatedWellKnownTypes other) : this() {
      anyField_ = other.anyField_.Clone();
      apiField_ = other.apiField_.Clone();
      durationField_ = other.durationField_.Clone();
      emptyField_ = other.emptyField_.Clone();
      fieldMaskField_ = other.fieldMaskField_.Clone();
      sourceContextField_ = other.sourceContextField_.Clone();
      structField_ = other.structField_.Clone();
      timestampField_ = other.timestampField_.Clone();
      typeField_ = other.typeField_.Clone();
      doubleField_ = other.doubleField_.Clone();
      floatField_ = other.floatField_.Clone();
      int64Field_ = other.int64Field_.Clone();
      uint64Field_ = other.uint64Field_.Clone();
      int32Field_ = other.int32Field_.Clone();
      uint32Field_ = other.uint32Field_.Clone();
      boolField_ = other.boolField_.Clone();
      stringField_ = other.stringField_.Clone();
      bytesField_ = other.bytesField_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RepeatedWellKnownTypes Clone() {
      return new RepeatedWellKnownTypes(this);
    }

    /// <summary>Field number for the "any_field" field.</summary>
    public const int AnyFieldFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Any> _repeated_anyField_codec
        = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.WellKnownTypes.Any.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Any> anyField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Any>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Any> AnyField {
      get { return anyField_; }
    }

    /// <summary>Field number for the "api_field" field.</summary>
    public const int ApiFieldFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Api> _repeated_apiField_codec
        = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Api.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Api> apiField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Api>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Api> ApiField {
      get { return apiField_; }
    }

    /// <summary>Field number for the "duration_field" field.</summary>
    public const int DurationFieldFieldNumber = 3;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Duration> _repeated_durationField_codec
        = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.Duration.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Duration> durationField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Duration>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Duration> DurationField {
      get { return durationField_; }
    }

    /// <summary>Field number for the "empty_field" field.</summary>
    public const int EmptyFieldFieldNumber = 4;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Empty> _repeated_emptyField_codec
        = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.WellKnownTypes.Empty.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Empty> emptyField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Empty>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Empty> EmptyField {
      get { return emptyField_; }
    }

    /// <summary>Field number for the "field_mask_field" field.</summary>
    public const int FieldMaskFieldFieldNumber = 5;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.FieldMask> _repeated_fieldMaskField_codec
        = pb::FieldCodec.ForMessage(42, global::Google.Protobuf.WellKnownTypes.FieldMask.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.FieldMask> fieldMaskField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.FieldMask>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.FieldMask> FieldMaskField {
      get { return fieldMaskField_; }
    }

    /// <summary>Field number for the "source_context_field" field.</summary>
    public const int SourceContextFieldFieldNumber = 6;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.SourceContext> _repeated_sourceContextField_codec
        = pb::FieldCodec.ForMessage(50, global::Google.Protobuf.WellKnownTypes.SourceContext.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.SourceContext> sourceContextField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.SourceContext>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.SourceContext> SourceContextField {
      get { return sourceContextField_; }
    }

    /// <summary>Field number for the "struct_field" field.</summary>
    public const int StructFieldFieldNumber = 7;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Struct> _repeated_structField_codec
        = pb::FieldCodec.ForMessage(58, global::Google.Protobuf.WellKnownTypes.Struct.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Struct> structField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Struct>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Struct> StructField {
      get { return structField_; }
    }

    /// <summary>Field number for the "timestamp_field" field.</summary>
    public const int TimestampFieldFieldNumber = 8;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Timestamp> _repeated_timestampField_codec
        = pb::FieldCodec.ForMessage(66, global::Google.Protobuf.WellKnownTypes.Timestamp.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Timestamp> timestampField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Timestamp>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Timestamp> TimestampField {
      get { return timestampField_; }
    }

    /// <summary>Field number for the "type_field" field.</summary>
    public const int TypeFieldFieldNumber = 9;
    private static readonly pb::FieldCodec<global::Google.Protobuf.WellKnownTypes.Type> _repeated_typeField_codec
        = pb::FieldCodec.ForMessage(74, global::Google.Protobuf.WellKnownTypes.Type.Parser);
    private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Type> typeField_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Type>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Type> TypeField {
      get { return typeField_; }
    }

    /// <summary>Field number for the "double_field" field.</summary>
    public const int DoubleFieldFieldNumber = 10;
    private static readonly pb::FieldCodec<double?> _repeated_doubleField_codec
        = pb::FieldCodec.ForStructWrapper<double>(82);
    private readonly pbc::RepeatedField<double?> doubleField_ = new pbc::RepeatedField<double?>();
    /// <summary>
    /// These don't actually make a lot of sense, but they're not prohibited...
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<double?> DoubleField {
      get { return doubleField_; }
    }

    /// <summary>Field number for the "float_field" field.</summary>
    public const int FloatFieldFieldNumber = 11;
    private static readonly pb::FieldCodec<float?> _repeated_floatField_codec
        = pb::FieldCodec.ForStructWrapper<float>(90);
    private readonly pbc::RepeatedField<float?> floatField_ = new pbc::RepeatedField<float?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<float?> FloatField {
      get { return floatField_; }
    }

    /// <summary>Field number for the "int64_field" field.</summary>
    public const int Int64FieldFieldNumber = 12;
    private static readonly pb::FieldCodec<long?> _repeated_int64Field_codec
        = pb::FieldCodec.ForStructWrapper<long>(98);
    private readonly pbc::RepeatedField<long?> int64Field_ = new pbc::RepeatedField<long?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<long?> Int64Field {
      get { return int64Field_; }
    }

    /// <summary>Field number for the "uint64_field" field.</summary>
    public const int Uint64FieldFieldNumber = 13;
    private static readonly pb::FieldCodec<ulong?> _repeated_uint64Field_codec
        = pb::FieldCodec.ForStructWrapper<ulong>(106);
    private readonly pbc::RepeatedField<ulong?> uint64Field_ = new pbc::RepeatedField<ulong?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<ulong?> Uint64Field {
      get { return uint64Field_; }
    }

    /// <summary>Field number for the "int32_field" field.</summary>
    public const int Int32FieldFieldNumber = 14;
    private static readonly pb::FieldCodec<int?> _repeated_int32Field_codec
        = pb::FieldCodec.ForStructWrapper<int>(114);
    private readonly pbc::RepeatedField<int?> int32Field_ = new pbc::RepeatedField<int?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<int?> Int32Field {
      get { return int32Field_; }
    }

    /// <summary>Field number for the "uint32_field" field.</summary>
    public const int Uint32FieldFieldNumber = 15;
    private static readonly pb::FieldCodec<uint?> _repeated_uint32Field_codec
        = pb::FieldCodec.ForStructWrapper<uint>(122);
    private readonly pbc::RepeatedField<uint?> uint32Field_ = new pbc::RepeatedField<uint?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint?> Uint32Field {
      get { return uint32Field_; }
    }

    /// <summary>Field number for the "bool_field" field.</summary>
    public const int BoolFieldFieldNumber = 16;
    private static readonly pb::FieldCodec<bool?> _repeated_boolField_codec
        = pb::FieldCodec.ForStructWrapper<bool>(130);
    private readonly pbc::RepeatedField<bool?> boolField_ = new pbc::RepeatedField<bool?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<bool?> BoolField {
      get { return boolField_; }
    }

    /// <summary>Field number for the "string_field" field.</summary>
    public const int StringFieldFieldNumber = 17;
    private static readonly pb::FieldCodec<string> _repeated_stringField_codec
        = pb::FieldCodec.ForClassWrapper<string>(138);
    private readonly pbc::RepeatedField<string> stringField_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> StringField {
      get { return stringField_; }
    }

    /// <summary>Field number for the "bytes_field" field.</summary>
    public const int BytesFieldFieldNumber = 18;
    private static readonly pb::FieldCodec<pb::ByteString> _repeated_bytesField_codec
        = pb::FieldCodec.ForClassWrapper<pb::ByteString>(146);
    private readonly pbc::RepeatedField<pb::ByteString> bytesField_ = new pbc::RepeatedField<pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<pb::ByteString> BytesField {
      get { return bytesField_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as RepeatedWellKnownTypes);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(RepeatedWellKnownTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!anyField_.Equals(other.anyField_)) return false;
      if(!apiField_.Equals(other.apiField_)) return false;
      if(!durationField_.Equals(other.durationField_)) return false;
      if(!emptyField_.Equals(other.emptyField_)) return false;
      if(!fieldMaskField_.Equals(other.fieldMaskField_)) return false;
      if(!sourceContextField_.Equals(other.sourceContextField_)) return false;
      if(!structField_.Equals(other.structField_)) return false;
      if(!timestampField_.Equals(other.timestampField_)) return false;
      if(!typeField_.Equals(other.typeField_)) return false;
      if(!doubleField_.Equals(other.doubleField_)) return false;
      if(!floatField_.Equals(other.floatField_)) return false;
      if(!int64Field_.Equals(other.int64Field_)) return false;
      if(!uint64Field_.Equals(other.uint64Field_)) return false;
      if(!int32Field_.Equals(other.int32Field_)) return false;
      if(!uint32Field_.Equals(other.uint32Field_)) return false;
      if(!boolField_.Equals(other.boolField_)) return false;
      if(!stringField_.Equals(other.stringField_)) return false;
      if(!bytesField_.Equals(other.bytesField_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= anyField_.GetHashCode();
      hash ^= apiField_.GetHashCode();
      hash ^= durationField_.GetHashCode();
      hash ^= emptyField_.GetHashCode();
      hash ^= fieldMaskField_.GetHashCode();
      hash ^= sourceContextField_.GetHashCode();
      hash ^= structField_.GetHashCode();
      hash ^= timestampField_.GetHashCode();
      hash ^= typeField_.GetHashCode();
      hash ^= doubleField_.GetHashCode();
      hash ^= floatField_.GetHashCode();
      hash ^= int64Field_.GetHashCode();
      hash ^= uint64Field_.GetHashCode();
      hash ^= int32Field_.GetHashCode();
      hash ^= uint32Field_.GetHashCode();
      hash ^= boolField_.GetHashCode();
      hash ^= stringField_.GetHashCode();
      hash ^= bytesField_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      anyField_.WriteTo(output, _repeated_anyField_codec);
      apiField_.WriteTo(output, _repeated_apiField_codec);
      durationField_.WriteTo(output, _repeated_durationField_codec);
      emptyField_.WriteTo(output, _repeated_emptyField_codec);
      fieldMaskField_.WriteTo(output, _repeated_fieldMaskField_codec);
      sourceContextField_.WriteTo(output, _repeated_sourceContextField_codec);
      structField_.WriteTo(output, _repeated_structField_codec);
      timestampField_.WriteTo(output, _repeated_timestampField_codec);
      typeField_.WriteTo(output, _repeated_typeField_codec);
      doubleField_.WriteTo(output, _repeated_doubleField_codec);
      floatField_.WriteTo(output, _repeated_floatField_codec);
      int64Field_.WriteTo(output, _repeated_int64Field_codec);
      uint64Field_.WriteTo(output, _repeated_uint64Field_codec);
      int32Field_.WriteTo(output, _repeated_int32Field_codec);
      uint32Field_.WriteTo(output, _repeated_uint32Field_codec);
      boolField_.WriteTo(output, _repeated_boolField_codec);
      stringField_.WriteTo(output, _repeated_stringField_codec);
      bytesField_.WriteTo(output, _repeated_bytesField_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += anyField_.CalculateSize(_repeated_anyField_codec);
      size += apiField_.CalculateSize(_repeated_apiField_codec);
      size += durationField_.CalculateSize(_repeated_durationField_codec);
      size += emptyField_.CalculateSize(_repeated_emptyField_codec);
      size += fieldMaskField_.CalculateSize(_repeated_fieldMaskField_codec);
      size += sourceContextField_.CalculateSize(_repeated_sourceContextField_codec);
      size += structField_.CalculateSize(_repeated_structField_codec);
      size += timestampField_.CalculateSize(_repeated_timestampField_codec);
      size += typeField_.CalculateSize(_repeated_typeField_codec);
      size += doubleField_.CalculateSize(_repeated_doubleField_codec);
      size += floatField_.CalculateSize(_repeated_floatField_codec);
      size += int64Field_.CalculateSize(_repeated_int64Field_codec);
      size += uint64Field_.CalculateSize(_repeated_uint64Field_codec);
      size += int32Field_.CalculateSize(_repeated_int32Field_codec);
      size += uint32Field_.CalculateSize(_repeated_uint32Field_codec);
      size += boolField_.CalculateSize(_repeated_boolField_codec);
      size += stringField_.CalculateSize(_repeated_stringField_codec);
      size += bytesField_.CalculateSize(_repeated_bytesField_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(RepeatedWellKnownTypes other) {
      if (other == null) {
        return;
      }
      anyField_.Add(other.anyField_);
      apiField_.Add(other.apiField_);
      durationField_.Add(other.durationField_);
      emptyField_.Add(other.emptyField_);
      fieldMaskField_.Add(other.fieldMaskField_);
      sourceContextField_.Add(other.sourceContextField_);
      structField_.Add(other.structField_);
      timestampField_.Add(other.timestampField_);
      typeField_.Add(other.typeField_);
      doubleField_.Add(other.doubleField_);
      floatField_.Add(other.floatField_);
      int64Field_.Add(other.int64Field_);
      uint64Field_.Add(other.uint64Field_);
      int32Field_.Add(other.int32Field_);
      uint32Field_.Add(other.uint32Field_);
      boolField_.Add(other.boolField_);
      stringField_.Add(other.stringField_);
      bytesField_.Add(other.bytesField_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            if (!pb::UnknownFieldSet.MergeFieldFrom(ref _unknownFields, input)) {
              return;
            }
            break;
          case 10: {
            anyField_.AddEntriesFrom(input, _repeated_anyField_codec);
            break;
          }
          case 18: {
            apiField_.AddEntriesFrom(input, _repeated_apiField_codec);
            break;
          }
          case 26: {
            durationField_.AddEntriesFrom(input, _repeated_durationField_codec);
            break;
          }
          case 34: {
            emptyField_.AddEntriesFrom(input, _repeated_emptyField_codec);
            break;
          }
          case 42: {
            fieldMaskField_.AddEntriesFrom(input, _repeated_fieldMaskField_codec);
            break;
          }
          case 50: {
            sourceContextField_.AddEntriesFrom(input, _repeated_sourceContextField_codec);
            break;
          }
          case 58: {
            structField_.AddEntriesFrom(input, _repeated_structField_codec);
            break;
          }
          case 66: {
            timestampField_.AddEntriesFrom(input, _repeated_timestampField_codec);
            break;
          }
          case 74: {
            typeField_.AddEntriesFrom(input, _repeated_typeField_codec);
            break;
          }
          case 82: {
            doubleField_.AddEntriesFrom(input, _repeated_doubleField_codec);
            break;
          }
          case 90: {
            floatField_.AddEntriesFrom(input, _repeated_floatField_codec);
            break;
          }
          case 98: {
            int64Field_.AddEntriesFrom(input, _repeated_int64Field_codec);
            break;
          }
          case 106: {
            uint64Field_.AddEntriesFrom(input, _repeated_uint64Field_codec);
            break;
          }
          case 114: {
            int32Field_.AddEntriesFrom(input, _repeated_int32Field_codec);
            break;
          }
          case 122: {
            uint32Field_.AddEntriesFrom(input, _repeated_uint32Field_codec);
            break;
          }
          case 130: {
            boolField_.AddEntriesFrom(input, _repeated_boolField_codec);
            break;
          }
          case 138: {
            stringField_.AddEntriesFrom(input, _repeated_stringField_codec);
            break;
          }
          case 146: {
            bytesField_.AddEntriesFrom(input, _repeated_bytesField_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class OneofWellKnownTypes : pb::IMessage<OneofWellKnownTypes> {
    private static readonly pb::MessageParser<OneofWellKnownTypes> _parser = new pb::MessageParser<OneofWellKnownTypes>(() => new OneofWellKnownTypes());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<OneofWellKnownTypes> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestWellKnownTypesReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OneofWellKnownTypes() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OneofWellKnownTypes(OneofWellKnownTypes other) : this() {
      switch (other.OneofFieldCase) {
        case OneofFieldOneofCase.AnyField:
          AnyField = other.AnyField.Clone();
          break;
        case OneofFieldOneofCase.ApiField:
          ApiField = other.ApiField.Clone();
          break;
        case OneofFieldOneofCase.DurationField:
          DurationField = other.DurationField.Clone();
          break;
        case OneofFieldOneofCase.EmptyField:
          EmptyField = other.EmptyField.Clone();
          break;
        case OneofFieldOneofCase.FieldMaskField:
          FieldMaskField = other.FieldMaskField.Clone();
          break;
        case OneofFieldOneofCase.SourceContextField:
          SourceContextField = other.SourceContextField.Clone();
          break;
        case OneofFieldOneofCase.StructField:
          StructField = other.StructField.Clone();
          break;
        case OneofFieldOneofCase.TimestampField:
          TimestampField = other.TimestampField.Clone();
          break;
        case OneofFieldOneofCase.TypeField:
          TypeField = other.TypeField.Clone();
          break;
        case OneofFieldOneofCase.DoubleField:
          DoubleField = other.DoubleField;
          break;
        case OneofFieldOneofCase.FloatField:
          FloatField = other.FloatField;
          break;
        case OneofFieldOneofCase.Int64Field:
          Int64Field = other.Int64Field;
          break;
        case OneofFieldOneofCase.Uint64Field:
          Uint64Field = other.Uint64Field;
          break;
        case OneofFieldOneofCase.Int32Field:
          Int32Field = other.Int32Field;
          break;
        case OneofFieldOneofCase.Uint32Field:
          Uint32Field = other.Uint32Field;
          break;
        case OneofFieldOneofCase.BoolField:
          BoolField = other.BoolField;
          break;
        case OneofFieldOneofCase.StringField:
          StringField = other.StringField;
          break;
        case OneofFieldOneofCase.BytesField:
          BytesField = other.BytesField;
          break;
      }

      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OneofWellKnownTypes Clone() {
      return new OneofWellKnownTypes(this);
    }

    /// <summary>Field number for the "any_field" field.</summary>
    public const int AnyFieldFieldNumber = 1;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Any AnyField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.AnyField ? (global::Google.Protobuf.WellKnownTypes.Any) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.AnyField;
      }
    }

    /// <summary>Field number for the "api_field" field.</summary>
    public const int ApiFieldFieldNumber = 2;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Api ApiField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.ApiField ? (global::Google.Protobuf.WellKnownTypes.Api) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.ApiField;
      }
    }

    /// <summary>Field number for the "duration_field" field.</summary>
    public const int DurationFieldFieldNumber = 3;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Duration DurationField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.DurationField ? (global::Google.Protobuf.WellKnownTypes.Duration) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.DurationField;
      }
    }

    /// <summary>Field number for the "empty_field" field.</summary>
    public const int EmptyFieldFieldNumber = 4;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Empty EmptyField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.EmptyField ? (global::Google.Protobuf.WellKnownTypes.Empty) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.EmptyField;
      }
    }

    /// <summary>Field number for the "field_mask_field" field.</summary>
    public const int FieldMaskFieldFieldNumber = 5;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.FieldMask FieldMaskField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.FieldMaskField ? (global::Google.Protobuf.WellKnownTypes.FieldMask) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.FieldMaskField;
      }
    }

    /// <summary>Field number for the "source_context_field" field.</summary>
    public const int SourceContextFieldFieldNumber = 6;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContextField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.SourceContextField ? (global::Google.Protobuf.WellKnownTypes.SourceContext) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.SourceContextField;
      }
    }

    /// <summary>Field number for the "struct_field" field.</summary>
    public const int StructFieldFieldNumber = 7;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Struct StructField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.StructField ? (global::Google.Protobuf.WellKnownTypes.Struct) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.StructField;
      }
    }

    /// <summary>Field number for the "timestamp_field" field.</summary>
    public const int TimestampFieldFieldNumber = 8;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Timestamp TimestampField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.TimestampField ? (global::Google.Protobuf.WellKnownTypes.Timestamp) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.TimestampField;
      }
    }

    /// <summary>Field number for the "type_field" field.</summary>
    public const int TypeFieldFieldNumber = 9;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Google.Protobuf.WellKnownTypes.Type TypeField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.TypeField ? (global::Google.Protobuf.WellKnownTypes.Type) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.TypeField;
      }
    }

    /// <summary>Field number for the "double_field" field.</summary>
    public const int DoubleFieldFieldNumber = 10;
    private static readonly pb::FieldCodec<double?> _oneof_doubleField_codec = pb::FieldCodec.ForStructWrapper<double>(82);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.DoubleField ? (double?) oneofField_ : (double?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.DoubleField;
      }
    }

    /// <summary>Field number for the "float_field" field.</summary>
    public const int FloatFieldFieldNumber = 11;
    private static readonly pb::FieldCodec<float?> _oneof_floatField_codec = pb::FieldCodec.ForStructWrapper<float>(90);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float? FloatField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.FloatField ? (float?) oneofField_ : (float?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.FloatField;
      }
    }

    /// <summary>Field number for the "int64_field" field.</summary>
    public const int Int64FieldFieldNumber = 12;
    private static readonly pb::FieldCodec<long?> _oneof_int64Field_codec = pb::FieldCodec.ForStructWrapper<long>(98);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field {
      get { return oneofFieldCase_ == OneofFieldOneofCase.Int64Field ? (long?) oneofField_ : (long?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.Int64Field;
      }
    }

    /// <summary>Field number for the "uint64_field" field.</summary>
    public const int Uint64FieldFieldNumber = 13;
    private static readonly pb::FieldCodec<ulong?> _oneof_uint64Field_codec = pb::FieldCodec.ForStructWrapper<ulong>(106);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ulong? Uint64Field {
      get { return oneofFieldCase_ == OneofFieldOneofCase.Uint64Field ? (ulong?) oneofField_ : (ulong?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.Uint64Field;
      }
    }

    /// <summary>Field number for the "int32_field" field.</summary>
    public const int Int32FieldFieldNumber = 14;
    private static readonly pb::FieldCodec<int?> _oneof_int32Field_codec = pb::FieldCodec.ForStructWrapper<int>(114);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int? Int32Field {
      get { return oneofFieldCase_ == OneofFieldOneofCase.Int32Field ? (int?) oneofField_ : (int?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.Int32Field;
      }
    }

    /// <summary>Field number for the "uint32_field" field.</summary>
    public const int Uint32FieldFieldNumber = 15;
    private static readonly pb::FieldCodec<uint?> _oneof_uint32Field_codec = pb::FieldCodec.ForStructWrapper<uint>(122);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint? Uint32Field {
      get { return oneofFieldCase_ == OneofFieldOneofCase.Uint32Field ? (uint?) oneofField_ : (uint?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.Uint32Field;
      }
    }

    /// <summary>Field number for the "bool_field" field.</summary>
    public const int BoolFieldFieldNumber = 16;
    private static readonly pb::FieldCodec<bool?> _oneof_boolField_codec = pb::FieldCodec.ForStructWrapper<bool>(130);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool? BoolField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.BoolField ? (bool?) oneofField_ : (bool?) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.BoolField;
      }
    }

    /// <summary>Field number for the "string_field" field.</summary>
    public const int StringFieldFieldNumber = 17;
    private static readonly pb::FieldCodec<string> _oneof_stringField_codec = pb::FieldCodec.ForClassWrapper<string>(138);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.StringField ? (string) oneofField_ : (string) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.StringField;
      }
    }

    /// <summary>Field number for the "bytes_field" field.</summary>
    public const int BytesFieldFieldNumber = 18;
    private static readonly pb::FieldCodec<pb::ByteString> _oneof_bytesField_codec = pb::FieldCodec.ForClassWrapper<pb::ByteString>(146);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pb::ByteString BytesField {
      get { return oneofFieldCase_ == OneofFieldOneofCase.BytesField ? (pb::ByteString) oneofField_ : (pb::ByteString) null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.BytesField;
      }
    }

    private object oneofField_;
    /// <summary>Enum of possible cases for the "oneof_field" oneof.</summary>
    public enum OneofFieldOneofCase {
      None = 0,
      AnyField = 1,
      ApiField = 2,
      DurationField = 3,
      EmptyField = 4,
      FieldMaskField = 5,
      SourceContextField = 6,
      StructField = 7,
      TimestampField = 8,
      TypeField = 9,
      DoubleField = 10,
      FloatField = 11,
      Int64Field = 12,
      Uint64Field = 13,
      Int32Field = 14,
      Uint32Field = 15,
      BoolField = 16,
      StringField = 17,
      BytesField = 18,
    }
    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OneofFieldOneofCase OneofFieldCase {
      get { return oneofFieldCase_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void ClearOneofField() {
      oneofFieldCase_ = OneofFieldOneofCase.None;
      oneofField_ = null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as OneofWellKnownTypes);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(OneofWellKnownTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(AnyField, other.AnyField)) return false;
      if (!object.Equals(ApiField, other.ApiField)) return false;
      if (!object.Equals(DurationField, other.DurationField)) return false;
      if (!object.Equals(EmptyField, other.EmptyField)) return false;
      if (!object.Equals(FieldMaskField, other.FieldMaskField)) return false;
      if (!object.Equals(SourceContextField, other.SourceContextField)) return false;
      if (!object.Equals(StructField, other.StructField)) return false;
      if (!object.Equals(TimestampField, other.TimestampField)) return false;
      if (!object.Equals(TypeField, other.TypeField)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField, other.DoubleField)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableSingleEqualityComparer.Equals(FloatField, other.FloatField)) return false;
      if (Int64Field != other.Int64Field) return false;
      if (Uint64Field != other.Uint64Field) return false;
      if (Int32Field != other.Int32Field) return false;
      if (Uint32Field != other.Uint32Field) return false;
      if (BoolField != other.BoolField) return false;
      if (StringField != other.StringField) return false;
      if (BytesField != other.BytesField) return false;
      if (OneofFieldCase != other.OneofFieldCase) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (oneofFieldCase_ == OneofFieldOneofCase.AnyField) hash ^= AnyField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.ApiField) hash ^= ApiField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.DurationField) hash ^= DurationField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.EmptyField) hash ^= EmptyField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.FieldMaskField) hash ^= FieldMaskField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.SourceContextField) hash ^= SourceContextField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.StructField) hash ^= StructField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.TimestampField) hash ^= TimestampField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.TypeField) hash ^= TypeField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.DoubleField) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField);
      if (oneofFieldCase_ == OneofFieldOneofCase.FloatField) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableSingleEqualityComparer.GetHashCode(FloatField);
      if (oneofFieldCase_ == OneofFieldOneofCase.Int64Field) hash ^= Int64Field.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint64Field) hash ^= Uint64Field.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.Int32Field) hash ^= Int32Field.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint32Field) hash ^= Uint32Field.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.BoolField) hash ^= BoolField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.StringField) hash ^= StringField.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.BytesField) hash ^= BytesField.GetHashCode();
      hash ^= (int) oneofFieldCase_;
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (oneofFieldCase_ == OneofFieldOneofCase.AnyField) {
        output.WriteRawTag(10);
        output.WriteMessage(AnyField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.ApiField) {
        output.WriteRawTag(18);
        output.WriteMessage(ApiField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.DurationField) {
        output.WriteRawTag(26);
        output.WriteMessage(DurationField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.EmptyField) {
        output.WriteRawTag(34);
        output.WriteMessage(EmptyField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.FieldMaskField) {
        output.WriteRawTag(42);
        output.WriteMessage(FieldMaskField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.SourceContextField) {
        output.WriteRawTag(50);
        output.WriteMessage(SourceContextField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.StructField) {
        output.WriteRawTag(58);
        output.WriteMessage(StructField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.TimestampField) {
        output.WriteRawTag(66);
        output.WriteMessage(TimestampField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.TypeField) {
        output.WriteRawTag(74);
        output.WriteMessage(TypeField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.DoubleField) {
        _oneof_doubleField_codec.WriteTagAndValue(output, (double?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.FloatField) {
        _oneof_floatField_codec.WriteTagAndValue(output, (float?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Int64Field) {
        _oneof_int64Field_codec.WriteTagAndValue(output, (long?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint64Field) {
        _oneof_uint64Field_codec.WriteTagAndValue(output, (ulong?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Int32Field) {
        _oneof_int32Field_codec.WriteTagAndValue(output, (int?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint32Field) {
        _oneof_uint32Field_codec.WriteTagAndValue(output, (uint?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.BoolField) {
        _oneof_boolField_codec.WriteTagAndValue(output, (bool?) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.StringField) {
        _oneof_stringField_codec.WriteTagAndValue(output, (string) oneofField_);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.BytesField) {
        _oneof_bytesField_codec.WriteTagAndValue(output, (pb::ByteString) oneofField_);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (oneofFieldCase_ == OneofFieldOneofCase.AnyField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(AnyField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.ApiField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ApiField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.DurationField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DurationField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.EmptyField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(EmptyField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.FieldMaskField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FieldMaskField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.SourceContextField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SourceContextField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.StructField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(StructField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.TimestampField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TimestampField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.TypeField) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TypeField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.DoubleField) {
        size += _oneof_doubleField_codec.CalculateSizeWithTag(DoubleField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.FloatField) {
        size += _oneof_floatField_codec.CalculateSizeWithTag(FloatField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Int64Field) {
        size += _oneof_int64Field_codec.CalculateSizeWithTag(Int64Field);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint64Field) {
        size += _oneof_uint64Field_codec.CalculateSizeWithTag(Uint64Field);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Int32Field) {
        size += _oneof_int32Field_codec.CalculateSizeWithTag(Int32Field);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.Uint32Field) {
        size += _oneof_uint32Field_codec.CalculateSizeWithTag(Uint32Field);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.BoolField) {
        size += _oneof_boolField_codec.CalculateSizeWithTag(BoolField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.StringField) {
        size += _oneof_stringField_codec.CalculateSizeWithTag(StringField);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.BytesField) {
        size += _oneof_bytesField_codec.CalculateSizeWithTag(BytesField);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(OneofWellKnownTypes other) {
      if (other == null) {
        return;
      }
      switch (other.OneofFieldCase) {
        case OneofFieldOneofCase.AnyField:
          if (AnyField == null) {
            AnyField = new global::Google.Protobuf.WellKnownTypes.Any();
          }
          AnyField.MergeFrom(other.AnyField);
          break;
        case OneofFieldOneofCase.ApiField:
          if (ApiField == null) {
            ApiField = new global::Google.Protobuf.WellKnownTypes.Api();
          }
          ApiField.MergeFrom(other.ApiField);
          break;
        case OneofFieldOneofCase.DurationField:
          if (DurationField == null) {
            DurationField = new global::Google.Protobuf.WellKnownTypes.Duration();
          }
          DurationField.MergeFrom(other.DurationField);
          break;
        case OneofFieldOneofCase.EmptyField:
          if (EmptyField == null) {
            EmptyField = new global::Google.Protobuf.WellKnownTypes.Empty();
          }
          EmptyField.MergeFrom(other.EmptyField);
          break;
        case OneofFieldOneofCase.FieldMaskField:
          if (FieldMaskField == null) {
            FieldMaskField = new global::Google.Protobuf.WellKnownTypes.FieldMask();
          }
          FieldMaskField.MergeFrom(other.FieldMaskField);
          break;
        case OneofFieldOneofCase.SourceContextField:
          if (SourceContextField == null) {
            SourceContextField = new global::Google.Protobuf.WellKnownTypes.SourceContext();
          }
          SourceContextField.MergeFrom(other.SourceContextField);
          break;
        case OneofFieldOneofCase.StructField:
          if (StructField == null) {
            StructField = new global::Google.Protobuf.WellKnownTypes.Struct();
          }
          StructField.MergeFrom(other.StructField);
          break;
        case OneofFieldOneofCase.TimestampField:
          if (TimestampField == null) {
            TimestampField = new global::Google.Protobuf.WellKnownTypes.Timestamp();
          }
          TimestampField.MergeFrom(other.TimestampField);
          break;
        case OneofFieldOneofCase.TypeField:
          if (TypeField == null) {
            TypeField = new global::Google.Protobuf.WellKnownTypes.Type();
          }
          TypeField.MergeFrom(other.TypeField);
          break;
        case OneofFieldOneofCase.DoubleField:
          DoubleField = other.DoubleField;
          break;
        case OneofFieldOneofCase.FloatField:
          FloatField = other.FloatField;
          break;
        case OneofFieldOneofCase.Int64Field:
          Int64Field = other.Int64Field;
          break;
        case OneofFieldOneofCase.Uint64Field:
          Uint64Field = other.Uint64Field;
          break;
        case OneofFieldOneofCase.Int32Field:
          Int32Field = other.Int32Field;
          break;
        case OneofFieldOneofCase.Uint32Field:
          Uint32Field = other.Uint32Field;
          break;
        case OneofFieldOneofCase.BoolField:
          BoolField = other.BoolField;
          break;
        case OneofFieldOneofCase.StringField:
          StringField = other.StringField;
          break;
        case OneofFieldOneofCase.BytesField:
          BytesField = other.BytesField;
          break;
      }

      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            if (!pb::UnknownFieldSet.MergeFieldFrom(ref _unknownFields, input)) {
              return;
            }
            break;
          case 10: {
            global::Google.Protobuf.WellKnownTypes.Any subBuilder = new global::Google.Protobuf.WellKnownTypes.Any();
            if (oneofFieldCase_ == OneofFieldOneofCase.AnyField) {
              subBuilder.MergeFrom(AnyField);
            }
            input.ReadMessage(subBuilder);
            AnyField = subBuilder;
            break;
          }
          case 18: {
            global::Google.Protobuf.WellKnownTypes.Api subBuilder = new global::Google.Protobuf.WellKnownTypes.Api();
            if (oneofFieldCase_ == OneofFieldOneofCase.ApiField) {
              subBuilder.MergeFrom(ApiField);
            }
            input.ReadMessage(subBuilder);
            ApiField = subBuilder;
            break;
          }
          case 26: {
            global::Google.Protobuf.WellKnownTypes.Duration subBuilder = new global::Google.Protobuf.WellKnownTypes.Duration();
            if (oneofFieldCase_ == OneofFieldOneofCase.DurationField) {
              subBuilder.MergeFrom(DurationField);
            }
            input.ReadMessage(subBuilder);
            DurationField = subBuilder;
            break;
          }
          case 34: {
            global::Google.Protobuf.WellKnownTypes.Empty subBuilder = new global::Google.Protobuf.WellKnownTypes.Empty();
            if (oneofFieldCase_ == OneofFieldOneofCase.EmptyField) {
              subBuilder.MergeFrom(EmptyField);
            }
            input.ReadMessage(subBuilder);
            EmptyField = subBuilder;
            break;
          }
          case 42: {
            global::Google.Protobuf.WellKnownTypes.FieldMask subBuilder = new global::Google.Protobuf.WellKnownTypes.FieldMask();
            if (oneofFieldCase_ == OneofFieldOneofCase.FieldMaskField) {
              subBuilder.MergeFrom(FieldMaskField);
            }
            input.ReadMessage(subBuilder);
            FieldMaskField = subBuilder;
            break;
          }
          case 50: {
            global::Google.Protobuf.WellKnownTypes.SourceContext subBuilder = new global::Google.Protobuf.WellKnownTypes.SourceContext();
            if (oneofFieldCase_ == OneofFieldOneofCase.SourceContextField) {
              subBuilder.MergeFrom(SourceContextField);
            }
            input.ReadMessage(subBuilder);
            SourceContextField = subBuilder;
            break;
          }
          case 58: {
            global::Google.Protobuf.WellKnownTypes.Struct subBuilder = new global::Google.Protobuf.WellKnownTypes.Struct();
            if (oneofFieldCase_ == OneofFieldOneofCase.StructField) {
              subBuilder.MergeFrom(StructField);
            }
            input.ReadMessage(subBuilder);
            StructField = subBuilder;
            break;
          }
          case 66: {
            global::Google.Protobuf.WellKnownTypes.Timestamp subBuilder = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            if (oneofFieldCase_ == OneofFieldOneofCase.TimestampField) {
              subBuilder.MergeFrom(TimestampField);
            }
            input.ReadMessage(subBuilder);
            TimestampField = subBuilder;
            break;
          }
          case 74: {
            global::Google.Protobuf.WellKnownTypes.Type subBuilder = new global::Google.Protobuf.WellKnownTypes.Type();
            if (oneofFieldCase_ == OneofFieldOneofCase.TypeField) {
              subBuilder.MergeFrom(TypeField);
            }
            input.ReadMessage(subBuilder);
            TypeField = subBuilder;
            break;
          }
          case 82: {
            DoubleField = _oneof_doubleField_codec.Read(input);
            break;
          }
          case 90: {
            FloatField = _oneof_floatField_codec.Read(input);
            break;
          }
          case 98: {
            Int64Field = _oneof_int64Field_codec.Read(input);
            break;
          }
          case 106: {
            Uint64Field = _oneof_uint64Field_codec.Read(input);
            break;
          }
          case 114: {
            Int32Field = _oneof_int32Field_codec.Read(input);
            break;
          }
          case 122: {
            Uint32Field = _oneof_uint32Field_codec.Read(input);
            break;
          }
          case 130: {
            BoolField = _oneof_boolField_codec.Read(input);
            break;
          }
          case 138: {
            StringField = _oneof_stringField_codec.Read(input);
            break;
          }
          case 146: {
            BytesField = _oneof_bytesField_codec.Read(input);
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// A map field for each well-known type. We only
  /// need to worry about the value part of the map being the
  /// well-known types, as messages can't be map keys.
  /// </summary>
  public sealed partial class MapWellKnownTypes : pb::IMessage<MapWellKnownTypes> {
    private static readonly pb::MessageParser<MapWellKnownTypes> _parser = new pb::MessageParser<MapWellKnownTypes>(() => new MapWellKnownTypes());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MapWellKnownTypes> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestWellKnownTypesReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MapWellKnownTypes() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MapWellKnownTypes(MapWellKnownTypes other) : this() {
      anyField_ = other.anyField_.Clone();
      apiField_ = other.apiField_.Clone();
      durationField_ = other.durationField_.Clone();
      emptyField_ = other.emptyField_.Clone();
      fieldMaskField_ = other.fieldMaskField_.Clone();
      sourceContextField_ = other.sourceContextField_.Clone();
      structField_ = other.structField_.Clone();
      timestampField_ = other.timestampField_.Clone();
      typeField_ = other.typeField_.Clone();
      doubleField_ = other.doubleField_.Clone();
      floatField_ = other.floatField_.Clone();
      int64Field_ = other.int64Field_.Clone();
      uint64Field_ = other.uint64Field_.Clone();
      int32Field_ = other.int32Field_.Clone();
      uint32Field_ = other.uint32Field_.Clone();
      boolField_ = other.boolField_.Clone();
      stringField_ = other.stringField_.Clone();
      bytesField_ = other.bytesField_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MapWellKnownTypes Clone() {
      return new MapWellKnownTypes(this);
    }

    /// <summary>Field number for the "any_field" field.</summary>
    public const int AnyFieldFieldNumber = 1;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Any>.Codec _map_anyField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Any>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Any.Parser), 10);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Any> anyField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Any>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Any> AnyField {
      get { return anyField_; }
    }

    /// <summary>Field number for the "api_field" field.</summary>
    public const int ApiFieldFieldNumber = 2;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Api>.Codec _map_apiField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Api>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Api.Parser), 18);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Api> apiField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Api>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Api> ApiField {
      get { return apiField_; }
    }

    /// <summary>Field number for the "duration_field" field.</summary>
    public const int DurationFieldFieldNumber = 3;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Duration>.Codec _map_durationField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Duration>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Duration.Parser), 26);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Duration> durationField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Duration>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Duration> DurationField {
      get { return durationField_; }
    }

    /// <summary>Field number for the "empty_field" field.</summary>
    public const int EmptyFieldFieldNumber = 4;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Empty>.Codec _map_emptyField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Empty>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Empty.Parser), 34);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Empty> emptyField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Empty>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Empty> EmptyField {
      get { return emptyField_; }
    }

    /// <summary>Field number for the "field_mask_field" field.</summary>
    public const int FieldMaskFieldFieldNumber = 5;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.FieldMask>.Codec _map_fieldMaskField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.FieldMask>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.FieldMask.Parser), 42);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.FieldMask> fieldMaskField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.FieldMask>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.FieldMask> FieldMaskField {
      get { return fieldMaskField_; }
    }

    /// <summary>Field number for the "source_context_field" field.</summary>
    public const int SourceContextFieldFieldNumber = 6;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.SourceContext>.Codec _map_sourceContextField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.SourceContext>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.SourceContext.Parser), 50);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.SourceContext> sourceContextField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.SourceContext>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.SourceContext> SourceContextField {
      get { return sourceContextField_; }
    }

    /// <summary>Field number for the "struct_field" field.</summary>
    public const int StructFieldFieldNumber = 7;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Struct>.Codec _map_structField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Struct>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Struct.Parser), 58);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Struct> structField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Struct>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Struct> StructField {
      get { return structField_; }
    }

    /// <summary>Field number for the "timestamp_field" field.</summary>
    public const int TimestampFieldFieldNumber = 8;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Timestamp>.Codec _map_timestampField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Timestamp>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Timestamp.Parser), 66);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Timestamp> timestampField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Timestamp>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Timestamp> TimestampField {
      get { return timestampField_; }
    }

    /// <summary>Field number for the "type_field" field.</summary>
    public const int TypeFieldFieldNumber = 9;
    private static readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Type>.Codec _map_typeField_codec
        = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Type>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Type.Parser), 74);
    private readonly pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Type> typeField_ = new pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Type>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, global::Google.Protobuf.WellKnownTypes.Type> TypeField {
      get { return typeField_; }
    }

    /// <summary>Field number for the "double_field" field.</summary>
    public const int DoubleFieldFieldNumber = 10;
    private static readonly pbc::MapField<int, double?>.Codec _map_doubleField_codec
        = new pbc::MapField<int, double?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<double>(18), 82);
    private readonly pbc::MapField<int, double?> doubleField_ = new pbc::MapField<int, double?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, double?> DoubleField {
      get { return doubleField_; }
    }

    /// <summary>Field number for the "float_field" field.</summary>
    public const int FloatFieldFieldNumber = 11;
    private static readonly pbc::MapField<int, float?>.Codec _map_floatField_codec
        = new pbc::MapField<int, float?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<float>(18), 90);
    private readonly pbc::MapField<int, float?> floatField_ = new pbc::MapField<int, float?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, float?> FloatField {
      get { return floatField_; }
    }

    /// <summary>Field number for the "int64_field" field.</summary>
    public const int Int64FieldFieldNumber = 12;
    private static readonly pbc::MapField<int, long?>.Codec _map_int64Field_codec
        = new pbc::MapField<int, long?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<long>(18), 98);
    private readonly pbc::MapField<int, long?> int64Field_ = new pbc::MapField<int, long?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, long?> Int64Field {
      get { return int64Field_; }
    }

    /// <summary>Field number for the "uint64_field" field.</summary>
    public const int Uint64FieldFieldNumber = 13;
    private static readonly pbc::MapField<int, ulong?>.Codec _map_uint64Field_codec
        = new pbc::MapField<int, ulong?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<ulong>(18), 106);
    private readonly pbc::MapField<int, ulong?> uint64Field_ = new pbc::MapField<int, ulong?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, ulong?> Uint64Field {
      get { return uint64Field_; }
    }

    /// <summary>Field number for the "int32_field" field.</summary>
    public const int Int32FieldFieldNumber = 14;
    private static readonly pbc::MapField<int, int?>.Codec _map_int32Field_codec
        = new pbc::MapField<int, int?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<int>(18), 114);
    private readonly pbc::MapField<int, int?> int32Field_ = new pbc::MapField<int, int?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, int?> Int32Field {
      get { return int32Field_; }
    }

    /// <summary>Field number for the "uint32_field" field.</summary>
    public const int Uint32FieldFieldNumber = 15;
    private static readonly pbc::MapField<int, uint?>.Codec _map_uint32Field_codec
        = new pbc::MapField<int, uint?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<uint>(18), 122);
    private readonly pbc::MapField<int, uint?> uint32Field_ = new pbc::MapField<int, uint?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, uint?> Uint32Field {
      get { return uint32Field_; }
    }

    /// <summary>Field number for the "bool_field" field.</summary>
    public const int BoolFieldFieldNumber = 16;
    private static readonly pbc::MapField<int, bool?>.Codec _map_boolField_codec
        = new pbc::MapField<int, bool?>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForStructWrapper<bool>(18), 130);
    private readonly pbc::MapField<int, bool?> boolField_ = new pbc::MapField<int, bool?>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, bool?> BoolField {
      get { return boolField_; }
    }

    /// <summary>Field number for the "string_field" field.</summary>
    public const int StringFieldFieldNumber = 17;
    private static readonly pbc::MapField<int, string>.Codec _map_stringField_codec
        = new pbc::MapField<int, string>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForClassWrapper<string>(18), 138);
    private readonly pbc::MapField<int, string> stringField_ = new pbc::MapField<int, string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, string> StringField {
      get { return stringField_; }
    }

    /// <summary>Field number for the "bytes_field" field.</summary>
    public const int BytesFieldFieldNumber = 18;
    private static readonly pbc::MapField<int, pb::ByteString>.Codec _map_bytesField_codec
        = new pbc::MapField<int, pb::ByteString>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForClassWrapper<pb::ByteString>(18), 146);
    private readonly pbc::MapField<int, pb::ByteString> bytesField_ = new pbc::MapField<int, pb::ByteString>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<int, pb::ByteString> BytesField {
      get { return bytesField_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MapWellKnownTypes);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MapWellKnownTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!AnyField.Equals(other.AnyField)) return false;
      if (!ApiField.Equals(other.ApiField)) return false;
      if (!DurationField.Equals(other.DurationField)) return false;
      if (!EmptyField.Equals(other.EmptyField)) return false;
      if (!FieldMaskField.Equals(other.FieldMaskField)) return false;
      if (!SourceContextField.Equals(other.SourceContextField)) return false;
      if (!StructField.Equals(other.StructField)) return false;
      if (!TimestampField.Equals(other.TimestampField)) return false;
      if (!TypeField.Equals(other.TypeField)) return false;
      if (!DoubleField.Equals(other.DoubleField)) return false;
      if (!FloatField.Equals(other.FloatField)) return false;
      if (!Int64Field.Equals(other.Int64Field)) return false;
      if (!Uint64Field.Equals(other.Uint64Field)) return false;
      if (!Int32Field.Equals(other.Int32Field)) return false;
      if (!Uint32Field.Equals(other.Uint32Field)) return false;
      if (!BoolField.Equals(other.BoolField)) return false;
      if (!StringField.Equals(other.StringField)) return false;
      if (!BytesField.Equals(other.BytesField)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= AnyField.GetHashCode();
      hash ^= ApiField.GetHashCode();
      hash ^= DurationField.GetHashCode();
      hash ^= EmptyField.GetHashCode();
      hash ^= FieldMaskField.GetHashCode();
      hash ^= SourceContextField.GetHashCode();
      hash ^= StructField.GetHashCode();
      hash ^= TimestampField.GetHashCode();
      hash ^= TypeField.GetHashCode();
      hash ^= DoubleField.GetHashCode();
      hash ^= FloatField.GetHashCode();
      hash ^= Int64Field.GetHashCode();
      hash ^= Uint64Field.GetHashCode();
      hash ^= Int32Field.GetHashCode();
      hash ^= Uint32Field.GetHashCode();
      hash ^= BoolField.GetHashCode();
      hash ^= StringField.GetHashCode();
      hash ^= BytesField.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      anyField_.WriteTo(output, _map_anyField_codec);
      apiField_.WriteTo(output, _map_apiField_codec);
      durationField_.WriteTo(output, _map_durationField_codec);
      emptyField_.WriteTo(output, _map_emptyField_codec);
      fieldMaskField_.WriteTo(output, _map_fieldMaskField_codec);
      sourceContextField_.WriteTo(output, _map_sourceContextField_codec);
      structField_.WriteTo(output, _map_structField_codec);
      timestampField_.WriteTo(output, _map_timestampField_codec);
      typeField_.WriteTo(output, _map_typeField_codec);
      doubleField_.WriteTo(output, _map_doubleField_codec);
      floatField_.WriteTo(output, _map_floatField_codec);
      int64Field_.WriteTo(output, _map_int64Field_codec);
      uint64Field_.WriteTo(output, _map_uint64Field_codec);
      int32Field_.WriteTo(output, _map_int32Field_codec);
      uint32Field_.WriteTo(output, _map_uint32Field_codec);
      boolField_.WriteTo(output, _map_boolField_codec);
      stringField_.WriteTo(output, _map_stringField_codec);
      bytesField_.WriteTo(output, _map_bytesField_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += anyField_.CalculateSize(_map_anyField_codec);
      size += apiField_.CalculateSize(_map_apiField_codec);
      size += durationField_.CalculateSize(_map_durationField_codec);
      size += emptyField_.CalculateSize(_map_emptyField_codec);
      size += fieldMaskField_.CalculateSize(_map_fieldMaskField_codec);
      size += sourceContextField_.CalculateSize(_map_sourceContextField_codec);
      size += structField_.CalculateSize(_map_structField_codec);
      size += timestampField_.CalculateSize(_map_timestampField_codec);
      size += typeField_.CalculateSize(_map_typeField_codec);
      size += doubleField_.CalculateSize(_map_doubleField_codec);
      size += floatField_.CalculateSize(_map_floatField_codec);
      size += int64Field_.CalculateSize(_map_int64Field_codec);
      size += uint64Field_.CalculateSize(_map_uint64Field_codec);
      size += int32Field_.CalculateSize(_map_int32Field_codec);
      size += uint32Field_.CalculateSize(_map_uint32Field_codec);
      size += boolField_.CalculateSize(_map_boolField_codec);
      size += stringField_.CalculateSize(_map_stringField_codec);
      size += bytesField_.CalculateSize(_map_bytesField_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MapWellKnownTypes other) {
      if (other == null) {
        return;
      }
      anyField_.Add(other.anyField_);
      apiField_.Add(other.apiField_);
      durationField_.Add(other.durationField_);
      emptyField_.Add(other.emptyField_);
      fieldMaskField_.Add(other.fieldMaskField_);
      sourceContextField_.Add(other.sourceContextField_);
      structField_.Add(other.structField_);
      timestampField_.Add(other.timestampField_);
      typeField_.Add(other.typeField_);
      doubleField_.Add(other.doubleField_);
      floatField_.Add(other.floatField_);
      int64Field_.Add(other.int64Field_);
      uint64Field_.Add(other.uint64Field_);
      int32Field_.Add(other.int32Field_);
      uint32Field_.Add(other.uint32Field_);
      boolField_.Add(other.boolField_);
      stringField_.Add(other.stringField_);
      bytesField_.Add(other.bytesField_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            if (!pb::UnknownFieldSet.MergeFieldFrom(ref _unknownFields, input)) {
              return;
            }
            break;
          case 10: {
            anyField_.AddEntriesFrom(input, _map_anyField_codec);
            break;
          }
          case 18: {
            apiField_.AddEntriesFrom(input, _map_apiField_codec);
            break;
          }
          case 26: {
            durationField_.AddEntriesFrom(input, _map_durationField_codec);
            break;
          }
          case 34: {
            emptyField_.AddEntriesFrom(input, _map_emptyField_codec);
            break;
          }
          case 42: {
            fieldMaskField_.AddEntriesFrom(input, _map_fieldMaskField_codec);
            break;
          }
          case 50: {
            sourceContextField_.AddEntriesFrom(input, _map_sourceContextField_codec);
            break;
          }
          case 58: {
            structField_.AddEntriesFrom(input, _map_structField_codec);
            break;
          }
          case 66: {
            timestampField_.AddEntriesFrom(input, _map_timestampField_codec);
            break;
          }
          case 74: {
            typeField_.AddEntriesFrom(input, _map_typeField_codec);
            break;
          }
          case 82: {
            doubleField_.AddEntriesFrom(input, _map_doubleField_codec);
            break;
          }
          case 90: {
            floatField_.AddEntriesFrom(input, _map_floatField_codec);
            break;
          }
          case 98: {
            int64Field_.AddEntriesFrom(input, _map_int64Field_codec);
            break;
          }
          case 106: {
            uint64Field_.AddEntriesFrom(input, _map_uint64Field_codec);
            break;
          }
          case 114: {
            int32Field_.AddEntriesFrom(input, _map_int32Field_codec);
            break;
          }
          case 122: {
            uint32Field_.AddEntriesFrom(input, _map_uint32Field_codec);
            break;
          }
          case 130: {
            boolField_.AddEntriesFrom(input, _map_boolField_codec);
            break;
          }
          case 138: {
            stringField_.AddEntriesFrom(input, _map_stringField_codec);
            break;
          }
          case 146: {
            bytesField_.AddEntriesFrom(input, _map_bytesField_codec);
            break;
          }
        }
      }
    }

  }

  #endregion

}

#endregion Designer generated code
