/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
/* Generated from: proto/keyexchange.proto */

/* Do not generate deprecated warnings for self */
#ifndef PROTOBUF_C__NO_DEPRECATED
#define PROTOBUF_C__NO_DEPRECATED
#endif

#include "keyexchange.pb-c.h"
void   client_hello__init
                     (ClientHello         *message)
{
  static const ClientHello init_value = CLIENT_HELLO__INIT;
  *message = init_value;
}
size_t client_hello__get_packed_size
                     (const ClientHello *message)
{
  assert(message->base.descriptor == &client_hello__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t client_hello__pack
                     (const ClientHello *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &client_hello__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t client_hello__pack_to_buffer
                     (const ClientHello *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &client_hello__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
ClientHello *
       client_hello__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (ClientHello *)
     protobuf_c_message_unpack (&client_hello__descriptor,
                                allocator, len, data);
}
void   client_hello__free_unpacked
                     (ClientHello *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &client_hello__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   build_info__init
                     (BuildInfo         *message)
{
  static const BuildInfo init_value = BUILD_INFO__INIT;
  *message = init_value;
}
size_t build_info__get_packed_size
                     (const BuildInfo *message)
{
  assert(message->base.descriptor == &build_info__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t build_info__pack
                     (const BuildInfo *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &build_info__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t build_info__pack_to_buffer
                     (const BuildInfo *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &build_info__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
BuildInfo *
       build_info__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (BuildInfo *)
     protobuf_c_message_unpack (&build_info__descriptor,
                                allocator, len, data);
}
void   build_info__free_unpacked
                     (BuildInfo *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &build_info__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_hello_union__init
                     (LoginCryptoHelloUnion         *message)
{
  static const LoginCryptoHelloUnion init_value = LOGIN_CRYPTO_HELLO_UNION__INIT;
  *message = init_value;
}
size_t login_crypto_hello_union__get_packed_size
                     (const LoginCryptoHelloUnion *message)
{
  assert(message->base.descriptor == &login_crypto_hello_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_hello_union__pack
                     (const LoginCryptoHelloUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_hello_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_hello_union__pack_to_buffer
                     (const LoginCryptoHelloUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_hello_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoHelloUnion *
       login_crypto_hello_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoHelloUnion *)
     protobuf_c_message_unpack (&login_crypto_hello_union__descriptor,
                                allocator, len, data);
}
void   login_crypto_hello_union__free_unpacked
                     (LoginCryptoHelloUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_hello_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_diffie_hellman_hello__init
                     (LoginCryptoDiffieHellmanHello         *message)
{
  static const LoginCryptoDiffieHellmanHello init_value = LOGIN_CRYPTO_DIFFIE_HELLMAN_HELLO__INIT;
  *message = init_value;
}
size_t login_crypto_diffie_hellman_hello__get_packed_size
                     (const LoginCryptoDiffieHellmanHello *message)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_hello__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_diffie_hellman_hello__pack
                     (const LoginCryptoDiffieHellmanHello *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_hello__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_diffie_hellman_hello__pack_to_buffer
                     (const LoginCryptoDiffieHellmanHello *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_hello__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoDiffieHellmanHello *
       login_crypto_diffie_hellman_hello__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoDiffieHellmanHello *)
     protobuf_c_message_unpack (&login_crypto_diffie_hellman_hello__descriptor,
                                allocator, len, data);
}
void   login_crypto_diffie_hellman_hello__free_unpacked
                     (LoginCryptoDiffieHellmanHello *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_diffie_hellman_hello__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   feature_set__init
                     (FeatureSet         *message)
{
  static const FeatureSet init_value = FEATURE_SET__INIT;
  *message = init_value;
}
size_t feature_set__get_packed_size
                     (const FeatureSet *message)
{
  assert(message->base.descriptor == &feature_set__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t feature_set__pack
                     (const FeatureSet *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &feature_set__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t feature_set__pack_to_buffer
                     (const FeatureSet *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &feature_set__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
FeatureSet *
       feature_set__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (FeatureSet *)
     protobuf_c_message_unpack (&feature_set__descriptor,
                                allocator, len, data);
}
void   feature_set__free_unpacked
                     (FeatureSet *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &feature_set__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   apresponse_message__init
                     (APResponseMessage         *message)
{
  static const APResponseMessage init_value = APRESPONSE_MESSAGE__INIT;
  *message = init_value;
}
size_t apresponse_message__get_packed_size
                     (const APResponseMessage *message)
{
  assert(message->base.descriptor == &apresponse_message__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t apresponse_message__pack
                     (const APResponseMessage *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &apresponse_message__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t apresponse_message__pack_to_buffer
                     (const APResponseMessage *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &apresponse_message__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
APResponseMessage *
       apresponse_message__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (APResponseMessage *)
     protobuf_c_message_unpack (&apresponse_message__descriptor,
                                allocator, len, data);
}
void   apresponse_message__free_unpacked
                     (APResponseMessage *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &apresponse_message__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   apchallenge__init
                     (APChallenge         *message)
{
  static const APChallenge init_value = APCHALLENGE__INIT;
  *message = init_value;
}
size_t apchallenge__get_packed_size
                     (const APChallenge *message)
{
  assert(message->base.descriptor == &apchallenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t apchallenge__pack
                     (const APChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &apchallenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t apchallenge__pack_to_buffer
                     (const APChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &apchallenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
APChallenge *
       apchallenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (APChallenge *)
     protobuf_c_message_unpack (&apchallenge__descriptor,
                                allocator, len, data);
}
void   apchallenge__free_unpacked
                     (APChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &apchallenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_challenge_union__init
                     (LoginCryptoChallengeUnion         *message)
{
  static const LoginCryptoChallengeUnion init_value = LOGIN_CRYPTO_CHALLENGE_UNION__INIT;
  *message = init_value;
}
size_t login_crypto_challenge_union__get_packed_size
                     (const LoginCryptoChallengeUnion *message)
{
  assert(message->base.descriptor == &login_crypto_challenge_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_challenge_union__pack
                     (const LoginCryptoChallengeUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_challenge_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_challenge_union__pack_to_buffer
                     (const LoginCryptoChallengeUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_challenge_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoChallengeUnion *
       login_crypto_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoChallengeUnion *)
     protobuf_c_message_unpack (&login_crypto_challenge_union__descriptor,
                                allocator, len, data);
}
void   login_crypto_challenge_union__free_unpacked
                     (LoginCryptoChallengeUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_challenge_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_diffie_hellman_challenge__init
                     (LoginCryptoDiffieHellmanChallenge         *message)
{
  static const LoginCryptoDiffieHellmanChallenge init_value = LOGIN_CRYPTO_DIFFIE_HELLMAN_CHALLENGE__INIT;
  *message = init_value;
}
size_t login_crypto_diffie_hellman_challenge__get_packed_size
                     (const LoginCryptoDiffieHellmanChallenge *message)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_diffie_hellman_challenge__pack
                     (const LoginCryptoDiffieHellmanChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_diffie_hellman_challenge__pack_to_buffer
                     (const LoginCryptoDiffieHellmanChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoDiffieHellmanChallenge *
       login_crypto_diffie_hellman_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoDiffieHellmanChallenge *)
     protobuf_c_message_unpack (&login_crypto_diffie_hellman_challenge__descriptor,
                                allocator, len, data);
}
void   login_crypto_diffie_hellman_challenge__free_unpacked
                     (LoginCryptoDiffieHellmanChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_diffie_hellman_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   fingerprint_challenge_union__init
                     (FingerprintChallengeUnion         *message)
{
  static const FingerprintChallengeUnion init_value = FINGERPRINT_CHALLENGE_UNION__INIT;
  *message = init_value;
}
size_t fingerprint_challenge_union__get_packed_size
                     (const FingerprintChallengeUnion *message)
{
  assert(message->base.descriptor == &fingerprint_challenge_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t fingerprint_challenge_union__pack
                     (const FingerprintChallengeUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &fingerprint_challenge_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t fingerprint_challenge_union__pack_to_buffer
                     (const FingerprintChallengeUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &fingerprint_challenge_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
FingerprintChallengeUnion *
       fingerprint_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (FingerprintChallengeUnion *)
     protobuf_c_message_unpack (&fingerprint_challenge_union__descriptor,
                                allocator, len, data);
}
void   fingerprint_challenge_union__free_unpacked
                     (FingerprintChallengeUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &fingerprint_challenge_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   fingerprint_grain_challenge__init
                     (FingerprintGrainChallenge         *message)
{
  static const FingerprintGrainChallenge init_value = FINGERPRINT_GRAIN_CHALLENGE__INIT;
  *message = init_value;
}
size_t fingerprint_grain_challenge__get_packed_size
                     (const FingerprintGrainChallenge *message)
{
  assert(message->base.descriptor == &fingerprint_grain_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t fingerprint_grain_challenge__pack
                     (const FingerprintGrainChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &fingerprint_grain_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t fingerprint_grain_challenge__pack_to_buffer
                     (const FingerprintGrainChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &fingerprint_grain_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
FingerprintGrainChallenge *
       fingerprint_grain_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (FingerprintGrainChallenge *)
     protobuf_c_message_unpack (&fingerprint_grain_challenge__descriptor,
                                allocator, len, data);
}
void   fingerprint_grain_challenge__free_unpacked
                     (FingerprintGrainChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &fingerprint_grain_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   fingerprint_hmac_ripemd_challenge__init
                     (FingerprintHmacRipemdChallenge         *message)
{
  static const FingerprintHmacRipemdChallenge init_value = FINGERPRINT_HMAC_RIPEMD_CHALLENGE__INIT;
  *message = init_value;
}
size_t fingerprint_hmac_ripemd_challenge__get_packed_size
                     (const FingerprintHmacRipemdChallenge *message)
{
  assert(message->base.descriptor == &fingerprint_hmac_ripemd_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t fingerprint_hmac_ripemd_challenge__pack
                     (const FingerprintHmacRipemdChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &fingerprint_hmac_ripemd_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t fingerprint_hmac_ripemd_challenge__pack_to_buffer
                     (const FingerprintHmacRipemdChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &fingerprint_hmac_ripemd_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
FingerprintHmacRipemdChallenge *
       fingerprint_hmac_ripemd_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (FingerprintHmacRipemdChallenge *)
     protobuf_c_message_unpack (&fingerprint_hmac_ripemd_challenge__descriptor,
                                allocator, len, data);
}
void   fingerprint_hmac_ripemd_challenge__free_unpacked
                     (FingerprintHmacRipemdChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &fingerprint_hmac_ripemd_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   po_wchallenge_union__init
                     (PoWChallengeUnion         *message)
{
  static const PoWChallengeUnion init_value = PO_WCHALLENGE_UNION__INIT;
  *message = init_value;
}
size_t po_wchallenge_union__get_packed_size
                     (const PoWChallengeUnion *message)
{
  assert(message->base.descriptor == &po_wchallenge_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t po_wchallenge_union__pack
                     (const PoWChallengeUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &po_wchallenge_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t po_wchallenge_union__pack_to_buffer
                     (const PoWChallengeUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &po_wchallenge_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
PoWChallengeUnion *
       po_wchallenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (PoWChallengeUnion *)
     protobuf_c_message_unpack (&po_wchallenge_union__descriptor,
                                allocator, len, data);
}
void   po_wchallenge_union__free_unpacked
                     (PoWChallengeUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &po_wchallenge_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   po_whash_cash_challenge__init
                     (PoWHashCashChallenge         *message)
{
  static const PoWHashCashChallenge init_value = PO_WHASH_CASH_CHALLENGE__INIT;
  *message = init_value;
}
size_t po_whash_cash_challenge__get_packed_size
                     (const PoWHashCashChallenge *message)
{
  assert(message->base.descriptor == &po_whash_cash_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t po_whash_cash_challenge__pack
                     (const PoWHashCashChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &po_whash_cash_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t po_whash_cash_challenge__pack_to_buffer
                     (const PoWHashCashChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &po_whash_cash_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
PoWHashCashChallenge *
       po_whash_cash_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (PoWHashCashChallenge *)
     protobuf_c_message_unpack (&po_whash_cash_challenge__descriptor,
                                allocator, len, data);
}
void   po_whash_cash_challenge__free_unpacked
                     (PoWHashCashChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &po_whash_cash_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_challenge_union__init
                     (CryptoChallengeUnion         *message)
{
  static const CryptoChallengeUnion init_value = CRYPTO_CHALLENGE_UNION__INIT;
  *message = init_value;
}
size_t crypto_challenge_union__get_packed_size
                     (const CryptoChallengeUnion *message)
{
  assert(message->base.descriptor == &crypto_challenge_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_challenge_union__pack
                     (const CryptoChallengeUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_challenge_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_challenge_union__pack_to_buffer
                     (const CryptoChallengeUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_challenge_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoChallengeUnion *
       crypto_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoChallengeUnion *)
     protobuf_c_message_unpack (&crypto_challenge_union__descriptor,
                                allocator, len, data);
}
void   crypto_challenge_union__free_unpacked
                     (CryptoChallengeUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_challenge_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_shannon_challenge__init
                     (CryptoShannonChallenge         *message)
{
  static const CryptoShannonChallenge init_value = CRYPTO_SHANNON_CHALLENGE__INIT;
  *message = init_value;
}
size_t crypto_shannon_challenge__get_packed_size
                     (const CryptoShannonChallenge *message)
{
  assert(message->base.descriptor == &crypto_shannon_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_shannon_challenge__pack
                     (const CryptoShannonChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_shannon_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_shannon_challenge__pack_to_buffer
                     (const CryptoShannonChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_shannon_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoShannonChallenge *
       crypto_shannon_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoShannonChallenge *)
     protobuf_c_message_unpack (&crypto_shannon_challenge__descriptor,
                                allocator, len, data);
}
void   crypto_shannon_challenge__free_unpacked
                     (CryptoShannonChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_shannon_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_rc4_sha1_hmac_challenge__init
                     (CryptoRc4Sha1HmacChallenge         *message)
{
  static const CryptoRc4Sha1HmacChallenge init_value = CRYPTO_RC4_SHA1_HMAC_CHALLENGE__INIT;
  *message = init_value;
}
size_t crypto_rc4_sha1_hmac_challenge__get_packed_size
                     (const CryptoRc4Sha1HmacChallenge *message)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_challenge__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_rc4_sha1_hmac_challenge__pack
                     (const CryptoRc4Sha1HmacChallenge *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_challenge__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_rc4_sha1_hmac_challenge__pack_to_buffer
                     (const CryptoRc4Sha1HmacChallenge *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_challenge__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoRc4Sha1HmacChallenge *
       crypto_rc4_sha1_hmac_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoRc4Sha1HmacChallenge *)
     protobuf_c_message_unpack (&crypto_rc4_sha1_hmac_challenge__descriptor,
                                allocator, len, data);
}
void   crypto_rc4_sha1_hmac_challenge__free_unpacked
                     (CryptoRc4Sha1HmacChallenge *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_challenge__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   upgrade_required_message__init
                     (UpgradeRequiredMessage         *message)
{
  static const UpgradeRequiredMessage init_value = UPGRADE_REQUIRED_MESSAGE__INIT;
  *message = init_value;
}
size_t upgrade_required_message__get_packed_size
                     (const UpgradeRequiredMessage *message)
{
  assert(message->base.descriptor == &upgrade_required_message__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t upgrade_required_message__pack
                     (const UpgradeRequiredMessage *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &upgrade_required_message__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t upgrade_required_message__pack_to_buffer
                     (const UpgradeRequiredMessage *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &upgrade_required_message__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
UpgradeRequiredMessage *
       upgrade_required_message__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (UpgradeRequiredMessage *)
     protobuf_c_message_unpack (&upgrade_required_message__descriptor,
                                allocator, len, data);
}
void   upgrade_required_message__free_unpacked
                     (UpgradeRequiredMessage *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &upgrade_required_message__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   aplogin_failed__init
                     (APLoginFailed         *message)
{
  static const APLoginFailed init_value = APLOGIN_FAILED__INIT;
  *message = init_value;
}
size_t aplogin_failed__get_packed_size
                     (const APLoginFailed *message)
{
  assert(message->base.descriptor == &aplogin_failed__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t aplogin_failed__pack
                     (const APLoginFailed *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &aplogin_failed__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t aplogin_failed__pack_to_buffer
                     (const APLoginFailed *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &aplogin_failed__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
APLoginFailed *
       aplogin_failed__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (APLoginFailed *)
     protobuf_c_message_unpack (&aplogin_failed__descriptor,
                                allocator, len, data);
}
void   aplogin_failed__free_unpacked
                     (APLoginFailed *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &aplogin_failed__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   client_response_plaintext__init
                     (ClientResponsePlaintext         *message)
{
  static const ClientResponsePlaintext init_value = CLIENT_RESPONSE_PLAINTEXT__INIT;
  *message = init_value;
}
size_t client_response_plaintext__get_packed_size
                     (const ClientResponsePlaintext *message)
{
  assert(message->base.descriptor == &client_response_plaintext__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t client_response_plaintext__pack
                     (const ClientResponsePlaintext *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &client_response_plaintext__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t client_response_plaintext__pack_to_buffer
                     (const ClientResponsePlaintext *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &client_response_plaintext__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
ClientResponsePlaintext *
       client_response_plaintext__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (ClientResponsePlaintext *)
     protobuf_c_message_unpack (&client_response_plaintext__descriptor,
                                allocator, len, data);
}
void   client_response_plaintext__free_unpacked
                     (ClientResponsePlaintext *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &client_response_plaintext__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_response_union__init
                     (LoginCryptoResponseUnion         *message)
{
  static const LoginCryptoResponseUnion init_value = LOGIN_CRYPTO_RESPONSE_UNION__INIT;
  *message = init_value;
}
size_t login_crypto_response_union__get_packed_size
                     (const LoginCryptoResponseUnion *message)
{
  assert(message->base.descriptor == &login_crypto_response_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_response_union__pack
                     (const LoginCryptoResponseUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_response_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_response_union__pack_to_buffer
                     (const LoginCryptoResponseUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_response_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoResponseUnion *
       login_crypto_response_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoResponseUnion *)
     protobuf_c_message_unpack (&login_crypto_response_union__descriptor,
                                allocator, len, data);
}
void   login_crypto_response_union__free_unpacked
                     (LoginCryptoResponseUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_response_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   login_crypto_diffie_hellman_response__init
                     (LoginCryptoDiffieHellmanResponse         *message)
{
  static const LoginCryptoDiffieHellmanResponse init_value = LOGIN_CRYPTO_DIFFIE_HELLMAN_RESPONSE__INIT;
  *message = init_value;
}
size_t login_crypto_diffie_hellman_response__get_packed_size
                     (const LoginCryptoDiffieHellmanResponse *message)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_response__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t login_crypto_diffie_hellman_response__pack
                     (const LoginCryptoDiffieHellmanResponse *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_response__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t login_crypto_diffie_hellman_response__pack_to_buffer
                     (const LoginCryptoDiffieHellmanResponse *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &login_crypto_diffie_hellman_response__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
LoginCryptoDiffieHellmanResponse *
       login_crypto_diffie_hellman_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (LoginCryptoDiffieHellmanResponse *)
     protobuf_c_message_unpack (&login_crypto_diffie_hellman_response__descriptor,
                                allocator, len, data);
}
void   login_crypto_diffie_hellman_response__free_unpacked
                     (LoginCryptoDiffieHellmanResponse *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &login_crypto_diffie_hellman_response__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   po_wresponse_union__init
                     (PoWResponseUnion         *message)
{
  static const PoWResponseUnion init_value = PO_WRESPONSE_UNION__INIT;
  *message = init_value;
}
size_t po_wresponse_union__get_packed_size
                     (const PoWResponseUnion *message)
{
  assert(message->base.descriptor == &po_wresponse_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t po_wresponse_union__pack
                     (const PoWResponseUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &po_wresponse_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t po_wresponse_union__pack_to_buffer
                     (const PoWResponseUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &po_wresponse_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
PoWResponseUnion *
       po_wresponse_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (PoWResponseUnion *)
     protobuf_c_message_unpack (&po_wresponse_union__descriptor,
                                allocator, len, data);
}
void   po_wresponse_union__free_unpacked
                     (PoWResponseUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &po_wresponse_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   po_whash_cash_response__init
                     (PoWHashCashResponse         *message)
{
  static const PoWHashCashResponse init_value = PO_WHASH_CASH_RESPONSE__INIT;
  *message = init_value;
}
size_t po_whash_cash_response__get_packed_size
                     (const PoWHashCashResponse *message)
{
  assert(message->base.descriptor == &po_whash_cash_response__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t po_whash_cash_response__pack
                     (const PoWHashCashResponse *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &po_whash_cash_response__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t po_whash_cash_response__pack_to_buffer
                     (const PoWHashCashResponse *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &po_whash_cash_response__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
PoWHashCashResponse *
       po_whash_cash_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (PoWHashCashResponse *)
     protobuf_c_message_unpack (&po_whash_cash_response__descriptor,
                                allocator, len, data);
}
void   po_whash_cash_response__free_unpacked
                     (PoWHashCashResponse *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &po_whash_cash_response__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_response_union__init
                     (CryptoResponseUnion         *message)
{
  static const CryptoResponseUnion init_value = CRYPTO_RESPONSE_UNION__INIT;
  *message = init_value;
}
size_t crypto_response_union__get_packed_size
                     (const CryptoResponseUnion *message)
{
  assert(message->base.descriptor == &crypto_response_union__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_response_union__pack
                     (const CryptoResponseUnion *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_response_union__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_response_union__pack_to_buffer
                     (const CryptoResponseUnion *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_response_union__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoResponseUnion *
       crypto_response_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoResponseUnion *)
     protobuf_c_message_unpack (&crypto_response_union__descriptor,
                                allocator, len, data);
}
void   crypto_response_union__free_unpacked
                     (CryptoResponseUnion *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_response_union__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_shannon_response__init
                     (CryptoShannonResponse         *message)
{
  static const CryptoShannonResponse init_value = CRYPTO_SHANNON_RESPONSE__INIT;
  *message = init_value;
}
size_t crypto_shannon_response__get_packed_size
                     (const CryptoShannonResponse *message)
{
  assert(message->base.descriptor == &crypto_shannon_response__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_shannon_response__pack
                     (const CryptoShannonResponse *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_shannon_response__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_shannon_response__pack_to_buffer
                     (const CryptoShannonResponse *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_shannon_response__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoShannonResponse *
       crypto_shannon_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoShannonResponse *)
     protobuf_c_message_unpack (&crypto_shannon_response__descriptor,
                                allocator, len, data);
}
void   crypto_shannon_response__free_unpacked
                     (CryptoShannonResponse *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_shannon_response__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
void   crypto_rc4_sha1_hmac_response__init
                     (CryptoRc4Sha1HmacResponse         *message)
{
  static const CryptoRc4Sha1HmacResponse init_value = CRYPTO_RC4_SHA1_HMAC_RESPONSE__INIT;
  *message = init_value;
}
size_t crypto_rc4_sha1_hmac_response__get_packed_size
                     (const CryptoRc4Sha1HmacResponse *message)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_response__descriptor);
  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t crypto_rc4_sha1_hmac_response__pack
                     (const CryptoRc4Sha1HmacResponse *message,
                      uint8_t       *out)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_response__descriptor);
  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
size_t crypto_rc4_sha1_hmac_response__pack_to_buffer
                     (const CryptoRc4Sha1HmacResponse *message,
                      ProtobufCBuffer *buffer)
{
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_response__descriptor);
  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
}
CryptoRc4Sha1HmacResponse *
       crypto_rc4_sha1_hmac_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data)
{
  return (CryptoRc4Sha1HmacResponse *)
     protobuf_c_message_unpack (&crypto_rc4_sha1_hmac_response__descriptor,
                                allocator, len, data);
}
void   crypto_rc4_sha1_hmac_response__free_unpacked
                     (CryptoRc4Sha1HmacResponse *message,
                      ProtobufCAllocator *allocator)
{
  if(!message)
    return;
  assert(message->base.descriptor == &crypto_rc4_sha1_hmac_response__descriptor);
  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
}
static const ProtobufCFieldDescriptor client_hello__field_descriptors[8] =
{
  {
    "build_info",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientHello, build_info),
    &build_info__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "fingerprints_supported",
    20,
    PROTOBUF_C_LABEL_REPEATED,
    PROTOBUF_C_TYPE_ENUM,
    offsetof(ClientHello, n_fingerprints_supported),
    offsetof(ClientHello, fingerprints_supported),
    &fingerprint__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "cryptosuites_supported",
    30,
    PROTOBUF_C_LABEL_REPEATED,
    PROTOBUF_C_TYPE_ENUM,
    offsetof(ClientHello, n_cryptosuites_supported),
    offsetof(ClientHello, cryptosuites_supported),
    &cryptosuite__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "powschemes_supported",
    40,
    PROTOBUF_C_LABEL_REPEATED,
    PROTOBUF_C_TYPE_ENUM,
    offsetof(ClientHello, n_powschemes_supported),
    offsetof(ClientHello, powschemes_supported),
    &powscheme__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "login_crypto_hello",
    50,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientHello, login_crypto_hello),
    &login_crypto_hello_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "client_nonce",
    60,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(ClientHello, client_nonce),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "padding",
    70,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_BYTES,
    offsetof(ClientHello, has_padding),
    offsetof(ClientHello, padding),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "feature_set",
    80,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientHello, feature_set),
    &feature_set__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned client_hello__field_indices_by_name[] = {
  0,   /* field[0] = build_info */
  5,   /* field[5] = client_nonce */
  2,   /* field[2] = cryptosuites_supported */
  7,   /* field[7] = feature_set */
  1,   /* field[1] = fingerprints_supported */
  4,   /* field[4] = login_crypto_hello */
  6,   /* field[6] = padding */
  3,   /* field[3] = powschemes_supported */
};
static const ProtobufCIntRange client_hello__number_ranges[8 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 40, 3 },
  { 50, 4 },
  { 60, 5 },
  { 70, 6 },
  { 80, 7 },
  { 0, 8 }
};
const ProtobufCMessageDescriptor client_hello__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "ClientHello",
  "ClientHello",
  "ClientHello",
  "",
  sizeof(ClientHello),
  8,
  client_hello__field_descriptors,
  client_hello__field_indices_by_name,
  8,  client_hello__number_ranges,
  (ProtobufCMessageInit) client_hello__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor build_info__field_descriptors[4] =
{
  {
    "product",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_ENUM,
    0,   /* quantifier_offset */
    offsetof(BuildInfo, product),
    &product__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "product_flags",
    20,
    PROTOBUF_C_LABEL_REPEATED,
    PROTOBUF_C_TYPE_ENUM,
    offsetof(BuildInfo, n_product_flags),
    offsetof(BuildInfo, product_flags),
    &product_flags__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "platform",
    30,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_ENUM,
    0,   /* quantifier_offset */
    offsetof(BuildInfo, platform),
    &platform__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "version",
    40,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_UINT64,
    0,   /* quantifier_offset */
    offsetof(BuildInfo, version),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned build_info__field_indices_by_name[] = {
  2,   /* field[2] = platform */
  0,   /* field[0] = product */
  1,   /* field[1] = product_flags */
  3,   /* field[3] = version */
};
static const ProtobufCIntRange build_info__number_ranges[4 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 40, 3 },
  { 0, 4 }
};
const ProtobufCMessageDescriptor build_info__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "BuildInfo",
  "BuildInfo",
  "BuildInfo",
  "",
  sizeof(BuildInfo),
  4,
  build_info__field_descriptors,
  build_info__field_indices_by_name,
  4,  build_info__number_ranges,
  (ProtobufCMessageInit) build_info__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_hello_union__field_descriptors[1] =
{
  {
    "diffie_hellman",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoHelloUnion, diffie_hellman),
    &login_crypto_diffie_hellman_hello__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_hello_union__field_indices_by_name[] = {
  0,   /* field[0] = diffie_hellman */
};
static const ProtobufCIntRange login_crypto_hello_union__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor login_crypto_hello_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoHelloUnion",
  "LoginCryptoHelloUnion",
  "LoginCryptoHelloUnion",
  "",
  sizeof(LoginCryptoHelloUnion),
  1,
  login_crypto_hello_union__field_descriptors,
  login_crypto_hello_union__field_indices_by_name,
  1,  login_crypto_hello_union__number_ranges,
  (ProtobufCMessageInit) login_crypto_hello_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_diffie_hellman_hello__field_descriptors[2] =
{
  {
    "gc",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanHello, gc),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "server_keys_known",
    20,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_UINT32,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanHello, server_keys_known),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_diffie_hellman_hello__field_indices_by_name[] = {
  0,   /* field[0] = gc */
  1,   /* field[1] = server_keys_known */
};
static const ProtobufCIntRange login_crypto_diffie_hellman_hello__number_ranges[2 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 0, 2 }
};
const ProtobufCMessageDescriptor login_crypto_diffie_hellman_hello__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoDiffieHellmanHello",
  "LoginCryptoDiffieHellmanHello",
  "LoginCryptoDiffieHellmanHello",
  "",
  sizeof(LoginCryptoDiffieHellmanHello),
  2,
  login_crypto_diffie_hellman_hello__field_descriptors,
  login_crypto_diffie_hellman_hello__field_indices_by_name,
  2,  login_crypto_diffie_hellman_hello__number_ranges,
  (ProtobufCMessageInit) login_crypto_diffie_hellman_hello__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor feature_set__field_descriptors[2] =
{
  {
    "autoupdate2",
    1,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_BOOL,
    offsetof(FeatureSet, has_autoupdate2),
    offsetof(FeatureSet, autoupdate2),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "current_location",
    2,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_BOOL,
    offsetof(FeatureSet, has_current_location),
    offsetof(FeatureSet, current_location),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned feature_set__field_indices_by_name[] = {
  0,   /* field[0] = autoupdate2 */
  1,   /* field[1] = current_location */
};
static const ProtobufCIntRange feature_set__number_ranges[1 + 1] =
{
  { 1, 0 },
  { 0, 2 }
};
const ProtobufCMessageDescriptor feature_set__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "FeatureSet",
  "FeatureSet",
  "FeatureSet",
  "",
  sizeof(FeatureSet),
  2,
  feature_set__field_descriptors,
  feature_set__field_indices_by_name,
  1,  feature_set__number_ranges,
  (ProtobufCMessageInit) feature_set__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor apresponse_message__field_descriptors[3] =
{
  {
    "challenge",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APResponseMessage, challenge),
    &apchallenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "upgrade",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APResponseMessage, upgrade),
    &upgrade_required_message__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "login_failed",
    30,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APResponseMessage, login_failed),
    &aplogin_failed__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned apresponse_message__field_indices_by_name[] = {
  0,   /* field[0] = challenge */
  2,   /* field[2] = login_failed */
  1,   /* field[1] = upgrade */
};
static const ProtobufCIntRange apresponse_message__number_ranges[3 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 0, 3 }
};
const ProtobufCMessageDescriptor apresponse_message__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "APResponseMessage",
  "APResponseMessage",
  "APResponseMessage",
  "",
  sizeof(APResponseMessage),
  3,
  apresponse_message__field_descriptors,
  apresponse_message__field_indices_by_name,
  3,  apresponse_message__number_ranges,
  (ProtobufCMessageInit) apresponse_message__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor apchallenge__field_descriptors[6] =
{
  {
    "login_crypto_challenge",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APChallenge, login_crypto_challenge),
    &login_crypto_challenge_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "fingerprint_challenge",
    20,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APChallenge, fingerprint_challenge),
    &fingerprint_challenge_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "pow_challenge",
    30,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APChallenge, pow_challenge),
    &po_wchallenge_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "crypto_challenge",
    40,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(APChallenge, crypto_challenge),
    &crypto_challenge_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "server_nonce",
    50,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(APChallenge, server_nonce),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "padding",
    60,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_BYTES,
    offsetof(APChallenge, has_padding),
    offsetof(APChallenge, padding),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned apchallenge__field_indices_by_name[] = {
  3,   /* field[3] = crypto_challenge */
  1,   /* field[1] = fingerprint_challenge */
  0,   /* field[0] = login_crypto_challenge */
  5,   /* field[5] = padding */
  2,   /* field[2] = pow_challenge */
  4,   /* field[4] = server_nonce */
};
static const ProtobufCIntRange apchallenge__number_ranges[6 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 40, 3 },
  { 50, 4 },
  { 60, 5 },
  { 0, 6 }
};
const ProtobufCMessageDescriptor apchallenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "APChallenge",
  "APChallenge",
  "APChallenge",
  "",
  sizeof(APChallenge),
  6,
  apchallenge__field_descriptors,
  apchallenge__field_indices_by_name,
  6,  apchallenge__number_ranges,
  (ProtobufCMessageInit) apchallenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_challenge_union__field_descriptors[1] =
{
  {
    "diffie_hellman",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoChallengeUnion, diffie_hellman),
    &login_crypto_diffie_hellman_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_challenge_union__field_indices_by_name[] = {
  0,   /* field[0] = diffie_hellman */
};
static const ProtobufCIntRange login_crypto_challenge_union__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor login_crypto_challenge_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoChallengeUnion",
  "LoginCryptoChallengeUnion",
  "LoginCryptoChallengeUnion",
  "",
  sizeof(LoginCryptoChallengeUnion),
  1,
  login_crypto_challenge_union__field_descriptors,
  login_crypto_challenge_union__field_indices_by_name,
  1,  login_crypto_challenge_union__number_ranges,
  (ProtobufCMessageInit) login_crypto_challenge_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_diffie_hellman_challenge__field_descriptors[3] =
{
  {
    "gs",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanChallenge, gs),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "server_signature_key",
    20,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_INT32,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanChallenge, server_signature_key),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "gs_signature",
    30,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanChallenge, gs_signature),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_diffie_hellman_challenge__field_indices_by_name[] = {
  0,   /* field[0] = gs */
  2,   /* field[2] = gs_signature */
  1,   /* field[1] = server_signature_key */
};
static const ProtobufCIntRange login_crypto_diffie_hellman_challenge__number_ranges[3 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 0, 3 }
};
const ProtobufCMessageDescriptor login_crypto_diffie_hellman_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoDiffieHellmanChallenge",
  "LoginCryptoDiffieHellmanChallenge",
  "LoginCryptoDiffieHellmanChallenge",
  "",
  sizeof(LoginCryptoDiffieHellmanChallenge),
  3,
  login_crypto_diffie_hellman_challenge__field_descriptors,
  login_crypto_diffie_hellman_challenge__field_indices_by_name,
  3,  login_crypto_diffie_hellman_challenge__number_ranges,
  (ProtobufCMessageInit) login_crypto_diffie_hellman_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor fingerprint_challenge_union__field_descriptors[2] =
{
  {
    "grain",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(FingerprintChallengeUnion, grain),
    &fingerprint_grain_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "hmac_ripemd",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(FingerprintChallengeUnion, hmac_ripemd),
    &fingerprint_hmac_ripemd_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned fingerprint_challenge_union__field_indices_by_name[] = {
  0,   /* field[0] = grain */
  1,   /* field[1] = hmac_ripemd */
};
static const ProtobufCIntRange fingerprint_challenge_union__number_ranges[2 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 0, 2 }
};
const ProtobufCMessageDescriptor fingerprint_challenge_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "FingerprintChallengeUnion",
  "FingerprintChallengeUnion",
  "FingerprintChallengeUnion",
  "",
  sizeof(FingerprintChallengeUnion),
  2,
  fingerprint_challenge_union__field_descriptors,
  fingerprint_challenge_union__field_indices_by_name,
  2,  fingerprint_challenge_union__number_ranges,
  (ProtobufCMessageInit) fingerprint_challenge_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor fingerprint_grain_challenge__field_descriptors[1] =
{
  {
    "kek",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(FingerprintGrainChallenge, kek),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned fingerprint_grain_challenge__field_indices_by_name[] = {
  0,   /* field[0] = kek */
};
static const ProtobufCIntRange fingerprint_grain_challenge__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor fingerprint_grain_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "FingerprintGrainChallenge",
  "FingerprintGrainChallenge",
  "FingerprintGrainChallenge",
  "",
  sizeof(FingerprintGrainChallenge),
  1,
  fingerprint_grain_challenge__field_descriptors,
  fingerprint_grain_challenge__field_indices_by_name,
  1,  fingerprint_grain_challenge__number_ranges,
  (ProtobufCMessageInit) fingerprint_grain_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor fingerprint_hmac_ripemd_challenge__field_descriptors[1] =
{
  {
    "challenge",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(FingerprintHmacRipemdChallenge, challenge),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned fingerprint_hmac_ripemd_challenge__field_indices_by_name[] = {
  0,   /* field[0] = challenge */
};
static const ProtobufCIntRange fingerprint_hmac_ripemd_challenge__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor fingerprint_hmac_ripemd_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "FingerprintHmacRipemdChallenge",
  "FingerprintHmacRipemdChallenge",
  "FingerprintHmacRipemdChallenge",
  "",
  sizeof(FingerprintHmacRipemdChallenge),
  1,
  fingerprint_hmac_ripemd_challenge__field_descriptors,
  fingerprint_hmac_ripemd_challenge__field_indices_by_name,
  1,  fingerprint_hmac_ripemd_challenge__number_ranges,
  (ProtobufCMessageInit) fingerprint_hmac_ripemd_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor po_wchallenge_union__field_descriptors[1] =
{
  {
    "hash_cash",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(PoWChallengeUnion, hash_cash),
    &po_whash_cash_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned po_wchallenge_union__field_indices_by_name[] = {
  0,   /* field[0] = hash_cash */
};
static const ProtobufCIntRange po_wchallenge_union__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor po_wchallenge_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "PoWChallengeUnion",
  "PoWChallengeUnion",
  "PoWChallengeUnion",
  "",
  sizeof(PoWChallengeUnion),
  1,
  po_wchallenge_union__field_descriptors,
  po_wchallenge_union__field_indices_by_name,
  1,  po_wchallenge_union__number_ranges,
  (ProtobufCMessageInit) po_wchallenge_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor po_whash_cash_challenge__field_descriptors[3] =
{
  {
    "prefix",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_BYTES,
    offsetof(PoWHashCashChallenge, has_prefix),
    offsetof(PoWHashCashChallenge, prefix),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "length",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(PoWHashCashChallenge, has_length),
    offsetof(PoWHashCashChallenge, length),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "target",
    30,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(PoWHashCashChallenge, has_target),
    offsetof(PoWHashCashChallenge, target),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned po_whash_cash_challenge__field_indices_by_name[] = {
  1,   /* field[1] = length */
  0,   /* field[0] = prefix */
  2,   /* field[2] = target */
};
static const ProtobufCIntRange po_whash_cash_challenge__number_ranges[3 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 0, 3 }
};
const ProtobufCMessageDescriptor po_whash_cash_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "PoWHashCashChallenge",
  "PoWHashCashChallenge",
  "PoWHashCashChallenge",
  "",
  sizeof(PoWHashCashChallenge),
  3,
  po_whash_cash_challenge__field_descriptors,
  po_whash_cash_challenge__field_indices_by_name,
  3,  po_whash_cash_challenge__number_ranges,
  (ProtobufCMessageInit) po_whash_cash_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor crypto_challenge_union__field_descriptors[2] =
{
  {
    "shannon",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(CryptoChallengeUnion, shannon),
    &crypto_shannon_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "rc4_sha1_hmac",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(CryptoChallengeUnion, rc4_sha1_hmac),
    &crypto_rc4_sha1_hmac_challenge__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned crypto_challenge_union__field_indices_by_name[] = {
  1,   /* field[1] = rc4_sha1_hmac */
  0,   /* field[0] = shannon */
};
static const ProtobufCIntRange crypto_challenge_union__number_ranges[2 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 0, 2 }
};
const ProtobufCMessageDescriptor crypto_challenge_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoChallengeUnion",
  "CryptoChallengeUnion",
  "CryptoChallengeUnion",
  "",
  sizeof(CryptoChallengeUnion),
  2,
  crypto_challenge_union__field_descriptors,
  crypto_challenge_union__field_indices_by_name,
  2,  crypto_challenge_union__number_ranges,
  (ProtobufCMessageInit) crypto_challenge_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
#define crypto_shannon_challenge__field_descriptors NULL
#define crypto_shannon_challenge__field_indices_by_name NULL
#define crypto_shannon_challenge__number_ranges NULL
const ProtobufCMessageDescriptor crypto_shannon_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoShannonChallenge",
  "CryptoShannonChallenge",
  "CryptoShannonChallenge",
  "",
  sizeof(CryptoShannonChallenge),
  0,
  crypto_shannon_challenge__field_descriptors,
  crypto_shannon_challenge__field_indices_by_name,
  0,  crypto_shannon_challenge__number_ranges,
  (ProtobufCMessageInit) crypto_shannon_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
#define crypto_rc4_sha1_hmac_challenge__field_descriptors NULL
#define crypto_rc4_sha1_hmac_challenge__field_indices_by_name NULL
#define crypto_rc4_sha1_hmac_challenge__number_ranges NULL
const ProtobufCMessageDescriptor crypto_rc4_sha1_hmac_challenge__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoRc4Sha1HmacChallenge",
  "CryptoRc4Sha1HmacChallenge",
  "CryptoRc4Sha1HmacChallenge",
  "",
  sizeof(CryptoRc4Sha1HmacChallenge),
  0,
  crypto_rc4_sha1_hmac_challenge__field_descriptors,
  crypto_rc4_sha1_hmac_challenge__field_indices_by_name,
  0,  crypto_rc4_sha1_hmac_challenge__number_ranges,
  (ProtobufCMessageInit) crypto_rc4_sha1_hmac_challenge__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor upgrade_required_message__field_descriptors[3] =
{
  {
    "upgrade_signed_part",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(UpgradeRequiredMessage, upgrade_signed_part),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "signature",
    20,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(UpgradeRequiredMessage, signature),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "http_suffix",
    30,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_STRING,
    0,   /* quantifier_offset */
    offsetof(UpgradeRequiredMessage, http_suffix),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned upgrade_required_message__field_indices_by_name[] = {
  2,   /* field[2] = http_suffix */
  1,   /* field[1] = signature */
  0,   /* field[0] = upgrade_signed_part */
};
static const ProtobufCIntRange upgrade_required_message__number_ranges[3 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 0, 3 }
};
const ProtobufCMessageDescriptor upgrade_required_message__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "UpgradeRequiredMessage",
  "UpgradeRequiredMessage",
  "UpgradeRequiredMessage",
  "",
  sizeof(UpgradeRequiredMessage),
  3,
  upgrade_required_message__field_descriptors,
  upgrade_required_message__field_indices_by_name,
  3,  upgrade_required_message__number_ranges,
  (ProtobufCMessageInit) upgrade_required_message__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor aplogin_failed__field_descriptors[4] =
{
  {
    "error_code",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_ENUM,
    0,   /* quantifier_offset */
    offsetof(APLoginFailed, error_code),
    &error_code__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "retry_delay",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(APLoginFailed, has_retry_delay),
    offsetof(APLoginFailed, retry_delay),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "expiry",
    30,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(APLoginFailed, has_expiry),
    offsetof(APLoginFailed, expiry),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "error_description",
    40,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_STRING,
    0,   /* quantifier_offset */
    offsetof(APLoginFailed, error_description),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned aplogin_failed__field_indices_by_name[] = {
  0,   /* field[0] = error_code */
  3,   /* field[3] = error_description */
  2,   /* field[2] = expiry */
  1,   /* field[1] = retry_delay */
};
static const ProtobufCIntRange aplogin_failed__number_ranges[4 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 40, 3 },
  { 0, 4 }
};
const ProtobufCMessageDescriptor aplogin_failed__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "APLoginFailed",
  "APLoginFailed",
  "APLoginFailed",
  "",
  sizeof(APLoginFailed),
  4,
  aplogin_failed__field_descriptors,
  aplogin_failed__field_indices_by_name,
  4,  aplogin_failed__number_ranges,
  (ProtobufCMessageInit) aplogin_failed__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor client_response_plaintext__field_descriptors[3] =
{
  {
    "login_crypto_response",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientResponsePlaintext, login_crypto_response),
    &login_crypto_response_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "pow_response",
    20,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientResponsePlaintext, pow_response),
    &po_wresponse_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "crypto_response",
    30,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(ClientResponsePlaintext, crypto_response),
    &crypto_response_union__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned client_response_plaintext__field_indices_by_name[] = {
  2,   /* field[2] = crypto_response */
  0,   /* field[0] = login_crypto_response */
  1,   /* field[1] = pow_response */
};
static const ProtobufCIntRange client_response_plaintext__number_ranges[3 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 30, 2 },
  { 0, 3 }
};
const ProtobufCMessageDescriptor client_response_plaintext__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "ClientResponsePlaintext",
  "ClientResponsePlaintext",
  "ClientResponsePlaintext",
  "",
  sizeof(ClientResponsePlaintext),
  3,
  client_response_plaintext__field_descriptors,
  client_response_plaintext__field_indices_by_name,
  3,  client_response_plaintext__number_ranges,
  (ProtobufCMessageInit) client_response_plaintext__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_response_union__field_descriptors[1] =
{
  {
    "diffie_hellman",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoResponseUnion, diffie_hellman),
    &login_crypto_diffie_hellman_response__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_response_union__field_indices_by_name[] = {
  0,   /* field[0] = diffie_hellman */
};
static const ProtobufCIntRange login_crypto_response_union__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor login_crypto_response_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoResponseUnion",
  "LoginCryptoResponseUnion",
  "LoginCryptoResponseUnion",
  "",
  sizeof(LoginCryptoResponseUnion),
  1,
  login_crypto_response_union__field_descriptors,
  login_crypto_response_union__field_indices_by_name,
  1,  login_crypto_response_union__number_ranges,
  (ProtobufCMessageInit) login_crypto_response_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor login_crypto_diffie_hellman_response__field_descriptors[1] =
{
  {
    "hmac",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(LoginCryptoDiffieHellmanResponse, hmac),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned login_crypto_diffie_hellman_response__field_indices_by_name[] = {
  0,   /* field[0] = hmac */
};
static const ProtobufCIntRange login_crypto_diffie_hellman_response__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor login_crypto_diffie_hellman_response__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "LoginCryptoDiffieHellmanResponse",
  "LoginCryptoDiffieHellmanResponse",
  "LoginCryptoDiffieHellmanResponse",
  "",
  sizeof(LoginCryptoDiffieHellmanResponse),
  1,
  login_crypto_diffie_hellman_response__field_descriptors,
  login_crypto_diffie_hellman_response__field_indices_by_name,
  1,  login_crypto_diffie_hellman_response__number_ranges,
  (ProtobufCMessageInit) login_crypto_diffie_hellman_response__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor po_wresponse_union__field_descriptors[1] =
{
  {
    "hash_cash",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(PoWResponseUnion, hash_cash),
    &po_whash_cash_response__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned po_wresponse_union__field_indices_by_name[] = {
  0,   /* field[0] = hash_cash */
};
static const ProtobufCIntRange po_wresponse_union__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor po_wresponse_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "PoWResponseUnion",
  "PoWResponseUnion",
  "PoWResponseUnion",
  "",
  sizeof(PoWResponseUnion),
  1,
  po_wresponse_union__field_descriptors,
  po_wresponse_union__field_indices_by_name,
  1,  po_wresponse_union__number_ranges,
  (ProtobufCMessageInit) po_wresponse_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor po_whash_cash_response__field_descriptors[1] =
{
  {
    "hash_suffix",
    10,
    PROTOBUF_C_LABEL_REQUIRED,
    PROTOBUF_C_TYPE_BYTES,
    0,   /* quantifier_offset */
    offsetof(PoWHashCashResponse, hash_suffix),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned po_whash_cash_response__field_indices_by_name[] = {
  0,   /* field[0] = hash_suffix */
};
static const ProtobufCIntRange po_whash_cash_response__number_ranges[1 + 1] =
{
  { 10, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor po_whash_cash_response__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "PoWHashCashResponse",
  "PoWHashCashResponse",
  "PoWHashCashResponse",
  "",
  sizeof(PoWHashCashResponse),
  1,
  po_whash_cash_response__field_descriptors,
  po_whash_cash_response__field_indices_by_name,
  1,  po_whash_cash_response__number_ranges,
  (ProtobufCMessageInit) po_whash_cash_response__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor crypto_response_union__field_descriptors[2] =
{
  {
    "shannon",
    10,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(CryptoResponseUnion, shannon),
    &crypto_shannon_response__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
  {
    "rc4_sha1_hmac",
    20,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_MESSAGE,
    0,   /* quantifier_offset */
    offsetof(CryptoResponseUnion, rc4_sha1_hmac),
    &crypto_rc4_sha1_hmac_response__descriptor,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned crypto_response_union__field_indices_by_name[] = {
  1,   /* field[1] = rc4_sha1_hmac */
  0,   /* field[0] = shannon */
};
static const ProtobufCIntRange crypto_response_union__number_ranges[2 + 1] =
{
  { 10, 0 },
  { 20, 1 },
  { 0, 2 }
};
const ProtobufCMessageDescriptor crypto_response_union__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoResponseUnion",
  "CryptoResponseUnion",
  "CryptoResponseUnion",
  "",
  sizeof(CryptoResponseUnion),
  2,
  crypto_response_union__field_descriptors,
  crypto_response_union__field_indices_by_name,
  2,  crypto_response_union__number_ranges,
  (ProtobufCMessageInit) crypto_response_union__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor crypto_shannon_response__field_descriptors[1] =
{
  {
    "dummy",
    1,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(CryptoShannonResponse, has_dummy),
    offsetof(CryptoShannonResponse, dummy),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned crypto_shannon_response__field_indices_by_name[] = {
  0,   /* field[0] = dummy */
};
static const ProtobufCIntRange crypto_shannon_response__number_ranges[1 + 1] =
{
  { 1, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor crypto_shannon_response__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoShannonResponse",
  "CryptoShannonResponse",
  "CryptoShannonResponse",
  "",
  sizeof(CryptoShannonResponse),
  1,
  crypto_shannon_response__field_descriptors,
  crypto_shannon_response__field_indices_by_name,
  1,  crypto_shannon_response__number_ranges,
  (ProtobufCMessageInit) crypto_shannon_response__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCFieldDescriptor crypto_rc4_sha1_hmac_response__field_descriptors[1] =
{
  {
    "dummy",
    1,
    PROTOBUF_C_LABEL_OPTIONAL,
    PROTOBUF_C_TYPE_INT32,
    offsetof(CryptoRc4Sha1HmacResponse, has_dummy),
    offsetof(CryptoRc4Sha1HmacResponse, dummy),
    NULL,
    NULL,
    0,             /* flags */
    0,NULL,NULL    /* reserved1,reserved2, etc */
  },
};
static const unsigned crypto_rc4_sha1_hmac_response__field_indices_by_name[] = {
  0,   /* field[0] = dummy */
};
static const ProtobufCIntRange crypto_rc4_sha1_hmac_response__number_ranges[1 + 1] =
{
  { 1, 0 },
  { 0, 1 }
};
const ProtobufCMessageDescriptor crypto_rc4_sha1_hmac_response__descriptor =
{
  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
  "CryptoRc4Sha1HmacResponse",
  "CryptoRc4Sha1HmacResponse",
  "CryptoRc4Sha1HmacResponse",
  "",
  sizeof(CryptoRc4Sha1HmacResponse),
  1,
  crypto_rc4_sha1_hmac_response__field_descriptors,
  crypto_rc4_sha1_hmac_response__field_indices_by_name,
  1,  crypto_rc4_sha1_hmac_response__number_ranges,
  (ProtobufCMessageInit) crypto_rc4_sha1_hmac_response__init,
  NULL,NULL,NULL    /* reserved[123] */
};
static const ProtobufCEnumValue product__enum_values_by_number[5] =
{
  { "PRODUCT_CLIENT", "PRODUCT__PRODUCT_CLIENT", 0 },
  { "PRODUCT_LIBSPOTIFY", "PRODUCT__PRODUCT_LIBSPOTIFY", 1 },
  { "PRODUCT_MOBILE", "PRODUCT__PRODUCT_MOBILE", 2 },
  { "PRODUCT_PARTNER", "PRODUCT__PRODUCT_PARTNER", 3 },
  { "PRODUCT_LIBSPOTIFY_EMBEDDED", "PRODUCT__PRODUCT_LIBSPOTIFY_EMBEDDED", 5 },
};
static const ProtobufCIntRange product__value_ranges[] = {
{0, 0},{5, 4},{0, 5}
};
static const ProtobufCEnumValueIndex product__enum_values_by_name[5] =
{
  { "PRODUCT_CLIENT", 0 },
  { "PRODUCT_LIBSPOTIFY", 1 },
  { "PRODUCT_LIBSPOTIFY_EMBEDDED", 4 },
  { "PRODUCT_MOBILE", 2 },
  { "PRODUCT_PARTNER", 3 },
};
const ProtobufCEnumDescriptor product__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "Product",
  "Product",
  "Product",
  "",
  5,
  product__enum_values_by_number,
  5,
  product__enum_values_by_name,
  2,
  product__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue product_flags__enum_values_by_number[2] =
{
  { "PRODUCT_FLAG_NONE", "PRODUCT_FLAGS__PRODUCT_FLAG_NONE", 0 },
  { "PRODUCT_FLAG_DEV_BUILD", "PRODUCT_FLAGS__PRODUCT_FLAG_DEV_BUILD", 1 },
};
static const ProtobufCIntRange product_flags__value_ranges[] = {
{0, 0},{0, 2}
};
static const ProtobufCEnumValueIndex product_flags__enum_values_by_name[2] =
{
  { "PRODUCT_FLAG_DEV_BUILD", 1 },
  { "PRODUCT_FLAG_NONE", 0 },
};
const ProtobufCEnumDescriptor product_flags__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "ProductFlags",
  "ProductFlags",
  "ProductFlags",
  "",
  2,
  product_flags__enum_values_by_number,
  2,
  product_flags__enum_values_by_name,
  1,
  product_flags__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue platform__enum_values_by_number[24] =
{
  { "PLATFORM_WIN32_X86", "PLATFORM__PLATFORM_WIN32_X86", 0 },
  { "PLATFORM_OSX_X86", "PLATFORM__PLATFORM_OSX_X86", 1 },
  { "PLATFORM_LINUX_X86", "PLATFORM__PLATFORM_LINUX_X86", 2 },
  { "PLATFORM_IPHONE_ARM", "PLATFORM__PLATFORM_IPHONE_ARM", 3 },
  { "PLATFORM_S60_ARM", "PLATFORM__PLATFORM_S60_ARM", 4 },
  { "PLATFORM_OSX_PPC", "PLATFORM__PLATFORM_OSX_PPC", 5 },
  { "PLATFORM_ANDROID_ARM", "PLATFORM__PLATFORM_ANDROID_ARM", 6 },
  { "PLATFORM_WINDOWS_CE_ARM", "PLATFORM__PLATFORM_WINDOWS_CE_ARM", 7 },
  { "PLATFORM_LINUX_X86_64", "PLATFORM__PLATFORM_LINUX_X86_64", 8 },
  { "PLATFORM_OSX_X86_64", "PLATFORM__PLATFORM_OSX_X86_64", 9 },
  { "PLATFORM_PALM_ARM", "PLATFORM__PLATFORM_PALM_ARM", 10 },
  { "PLATFORM_LINUX_SH", "PLATFORM__PLATFORM_LINUX_SH", 11 },
  { "PLATFORM_FREEBSD_X86", "PLATFORM__PLATFORM_FREEBSD_X86", 12 },
  { "PLATFORM_FREEBSD_X86_64", "PLATFORM__PLATFORM_FREEBSD_X86_64", 13 },
  { "PLATFORM_BLACKBERRY_ARM", "PLATFORM__PLATFORM_BLACKBERRY_ARM", 14 },
  { "PLATFORM_SONOS", "PLATFORM__PLATFORM_SONOS", 15 },
  { "PLATFORM_LINUX_MIPS", "PLATFORM__PLATFORM_LINUX_MIPS", 16 },
  { "PLATFORM_LINUX_ARM", "PLATFORM__PLATFORM_LINUX_ARM", 17 },
  { "PLATFORM_LOGITECH_ARM", "PLATFORM__PLATFORM_LOGITECH_ARM", 18 },
  { "PLATFORM_LINUX_BLACKFIN", "PLATFORM__PLATFORM_LINUX_BLACKFIN", 19 },
  { "PLATFORM_WP7_ARM", "PLATFORM__PLATFORM_WP7_ARM", 20 },
  { "PLATFORM_ONKYO_ARM", "PLATFORM__PLATFORM_ONKYO_ARM", 21 },
  { "PLATFORM_QNXNTO_ARM", "PLATFORM__PLATFORM_QNXNTO_ARM", 22 },
  { "PLATFORM_BCO_ARM", "PLATFORM__PLATFORM_BCO_ARM", 23 },
};
static const ProtobufCIntRange platform__value_ranges[] = {
{0, 0},{0, 24}
};
static const ProtobufCEnumValueIndex platform__enum_values_by_name[24] =
{
  { "PLATFORM_ANDROID_ARM", 6 },
  { "PLATFORM_BCO_ARM", 23 },
  { "PLATFORM_BLACKBERRY_ARM", 14 },
  { "PLATFORM_FREEBSD_X86", 12 },
  { "PLATFORM_FREEBSD_X86_64", 13 },
  { "PLATFORM_IPHONE_ARM", 3 },
  { "PLATFORM_LINUX_ARM", 17 },
  { "PLATFORM_LINUX_BLACKFIN", 19 },
  { "PLATFORM_LINUX_MIPS", 16 },
  { "PLATFORM_LINUX_SH", 11 },
  { "PLATFORM_LINUX_X86", 2 },
  { "PLATFORM_LINUX_X86_64", 8 },
  { "PLATFORM_LOGITECH_ARM", 18 },
  { "PLATFORM_ONKYO_ARM", 21 },
  { "PLATFORM_OSX_PPC", 5 },
  { "PLATFORM_OSX_X86", 1 },
  { "PLATFORM_OSX_X86_64", 9 },
  { "PLATFORM_PALM_ARM", 10 },
  { "PLATFORM_QNXNTO_ARM", 22 },
  { "PLATFORM_S60_ARM", 4 },
  { "PLATFORM_SONOS", 15 },
  { "PLATFORM_WIN32_X86", 0 },
  { "PLATFORM_WINDOWS_CE_ARM", 7 },
  { "PLATFORM_WP7_ARM", 20 },
};
const ProtobufCEnumDescriptor platform__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "Platform",
  "Platform",
  "Platform",
  "",
  24,
  platform__enum_values_by_number,
  24,
  platform__enum_values_by_name,
  1,
  platform__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue fingerprint__enum_values_by_number[2] =
{
  { "FINGERPRINT_GRAIN", "FINGERPRINT__FINGERPRINT_GRAIN", 0 },
  { "FINGERPRINT_HMAC_RIPEMD", "FINGERPRINT__FINGERPRINT_HMAC_RIPEMD", 1 },
};
static const ProtobufCIntRange fingerprint__value_ranges[] = {
{0, 0},{0, 2}
};
static const ProtobufCEnumValueIndex fingerprint__enum_values_by_name[2] =
{
  { "FINGERPRINT_GRAIN", 0 },
  { "FINGERPRINT_HMAC_RIPEMD", 1 },
};
const ProtobufCEnumDescriptor fingerprint__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "Fingerprint",
  "Fingerprint",
  "Fingerprint",
  "",
  2,
  fingerprint__enum_values_by_number,
  2,
  fingerprint__enum_values_by_name,
  1,
  fingerprint__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue cryptosuite__enum_values_by_number[2] =
{
  { "CRYPTO_SUITE_SHANNON", "CRYPTOSUITE__CRYPTO_SUITE_SHANNON", 0 },
  { "CRYPTO_SUITE_RC4_SHA1_HMAC", "CRYPTOSUITE__CRYPTO_SUITE_RC4_SHA1_HMAC", 1 },
};
static const ProtobufCIntRange cryptosuite__value_ranges[] = {
{0, 0},{0, 2}
};
static const ProtobufCEnumValueIndex cryptosuite__enum_values_by_name[2] =
{
  { "CRYPTO_SUITE_RC4_SHA1_HMAC", 1 },
  { "CRYPTO_SUITE_SHANNON", 0 },
};
const ProtobufCEnumDescriptor cryptosuite__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "Cryptosuite",
  "Cryptosuite",
  "Cryptosuite",
  "",
  2,
  cryptosuite__enum_values_by_number,
  2,
  cryptosuite__enum_values_by_name,
  1,
  cryptosuite__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue powscheme__enum_values_by_number[1] =
{
  { "POW_HASH_CASH", "POWSCHEME__POW_HASH_CASH", 0 },
};
static const ProtobufCIntRange powscheme__value_ranges[] = {
{0, 0},{0, 1}
};
static const ProtobufCEnumValueIndex powscheme__enum_values_by_name[1] =
{
  { "POW_HASH_CASH", 0 },
};
const ProtobufCEnumDescriptor powscheme__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "Powscheme",
  "Powscheme",
  "Powscheme",
  "",
  1,
  powscheme__enum_values_by_number,
  1,
  powscheme__enum_values_by_name,
  1,
  powscheme__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
static const ProtobufCEnumValue error_code__enum_values_by_number[11] =
{
  { "ProtocolError", "ERROR_CODE__ProtocolError", 0 },
  { "TryAnotherAP", "ERROR_CODE__TryAnotherAP", 2 },
  { "BadConnectionId", "ERROR_CODE__BadConnectionId", 5 },
  { "TravelRestriction", "ERROR_CODE__TravelRestriction", 9 },
  { "PremiumAccountRequired", "ERROR_CODE__PremiumAccountRequired", 11 },
  { "BadCredentials", "ERROR_CODE__BadCredentials", 12 },
  { "CouldNotValidateCredentials", "ERROR_CODE__CouldNotValidateCredentials", 13 },
  { "AccountExists", "ERROR_CODE__AccountExists", 14 },
  { "ExtraVerificationRequired", "ERROR_CODE__ExtraVerificationRequired", 15 },
  { "InvalidAppKey", "ERROR_CODE__InvalidAppKey", 16 },
  { "ApplicationBanned", "ERROR_CODE__ApplicationBanned", 17 },
};
static const ProtobufCIntRange error_code__value_ranges[] = {
{0, 0},{2, 1},{5, 2},{9, 3},{11, 4},{0, 11}
};
static const ProtobufCEnumValueIndex error_code__enum_values_by_name[11] =
{
  { "AccountExists", 7 },
  { "ApplicationBanned", 10 },
  { "BadConnectionId", 2 },
  { "BadCredentials", 5 },
  { "CouldNotValidateCredentials", 6 },
  { "ExtraVerificationRequired", 8 },
  { "InvalidAppKey", 9 },
  { "PremiumAccountRequired", 4 },
  { "ProtocolError", 0 },
  { "TravelRestriction", 3 },
  { "TryAnotherAP", 1 },
};
const ProtobufCEnumDescriptor error_code__descriptor =
{
  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
  "ErrorCode",
  "ErrorCode",
  "ErrorCode",
  "",
  11,
  error_code__enum_values_by_number,
  11,
  error_code__enum_values_by_name,
  5,
  error_code__value_ranges,
  NULL,NULL,NULL,NULL   /* reserved[1234] */
};
