diff --git a/c-deps/libroach/protos/roachpb/api.pb.cc b/c-deps/libroach/protos/roachpb/api.pb.cc index 54545497c683..78b6dea1f45a 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.cc +++ b/c-deps/libroach/protos/roachpb/api.pb.cc @@ -150,6 +150,7 @@ extern PROTOBUF_INTERNAL_EXPORT_protobuf_roachpb_2ferrors_2eproto ::google::prot namespace protobuf_roachpb_2fmetadata_2eproto { extern PROTOBUF_INTERNAL_EXPORT_protobuf_roachpb_2fmetadata_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ReplicaDescriptor; extern PROTOBUF_INTERNAL_EXPORT_protobuf_roachpb_2fmetadata_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ReplicationTarget; +extern PROTOBUF_INTERNAL_EXPORT_protobuf_roachpb_2fmetadata_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Version; extern PROTOBUF_INTERNAL_EXPORT_protobuf_roachpb_2fmetadata_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_RangeDescriptor; } // namespace protobuf_roachpb_2fmetadata_2eproto namespace protobuf_storage_2fenginepb_2fmvcc3_2eproto { @@ -875,6 +876,16 @@ class GossipSubscriptionEventDefaultTypeInternal { ::google::protobuf::internal::ExplicitlyConstructed _instance; } _GossipSubscriptionEvent_default_instance_; +class JoinNodeRequestDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed + _instance; +} _JoinNodeRequest_default_instance_; +class JoinNodeResponseDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed + _instance; +} _JoinNodeResponse_default_instance_; } // namespace roachpb } // namespace cockroach namespace protobuf_roachpb_2fapi_2eproto { @@ -2900,6 +2911,35 @@ ::google::protobuf::internal::SCCInfo<2> scc_info_GossipSubscriptionEvent = &protobuf_roachpb_2fdata_2eproto::scc_info_Value.base, &protobuf_roachpb_2ferrors_2eproto::scc_info_AmbiguousResultError.base,}}; +static void InitDefaultsJoinNodeRequest() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::cockroach::roachpb::_JoinNodeRequest_default_instance_; + new (ptr) ::cockroach::roachpb::JoinNodeRequest(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::cockroach::roachpb::JoinNodeRequest::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<1> scc_info_JoinNodeRequest = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsJoinNodeRequest}, { + &protobuf_roachpb_2fmetadata_2eproto::scc_info_Version.base,}}; + +static void InitDefaultsJoinNodeResponse() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::cockroach::roachpb::_JoinNodeResponse_default_instance_; + new (ptr) ::cockroach::roachpb::JoinNodeResponse(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::cockroach::roachpb::JoinNodeResponse::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_JoinNodeResponse = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsJoinNodeResponse}, {}}; + void InitDefaults() { ::google::protobuf::internal::InitSCC(&scc_info_RequestHeader.base); ::google::protobuf::internal::InitSCC(&scc_info_ResponseHeader.base); @@ -3025,6 +3065,8 @@ void InitDefaults() { ::google::protobuf::internal::InitSCC(&scc_info_RangeFeedEvent.base); ::google::protobuf::internal::InitSCC(&scc_info_GossipSubscriptionRequest.base); ::google::protobuf::internal::InitSCC(&scc_info_GossipSubscriptionEvent.base); + ::google::protobuf::internal::InitSCC(&scc_info_JoinNodeRequest.base); + ::google::protobuf::internal::InitSCC(&scc_info_JoinNodeResponse.base); } } // namespace protobuf_roachpb_2fapi_2eproto @@ -39712,6 +39754,416 @@ ::std::string GossipSubscriptionEvent::GetTypeName() const { } +// =================================================================== + +void JoinNodeRequest::InitAsDefaultInstance() { + ::cockroach::roachpb::_JoinNodeRequest_default_instance_._instance.get_mutable()->min_supported_version_ = const_cast< ::cockroach::roachpb::Version*>( + ::cockroach::roachpb::Version::internal_default_instance()); +} +void JoinNodeRequest::clear_min_supported_version() { + if (GetArenaNoVirtual() == NULL && min_supported_version_ != NULL) { + delete min_supported_version_; + } + min_supported_version_ = NULL; +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int JoinNodeRequest::kMinSupportedVersionFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +JoinNodeRequest::JoinNodeRequest() + : ::google::protobuf::MessageLite(), _internal_metadata_(NULL) { + ::google::protobuf::internal::InitSCC( + &protobuf_roachpb_2fapi_2eproto::scc_info_JoinNodeRequest.base); + SharedCtor(); + // @@protoc_insertion_point(constructor:cockroach.roachpb.JoinNodeRequest) +} +JoinNodeRequest::JoinNodeRequest(const JoinNodeRequest& from) + : ::google::protobuf::MessageLite(), + _internal_metadata_(NULL) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + if (from.has_min_supported_version()) { + min_supported_version_ = new ::cockroach::roachpb::Version(*from.min_supported_version_); + } else { + min_supported_version_ = NULL; + } + // @@protoc_insertion_point(copy_constructor:cockroach.roachpb.JoinNodeRequest) +} + +void JoinNodeRequest::SharedCtor() { + min_supported_version_ = NULL; +} + +JoinNodeRequest::~JoinNodeRequest() { + // @@protoc_insertion_point(destructor:cockroach.roachpb.JoinNodeRequest) + SharedDtor(); +} + +void JoinNodeRequest::SharedDtor() { + if (this != internal_default_instance()) delete min_supported_version_; +} + +void JoinNodeRequest::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const JoinNodeRequest& JoinNodeRequest::default_instance() { + ::google::protobuf::internal::InitSCC(&protobuf_roachpb_2fapi_2eproto::scc_info_JoinNodeRequest.base); + return *internal_default_instance(); +} + + +void JoinNodeRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:cockroach.roachpb.JoinNodeRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + if (GetArenaNoVirtual() == NULL && min_supported_version_ != NULL) { + delete min_supported_version_; + } + min_supported_version_ = NULL; + _internal_metadata_.Clear(); +} + +bool JoinNodeRequest::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::LiteUnknownFieldSetter unknown_fields_setter( + &_internal_metadata_); + ::google::protobuf::io::StringOutputStream unknown_fields_output( + unknown_fields_setter.buffer()); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_output, false); + // @@protoc_insertion_point(parse_start:cockroach.roachpb.JoinNodeRequest) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .cockroach.roachpb.Version min_supported_version = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_min_supported_version())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormatLite::SkipField( + input, tag, &unknown_fields_stream)); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:cockroach.roachpb.JoinNodeRequest) + return true; +failure: + // @@protoc_insertion_point(parse_failure:cockroach.roachpb.JoinNodeRequest) + return false; +#undef DO_ +} + +void JoinNodeRequest::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:cockroach.roachpb.JoinNodeRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .cockroach.roachpb.Version min_supported_version = 1; + if (this->has_min_supported_version()) { + ::google::protobuf::internal::WireFormatLite::WriteMessage( + 1, this->_internal_min_supported_version(), output); + } + + output->WriteRaw((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).data(), + static_cast((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size())); + // @@protoc_insertion_point(serialize_end:cockroach.roachpb.JoinNodeRequest) +} + +size_t JoinNodeRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:cockroach.roachpb.JoinNodeRequest) + size_t total_size = 0; + + total_size += (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size(); + + // .cockroach.roachpb.Version min_supported_version = 1; + if (this->has_min_supported_version()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *min_supported_version_); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void JoinNodeRequest::CheckTypeAndMergeFrom( + const ::google::protobuf::MessageLite& from) { + MergeFrom(*::google::protobuf::down_cast(&from)); +} + +void JoinNodeRequest::MergeFrom(const JoinNodeRequest& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:cockroach.roachpb.JoinNodeRequest) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.has_min_supported_version()) { + mutable_min_supported_version()->::cockroach::roachpb::Version::MergeFrom(from.min_supported_version()); + } +} + +void JoinNodeRequest::CopyFrom(const JoinNodeRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:cockroach.roachpb.JoinNodeRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool JoinNodeRequest::IsInitialized() const { + return true; +} + +void JoinNodeRequest::Swap(JoinNodeRequest* other) { + if (other == this) return; + InternalSwap(other); +} +void JoinNodeRequest::InternalSwap(JoinNodeRequest* other) { + using std::swap; + swap(min_supported_version_, other->min_supported_version_); + _internal_metadata_.Swap(&other->_internal_metadata_); +} + +::std::string JoinNodeRequest::GetTypeName() const { + return "cockroach.roachpb.JoinNodeRequest"; +} + + +// =================================================================== + +void JoinNodeResponse::InitAsDefaultInstance() { +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int JoinNodeResponse::kClusterIdFieldNumber; +const int JoinNodeResponse::kNodeIdFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +JoinNodeResponse::JoinNodeResponse() + : ::google::protobuf::MessageLite(), _internal_metadata_(NULL) { + ::google::protobuf::internal::InitSCC( + &protobuf_roachpb_2fapi_2eproto::scc_info_JoinNodeResponse.base); + SharedCtor(); + // @@protoc_insertion_point(constructor:cockroach.roachpb.JoinNodeResponse) +} +JoinNodeResponse::JoinNodeResponse(const JoinNodeResponse& from) + : ::google::protobuf::MessageLite(), + _internal_metadata_(NULL) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + cluster_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.cluster_id().size() > 0) { + cluster_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.cluster_id_); + } + node_id_ = from.node_id_; + // @@protoc_insertion_point(copy_constructor:cockroach.roachpb.JoinNodeResponse) +} + +void JoinNodeResponse::SharedCtor() { + cluster_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + node_id_ = 0; +} + +JoinNodeResponse::~JoinNodeResponse() { + // @@protoc_insertion_point(destructor:cockroach.roachpb.JoinNodeResponse) + SharedDtor(); +} + +void JoinNodeResponse::SharedDtor() { + cluster_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void JoinNodeResponse::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const JoinNodeResponse& JoinNodeResponse::default_instance() { + ::google::protobuf::internal::InitSCC(&protobuf_roachpb_2fapi_2eproto::scc_info_JoinNodeResponse.base); + return *internal_default_instance(); +} + + +void JoinNodeResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:cockroach.roachpb.JoinNodeResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + cluster_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + node_id_ = 0; + _internal_metadata_.Clear(); +} + +bool JoinNodeResponse::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::LiteUnknownFieldSetter unknown_fields_setter( + &_internal_metadata_); + ::google::protobuf::io::StringOutputStream unknown_fields_output( + unknown_fields_setter.buffer()); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_output, false); + // @@protoc_insertion_point(parse_start:cockroach.roachpb.JoinNodeResponse) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadBytes( + input, this->mutable_cluster_id())); + } else { + goto handle_unusual; + } + break; + } + + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( + input, &node_id_))); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormatLite::SkipField( + input, tag, &unknown_fields_stream)); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:cockroach.roachpb.JoinNodeResponse) + return true; +failure: + // @@protoc_insertion_point(parse_failure:cockroach.roachpb.JoinNodeResponse) + return false; +#undef DO_ +} + +void JoinNodeResponse::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:cockroach.roachpb.JoinNodeResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (this->cluster_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased( + 1, this->cluster_id(), output); + } + + if (this->node_id() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->node_id(), output); + } + + output->WriteRaw((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).data(), + static_cast((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size())); + // @@protoc_insertion_point(serialize_end:cockroach.roachpb.JoinNodeResponse) +} + +size_t JoinNodeResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:cockroach.roachpb.JoinNodeResponse) + size_t total_size = 0; + + total_size += (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size(); + + if (this->cluster_id().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->cluster_id()); + } + + if (this->node_id() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::Int32Size( + this->node_id()); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void JoinNodeResponse::CheckTypeAndMergeFrom( + const ::google::protobuf::MessageLite& from) { + MergeFrom(*::google::protobuf::down_cast(&from)); +} + +void JoinNodeResponse::MergeFrom(const JoinNodeResponse& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:cockroach.roachpb.JoinNodeResponse) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.cluster_id().size() > 0) { + + cluster_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.cluster_id_); + } + if (from.node_id() != 0) { + set_node_id(from.node_id()); + } +} + +void JoinNodeResponse::CopyFrom(const JoinNodeResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:cockroach.roachpb.JoinNodeResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool JoinNodeResponse::IsInitialized() const { + return true; +} + +void JoinNodeResponse::Swap(JoinNodeResponse* other) { + if (other == this) return; + InternalSwap(other); +} +void JoinNodeResponse::InternalSwap(JoinNodeResponse* other) { + using std::swap; + cluster_id_.Swap(&other->cluster_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); + swap(node_id_, other->node_id_); + _internal_metadata_.Swap(&other->_internal_metadata_); +} + +::std::string JoinNodeResponse::GetTypeName() const { + return "cockroach.roachpb.JoinNodeResponse"; +} + + // @@protoc_insertion_point(namespace_scope) } // namespace roachpb } // namespace cockroach @@ -40089,6 +40541,12 @@ template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::cockroach::roachpb::GossipSubscr template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::cockroach::roachpb::GossipSubscriptionEvent* Arena::CreateMaybeMessage< ::cockroach::roachpb::GossipSubscriptionEvent >(Arena* arena) { return Arena::CreateInternal< ::cockroach::roachpb::GossipSubscriptionEvent >(arena); } +template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::cockroach::roachpb::JoinNodeRequest* Arena::CreateMaybeMessage< ::cockroach::roachpb::JoinNodeRequest >(Arena* arena) { + return Arena::CreateInternal< ::cockroach::roachpb::JoinNodeRequest >(arena); +} +template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::cockroach::roachpb::JoinNodeResponse* Arena::CreateMaybeMessage< ::cockroach::roachpb::JoinNodeResponse >(Arena* arena) { + return Arena::CreateInternal< ::cockroach::roachpb::JoinNodeResponse >(arena); +} } // namespace protobuf } // namespace google diff --git a/c-deps/libroach/protos/roachpb/api.pb.h b/c-deps/libroach/protos/roachpb/api.pb.h index 13d26a62b71d..4d998e4f844f 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.h +++ b/c-deps/libroach/protos/roachpb/api.pb.h @@ -49,7 +49,7 @@ namespace protobuf_roachpb_2fapi_2eproto { struct TableStruct { static const ::google::protobuf::internal::ParseTableField entries[]; static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; - static const ::google::protobuf::internal::ParseTable schema[124]; + static const ::google::protobuf::internal::ParseTable schema[126]; static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; static const ::google::protobuf::uint32 offsets[]; @@ -270,6 +270,12 @@ extern InitPutRequestDefaultTypeInternal _InitPutRequest_default_instance_; class InitPutResponse; class InitPutResponseDefaultTypeInternal; extern InitPutResponseDefaultTypeInternal _InitPutResponse_default_instance_; +class JoinNodeRequest; +class JoinNodeRequestDefaultTypeInternal; +extern JoinNodeRequestDefaultTypeInternal _JoinNodeRequest_default_instance_; +class JoinNodeResponse; +class JoinNodeResponseDefaultTypeInternal; +extern JoinNodeResponseDefaultTypeInternal _JoinNodeResponse_default_instance_; class LeaseInfoRequest; class LeaseInfoRequestDefaultTypeInternal; extern LeaseInfoRequestDefaultTypeInternal _LeaseInfoRequest_default_instance_; @@ -504,6 +510,8 @@ template<> ::cockroach::roachpb::IncrementRequest* Arena::CreateMaybeMessage<::c template<> ::cockroach::roachpb::IncrementResponse* Arena::CreateMaybeMessage<::cockroach::roachpb::IncrementResponse>(Arena*); template<> ::cockroach::roachpb::InitPutRequest* Arena::CreateMaybeMessage<::cockroach::roachpb::InitPutRequest>(Arena*); template<> ::cockroach::roachpb::InitPutResponse* Arena::CreateMaybeMessage<::cockroach::roachpb::InitPutResponse>(Arena*); +template<> ::cockroach::roachpb::JoinNodeRequest* Arena::CreateMaybeMessage<::cockroach::roachpb::JoinNodeRequest>(Arena*); +template<> ::cockroach::roachpb::JoinNodeResponse* Arena::CreateMaybeMessage<::cockroach::roachpb::JoinNodeResponse>(Arena*); template<> ::cockroach::roachpb::LeaseInfoRequest* Arena::CreateMaybeMessage<::cockroach::roachpb::LeaseInfoRequest>(Arena*); template<> ::cockroach::roachpb::LeaseInfoResponse* Arena::CreateMaybeMessage<::cockroach::roachpb::LeaseInfoResponse>(Arena*); template<> ::cockroach::roachpb::MergeRequest* Arena::CreateMaybeMessage<::cockroach::roachpb::MergeRequest>(Arena*); @@ -17577,6 +17585,227 @@ class GossipSubscriptionEvent : public ::google::protobuf::MessageLite /* @@prot mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::protobuf_roachpb_2fapi_2eproto::TableStruct; }; +// ------------------------------------------------------------------- + +class JoinNodeRequest : public ::google::protobuf::MessageLite /* @@protoc_insertion_point(class_definition:cockroach.roachpb.JoinNodeRequest) */ { + public: + JoinNodeRequest(); + virtual ~JoinNodeRequest(); + + JoinNodeRequest(const JoinNodeRequest& from); + + inline JoinNodeRequest& operator=(const JoinNodeRequest& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + JoinNodeRequest(JoinNodeRequest&& from) noexcept + : JoinNodeRequest() { + *this = ::std::move(from); + } + + inline JoinNodeRequest& operator=(JoinNodeRequest&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const JoinNodeRequest& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const JoinNodeRequest* internal_default_instance() { + return reinterpret_cast( + &_JoinNodeRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 124; + + void Swap(JoinNodeRequest* other); + friend void swap(JoinNodeRequest& a, JoinNodeRequest& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline JoinNodeRequest* New() const final { + return CreateMaybeMessage(NULL); + } + + JoinNodeRequest* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CheckTypeAndMergeFrom(const ::google::protobuf::MessageLite& from) + final; + void CopyFrom(const JoinNodeRequest& from); + void MergeFrom(const JoinNodeRequest& from); + void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + void DiscardUnknownFields(); + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + void InternalSwap(JoinNodeRequest* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::std::string GetTypeName() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // .cockroach.roachpb.Version min_supported_version = 1; + bool has_min_supported_version() const; + void clear_min_supported_version(); + static const int kMinSupportedVersionFieldNumber = 1; + private: + const ::cockroach::roachpb::Version& _internal_min_supported_version() const; + public: + const ::cockroach::roachpb::Version& min_supported_version() const; + ::cockroach::roachpb::Version* release_min_supported_version(); + ::cockroach::roachpb::Version* mutable_min_supported_version(); + void set_allocated_min_supported_version(::cockroach::roachpb::Version* min_supported_version); + + // @@protoc_insertion_point(class_scope:cockroach.roachpb.JoinNodeRequest) + private: + + ::google::protobuf::internal::InternalMetadataWithArenaLite _internal_metadata_; + ::cockroach::roachpb::Version* min_supported_version_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::protobuf_roachpb_2fapi_2eproto::TableStruct; +}; +// ------------------------------------------------------------------- + +class JoinNodeResponse : public ::google::protobuf::MessageLite /* @@protoc_insertion_point(class_definition:cockroach.roachpb.JoinNodeResponse) */ { + public: + JoinNodeResponse(); + virtual ~JoinNodeResponse(); + + JoinNodeResponse(const JoinNodeResponse& from); + + inline JoinNodeResponse& operator=(const JoinNodeResponse& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + JoinNodeResponse(JoinNodeResponse&& from) noexcept + : JoinNodeResponse() { + *this = ::std::move(from); + } + + inline JoinNodeResponse& operator=(JoinNodeResponse&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const JoinNodeResponse& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const JoinNodeResponse* internal_default_instance() { + return reinterpret_cast( + &_JoinNodeResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 125; + + void Swap(JoinNodeResponse* other); + friend void swap(JoinNodeResponse& a, JoinNodeResponse& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline JoinNodeResponse* New() const final { + return CreateMaybeMessage(NULL); + } + + JoinNodeResponse* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CheckTypeAndMergeFrom(const ::google::protobuf::MessageLite& from) + final; + void CopyFrom(const JoinNodeResponse& from); + void MergeFrom(const JoinNodeResponse& from); + void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + void DiscardUnknownFields(); + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + void InternalSwap(JoinNodeResponse* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::std::string GetTypeName() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + void clear_cluster_id(); + static const int kClusterIdFieldNumber = 1; + const ::std::string& cluster_id() const; + void set_cluster_id(const ::std::string& value); + #if LANG_CXX11 + void set_cluster_id(::std::string&& value); + #endif + void set_cluster_id(const char* value); + void set_cluster_id(const void* value, size_t size); + ::std::string* mutable_cluster_id(); + ::std::string* release_cluster_id(); + void set_allocated_cluster_id(::std::string* cluster_id); + + void clear_node_id(); + static const int kNodeIdFieldNumber = 2; + ::google::protobuf::int32 node_id() const; + void set_node_id(::google::protobuf::int32 value); + + // @@protoc_insertion_point(class_scope:cockroach.roachpb.JoinNodeResponse) + private: + + ::google::protobuf::internal::InternalMetadataWithArenaLite _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr cluster_id_; + ::google::protobuf::int32 node_id_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::protobuf_roachpb_2fapi_2eproto::TableStruct; +}; // =================================================================== @@ -36113,6 +36342,127 @@ inline void GossipSubscriptionEvent::set_allocated_error(::cockroach::roachpb::E // @@protoc_insertion_point(field_set_allocated:cockroach.roachpb.GossipSubscriptionEvent.error) } +// ------------------------------------------------------------------- + +// JoinNodeRequest + +// .cockroach.roachpb.Version min_supported_version = 1; +inline bool JoinNodeRequest::has_min_supported_version() const { + return this != internal_default_instance() && min_supported_version_ != NULL; +} +inline const ::cockroach::roachpb::Version& JoinNodeRequest::_internal_min_supported_version() const { + return *min_supported_version_; +} +inline const ::cockroach::roachpb::Version& JoinNodeRequest::min_supported_version() const { + const ::cockroach::roachpb::Version* p = min_supported_version_; + // @@protoc_insertion_point(field_get:cockroach.roachpb.JoinNodeRequest.min_supported_version) + return p != NULL ? *p : *reinterpret_cast( + &::cockroach::roachpb::_Version_default_instance_); +} +inline ::cockroach::roachpb::Version* JoinNodeRequest::release_min_supported_version() { + // @@protoc_insertion_point(field_release:cockroach.roachpb.JoinNodeRequest.min_supported_version) + + ::cockroach::roachpb::Version* temp = min_supported_version_; + min_supported_version_ = NULL; + return temp; +} +inline ::cockroach::roachpb::Version* JoinNodeRequest::mutable_min_supported_version() { + + if (min_supported_version_ == NULL) { + auto* p = CreateMaybeMessage<::cockroach::roachpb::Version>(GetArenaNoVirtual()); + min_supported_version_ = p; + } + // @@protoc_insertion_point(field_mutable:cockroach.roachpb.JoinNodeRequest.min_supported_version) + return min_supported_version_; +} +inline void JoinNodeRequest::set_allocated_min_supported_version(::cockroach::roachpb::Version* min_supported_version) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == NULL) { + delete reinterpret_cast< ::google::protobuf::MessageLite*>(min_supported_version_); + } + if (min_supported_version) { + ::google::protobuf::Arena* submessage_arena = NULL; + if (message_arena != submessage_arena) { + min_supported_version = ::google::protobuf::internal::GetOwnedMessage( + message_arena, min_supported_version, submessage_arena); + } + + } else { + + } + min_supported_version_ = min_supported_version; + // @@protoc_insertion_point(field_set_allocated:cockroach.roachpb.JoinNodeRequest.min_supported_version) +} + +// ------------------------------------------------------------------- + +// JoinNodeResponse + +inline void JoinNodeResponse::clear_cluster_id() { + cluster_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& JoinNodeResponse::cluster_id() const { + // @@protoc_insertion_point(field_get:cockroach.roachpb.JoinNodeResponse.cluster_id) + return cluster_id_.GetNoArena(); +} +inline void JoinNodeResponse::set_cluster_id(const ::std::string& value) { + + cluster_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:cockroach.roachpb.JoinNodeResponse.cluster_id) +} +#if LANG_CXX11 +inline void JoinNodeResponse::set_cluster_id(::std::string&& value) { + + cluster_id_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:cockroach.roachpb.JoinNodeResponse.cluster_id) +} +#endif +inline void JoinNodeResponse::set_cluster_id(const char* value) { + GOOGLE_DCHECK(value != NULL); + + cluster_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:cockroach.roachpb.JoinNodeResponse.cluster_id) +} +inline void JoinNodeResponse::set_cluster_id(const void* value, size_t size) { + + cluster_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:cockroach.roachpb.JoinNodeResponse.cluster_id) +} +inline ::std::string* JoinNodeResponse::mutable_cluster_id() { + + // @@protoc_insertion_point(field_mutable:cockroach.roachpb.JoinNodeResponse.cluster_id) + return cluster_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* JoinNodeResponse::release_cluster_id() { + // @@protoc_insertion_point(field_release:cockroach.roachpb.JoinNodeResponse.cluster_id) + + return cluster_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void JoinNodeResponse::set_allocated_cluster_id(::std::string* cluster_id) { + if (cluster_id != NULL) { + + } else { + + } + cluster_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), cluster_id); + // @@protoc_insertion_point(field_set_allocated:cockroach.roachpb.JoinNodeResponse.cluster_id) +} + +inline void JoinNodeResponse::clear_node_id() { + node_id_ = 0; +} +inline ::google::protobuf::int32 JoinNodeResponse::node_id() const { + // @@protoc_insertion_point(field_get:cockroach.roachpb.JoinNodeResponse.node_id) + return node_id_; +} +inline void JoinNodeResponse::set_node_id(::google::protobuf::int32 value) { + + node_id_ = value; + // @@protoc_insertion_point(field_set:cockroach.roachpb.JoinNodeResponse.node_id) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -36362,6 +36712,10 @@ inline void GossipSubscriptionEvent::set_allocated_error(::cockroach::roachpb::E // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/pkg/ccl/kvccl/kvtenantccl/connector_test.go b/pkg/ccl/kvccl/kvtenantccl/connector_test.go index 075b6ba7c8e6..aec146c2459f 100644 --- a/pkg/ccl/kvccl/kvtenantccl/connector_test.go +++ b/pkg/ccl/kvccl/kvtenantccl/connector_test.go @@ -39,6 +39,8 @@ var rpcRetryOpts = retry.Options{ MaxBackoff: 4 * time.Microsecond, } +var _ roachpb.InternalServer = &mockServer{} + type mockServer struct { rangeLookupFn func(context.Context, *roachpb.RangeLookupRequest) (*roachpb.RangeLookupResponse, error) gossipSubFn func(*roachpb.GossipSubscriptionRequest, roachpb.Internal_GossipSubscriptionServer) error @@ -64,6 +66,12 @@ func (*mockServer) RangeFeed(*roachpb.RangeFeedRequest, roachpb.Internal_RangeFe panic("unimplemented") } +func (m *mockServer) Join( + context.Context, *roachpb.JoinNodeRequest, +) (*roachpb.JoinNodeResponse, error) { + panic("unimplemented") +} + func gossipEventForNodeDesc(desc *roachpb.NodeDescriptor) *roachpb.GossipSubscriptionEvent { val, err := protoutil.Marshal(desc) if err != nil { diff --git a/pkg/clusterversion/cockroach_versions.go b/pkg/clusterversion/cockroach_versions.go index d396298906f1..0f5fb98d15bc 100644 --- a/pkg/clusterversion/cockroach_versions.go +++ b/pkg/clusterversion/cockroach_versions.go @@ -589,6 +589,7 @@ var ( // this binary. If this binary is started using a store marked with an older // version than binaryMinSupportedVersion, then the binary will exit with // an error. + // // We support everything after 19.1, including pre-release 19.2 versions. // This is generally beneficial, but in particular it allows the // version-upgrade roachtest to use a pre-release 19.2 binary before upgrading diff --git a/pkg/kv/kvclient/kvcoord/send_test.go b/pkg/kv/kvclient/kvcoord/send_test.go index 63eace631091..80eb19abf3b4 100644 --- a/pkg/kv/kvclient/kvcoord/send_test.go +++ b/pkg/kv/kvclient/kvcoord/send_test.go @@ -34,6 +34,8 @@ import ( "github.com/stretchr/testify/require" ) +var _ roachpb.InternalServer = Node(0) + type Node time.Duration func (n Node) Batch( @@ -61,6 +63,10 @@ func (n Node) GossipSubscription( panic("unimplemented") } +func (n Node) Join(context.Context, *roachpb.JoinNodeRequest) (*roachpb.JoinNodeResponse, error) { + panic("unimplemented") +} + // TestSendToOneClient verifies that Send correctly sends a request // to one server using the heartbeat RPC. func TestSendToOneClient(t *testing.T) { diff --git a/pkg/kv/kvclient/kvcoord/transport_test.go b/pkg/kv/kvclient/kvcoord/transport_test.go index 472e4c8f8c6b..d980dfd7480b 100644 --- a/pkg/kv/kvclient/kvcoord/transport_test.go +++ b/pkg/kv/kvclient/kvcoord/transport_test.go @@ -179,3 +179,9 @@ func (m *mockInternalClient) GossipSubscription( ) (roachpb.Internal_GossipSubscriptionClient, error) { return nil, fmt.Errorf("unsupported GossipSubscripion call") } + +func (m *mockInternalClient) Join( + context.Context, *roachpb.JoinNodeRequest, ...grpc.CallOption, +) (*roachpb.JoinNodeResponse, error) { + return nil, fmt.Errorf("unsupported Join call") +} diff --git a/pkg/kv/kvserver/replica_gossip.go b/pkg/kv/kvserver/replica_gossip.go index c594b1080107..9ef8f487edec 100644 --- a/pkg/kv/kvserver/replica_gossip.go +++ b/pkg/kv/kvserver/replica_gossip.go @@ -287,7 +287,7 @@ func (r *Replica) maybeGossipFirstRange(ctx context.Context) *roachpb.Error { // Gossip the cluster ID from all replicas of the first range; there // is no expiration on the cluster ID. if log.V(1) { - log.Infof(ctx, "gossiping cluster id %q from store %d, r%d", r.store.ClusterID(), + log.Infof(ctx, "gossiping cluster ID %q from store %d, r%d", r.store.ClusterID(), r.store.StoreID(), r.RangeID) } if err := r.store.Gossip().AddClusterID(r.store.ClusterID()); err != nil { diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index ea6c8f80c978..3bc659794013 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -72,7 +72,7 @@ func (x ReadConsistencyType) String() string { return proto.EnumName(ReadConsistencyType_name, int32(x)) } func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{0} + return fileDescriptor_api_85cf05ed10668ebf, []int{0} } // ScanFormat is an enumeration of the available response formats for MVCCScan @@ -100,7 +100,7 @@ func (x ScanFormat) String() string { return proto.EnumName(ScanFormat_name, int32(x)) } func (ScanFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{1} + return fileDescriptor_api_85cf05ed10668ebf, []int{1} } type ChecksumMode int32 @@ -147,7 +147,7 @@ func (x ChecksumMode) String() string { return proto.EnumName(ChecksumMode_name, int32(x)) } func (ChecksumMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{2} + return fileDescriptor_api_85cf05ed10668ebf, []int{2} } // PushTxnType determines what action to take when pushing a transaction. @@ -178,7 +178,7 @@ func (x PushTxnType) String() string { return proto.EnumName(PushTxnType_name, int32(x)) } func (PushTxnType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{3} + return fileDescriptor_api_85cf05ed10668ebf, []int{3} } type ExternalStorageProvider int32 @@ -219,7 +219,7 @@ func (x ExternalStorageProvider) String() string { return proto.EnumName(ExternalStorageProvider_name, int32(x)) } func (ExternalStorageProvider) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{4} + return fileDescriptor_api_85cf05ed10668ebf, []int{4} } type MVCCFilter int32 @@ -242,7 +242,7 @@ func (x MVCCFilter) String() string { return proto.EnumName(MVCCFilter_name, int32(x)) } func (MVCCFilter) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{5} + return fileDescriptor_api_85cf05ed10668ebf, []int{5} } type ResponseHeader_ResumeReason int32 @@ -268,7 +268,7 @@ func (x ResponseHeader_ResumeReason) String() string { return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x)) } func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{1, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{1, 0} } type CheckConsistencyResponse_Status int32 @@ -310,7 +310,7 @@ func (x CheckConsistencyResponse_Status) String() string { return proto.EnumName(CheckConsistencyResponse_Status_name, int32(x)) } func (CheckConsistencyResponse_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{25, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{25, 0} } // RequestHeader is supplied with every storage node request. @@ -331,7 +331,7 @@ func (m *RequestHeader) Reset() { *m = RequestHeader{} } func (m *RequestHeader) String() string { return proto.CompactTextString(m) } func (*RequestHeader) ProtoMessage() {} func (*RequestHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{0} + return fileDescriptor_api_85cf05ed10668ebf, []int{0} } func (m *RequestHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -402,7 +402,7 @@ func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } func (*ResponseHeader) ProtoMessage() {} func (*ResponseHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{1} + return fileDescriptor_api_85cf05ed10668ebf, []int{1} } func (m *ResponseHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -436,7 +436,7 @@ func (m *GetRequest) Reset() { *m = GetRequest{} } func (m *GetRequest) String() string { return proto.CompactTextString(m) } func (*GetRequest) ProtoMessage() {} func (*GetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{2} + return fileDescriptor_api_85cf05ed10668ebf, []int{2} } func (m *GetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -479,7 +479,7 @@ func (m *GetResponse) Reset() { *m = GetResponse{} } func (m *GetResponse) String() string { return proto.CompactTextString(m) } func (*GetResponse) ProtoMessage() {} func (*GetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{3} + return fileDescriptor_api_85cf05ed10668ebf, []int{3} } func (m *GetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -522,7 +522,7 @@ func (m *PutRequest) Reset() { *m = PutRequest{} } func (m *PutRequest) String() string { return proto.CompactTextString(m) } func (*PutRequest) ProtoMessage() {} func (*PutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{4} + return fileDescriptor_api_85cf05ed10668ebf, []int{4} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +556,7 @@ func (m *PutResponse) Reset() { *m = PutResponse{} } func (m *PutResponse) String() string { return proto.CompactTextString(m) } func (*PutResponse) ProtoMessage() {} func (*PutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{5} + return fileDescriptor_api_85cf05ed10668ebf, []int{5} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -638,7 +638,7 @@ func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} } func (m *ConditionalPutRequest) String() string { return proto.CompactTextString(m) } func (*ConditionalPutRequest) ProtoMessage() {} func (*ConditionalPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{6} + return fileDescriptor_api_85cf05ed10668ebf, []int{6} } func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -673,7 +673,7 @@ func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{} func (m *ConditionalPutResponse) String() string { return proto.CompactTextString(m) } func (*ConditionalPutResponse) ProtoMessage() {} func (*ConditionalPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{7} + return fileDescriptor_api_85cf05ed10668ebf, []int{7} } func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -719,7 +719,7 @@ func (m *InitPutRequest) Reset() { *m = InitPutRequest{} } func (m *InitPutRequest) String() string { return proto.CompactTextString(m) } func (*InitPutRequest) ProtoMessage() {} func (*InitPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{8} + return fileDescriptor_api_85cf05ed10668ebf, []int{8} } func (m *InitPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,7 +753,7 @@ func (m *InitPutResponse) Reset() { *m = InitPutResponse{} } func (m *InitPutResponse) String() string { return proto.CompactTextString(m) } func (*InitPutResponse) ProtoMessage() {} func (*InitPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{9} + return fileDescriptor_api_85cf05ed10668ebf, []int{9} } func (m *InitPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +793,7 @@ func (m *IncrementRequest) Reset() { *m = IncrementRequest{} } func (m *IncrementRequest) String() string { return proto.CompactTextString(m) } func (*IncrementRequest) ProtoMessage() {} func (*IncrementRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{10} + return fileDescriptor_api_85cf05ed10668ebf, []int{10} } func (m *IncrementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -830,7 +830,7 @@ func (m *IncrementResponse) Reset() { *m = IncrementResponse{} } func (m *IncrementResponse) String() string { return proto.CompactTextString(m) } func (*IncrementResponse) ProtoMessage() {} func (*IncrementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{11} + return fileDescriptor_api_85cf05ed10668ebf, []int{11} } func (m *IncrementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +864,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRequest) ProtoMessage() {} func (*DeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{12} + return fileDescriptor_api_85cf05ed10668ebf, []int{12} } func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -898,7 +898,7 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } func (*DeleteResponse) ProtoMessage() {} func (*DeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{13} + return fileDescriptor_api_85cf05ed10668ebf, []int{13} } func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -950,7 +950,7 @@ func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRangeRequest) ProtoMessage() {} func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{14} + return fileDescriptor_api_85cf05ed10668ebf, []int{14} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -987,7 +987,7 @@ func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteRangeResponse) ProtoMessage() {} func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{15} + return fileDescriptor_api_85cf05ed10668ebf, []int{15} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +1042,7 @@ func (m *ClearRangeRequest) Reset() { *m = ClearRangeRequest{} } func (m *ClearRangeRequest) String() string { return proto.CompactTextString(m) } func (*ClearRangeRequest) ProtoMessage() {} func (*ClearRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{16} + return fileDescriptor_api_85cf05ed10668ebf, []int{16} } func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1076,7 +1076,7 @@ func (m *ClearRangeResponse) Reset() { *m = ClearRangeResponse{} } func (m *ClearRangeResponse) String() string { return proto.CompactTextString(m) } func (*ClearRangeResponse) ProtoMessage() {} func (*ClearRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{17} + return fileDescriptor_api_85cf05ed10668ebf, []int{17} } func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1117,7 +1117,7 @@ func (m *RevertRangeRequest) Reset() { *m = RevertRangeRequest{} } func (m *RevertRangeRequest) String() string { return proto.CompactTextString(m) } func (*RevertRangeRequest) ProtoMessage() {} func (*RevertRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{18} + return fileDescriptor_api_85cf05ed10668ebf, []int{18} } func (m *RevertRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1151,7 +1151,7 @@ func (m *RevertRangeResponse) Reset() { *m = RevertRangeResponse{} } func (m *RevertRangeResponse) String() string { return proto.CompactTextString(m) } func (*RevertRangeResponse) ProtoMessage() {} func (*RevertRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{19} + return fileDescriptor_api_85cf05ed10668ebf, []int{19} } func (m *RevertRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1202,7 +1202,7 @@ func (m *ScanRequest) Reset() { *m = ScanRequest{} } func (m *ScanRequest) String() string { return proto.CompactTextString(m) } func (*ScanRequest) ProtoMessage() {} func (*ScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{20} + return fileDescriptor_api_85cf05ed10668ebf, []int{20} } func (m *ScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1254,7 +1254,7 @@ func (m *ScanResponse) Reset() { *m = ScanResponse{} } func (m *ScanResponse) String() string { return proto.CompactTextString(m) } func (*ScanResponse) ProtoMessage() {} func (*ScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{21} + return fileDescriptor_api_85cf05ed10668ebf, []int{21} } func (m *ScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1305,7 +1305,7 @@ func (m *ReverseScanRequest) Reset() { *m = ReverseScanRequest{} } func (m *ReverseScanRequest) String() string { return proto.CompactTextString(m) } func (*ReverseScanRequest) ProtoMessage() {} func (*ReverseScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{22} + return fileDescriptor_api_85cf05ed10668ebf, []int{22} } func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1357,7 +1357,7 @@ func (m *ReverseScanResponse) Reset() { *m = ReverseScanResponse{} } func (m *ReverseScanResponse) String() string { return proto.CompactTextString(m) } func (*ReverseScanResponse) ProtoMessage() {} func (*ReverseScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{23} + return fileDescriptor_api_85cf05ed10668ebf, []int{23} } func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1410,7 +1410,7 @@ func (m *CheckConsistencyRequest) Reset() { *m = CheckConsistencyRequest func (m *CheckConsistencyRequest) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyRequest) ProtoMessage() {} func (*CheckConsistencyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{24} + return fileDescriptor_api_85cf05ed10668ebf, []int{24} } func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1447,7 +1447,7 @@ func (m *CheckConsistencyResponse) Reset() { *m = CheckConsistencyRespon func (m *CheckConsistencyResponse) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse) ProtoMessage() {} func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{25} + return fileDescriptor_api_85cf05ed10668ebf, []int{25} } func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1491,7 +1491,7 @@ func (m *CheckConsistencyResponse_Result) Reset() { *m = CheckConsistenc func (m *CheckConsistencyResponse_Result) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse_Result) ProtoMessage() {} func (*CheckConsistencyResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{25, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{25, 0} } func (m *CheckConsistencyResponse_Result) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1539,7 +1539,7 @@ func (m *RecomputeStatsRequest) Reset() { *m = RecomputeStatsRequest{} } func (m *RecomputeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsRequest) ProtoMessage() {} func (*RecomputeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{26} + return fileDescriptor_api_85cf05ed10668ebf, []int{26} } func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1575,7 +1575,7 @@ func (m *RecomputeStatsResponse) Reset() { *m = RecomputeStatsResponse{} func (m *RecomputeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsResponse) ProtoMessage() {} func (*RecomputeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{27} + return fileDescriptor_api_85cf05ed10668ebf, []int{27} } func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1672,7 +1672,7 @@ func (m *EndTxnRequest) Reset() { *m = EndTxnRequest{} } func (m *EndTxnRequest) String() string { return proto.CompactTextString(m) } func (*EndTxnRequest) ProtoMessage() {} func (*EndTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{28} + return fileDescriptor_api_85cf05ed10668ebf, []int{28} } func (m *EndTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1718,7 +1718,7 @@ func (m *EndTxnResponse) Reset() { *m = EndTxnResponse{} } func (m *EndTxnResponse) String() string { return proto.CompactTextString(m) } func (*EndTxnResponse) ProtoMessage() {} func (*EndTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{29} + return fileDescriptor_api_85cf05ed10668ebf, []int{29} } func (m *EndTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1779,7 +1779,7 @@ func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminSplitRequest) ProtoMessage() {} func (*AdminSplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{30} + return fileDescriptor_api_85cf05ed10668ebf, []int{30} } func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1814,7 +1814,7 @@ func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminSplitResponse) ProtoMessage() {} func (*AdminSplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{31} + return fileDescriptor_api_85cf05ed10668ebf, []int{31} } func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1853,7 +1853,7 @@ func (m *AdminUnsplitRequest) Reset() { *m = AdminUnsplitRequest{} } func (m *AdminUnsplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitRequest) ProtoMessage() {} func (*AdminUnsplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{32} + return fileDescriptor_api_85cf05ed10668ebf, []int{32} } func (m *AdminUnsplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1888,7 +1888,7 @@ func (m *AdminUnsplitResponse) Reset() { *m = AdminUnsplitResponse{} } func (m *AdminUnsplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitResponse) ProtoMessage() {} func (*AdminUnsplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{33} + return fileDescriptor_api_85cf05ed10668ebf, []int{33} } func (m *AdminUnsplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1931,7 +1931,7 @@ func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) } func (*AdminMergeRequest) ProtoMessage() {} func (*AdminMergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{34} + return fileDescriptor_api_85cf05ed10668ebf, []int{34} } func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1966,7 +1966,7 @@ func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) } func (*AdminMergeResponse) ProtoMessage() {} func (*AdminMergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{35} + return fileDescriptor_api_85cf05ed10668ebf, []int{35} } func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2004,7 +2004,7 @@ func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseReq func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseRequest) ProtoMessage() {} func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{36} + return fileDescriptor_api_85cf05ed10668ebf, []int{36} } func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2037,7 +2037,7 @@ func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseRe func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseResponse) ProtoMessage() {} func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{37} + return fileDescriptor_api_85cf05ed10668ebf, []int{37} } func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2072,7 +2072,7 @@ func (m *ReplicationChange) Reset() { *m = ReplicationChange{} } func (m *ReplicationChange) String() string { return proto.CompactTextString(m) } func (*ReplicationChange) ProtoMessage() {} func (*ReplicationChange) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{38} + return fileDescriptor_api_85cf05ed10668ebf, []int{38} } func (m *ReplicationChange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2130,7 +2130,7 @@ func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasR func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasRequest) ProtoMessage() {} func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{39} + return fileDescriptor_api_85cf05ed10668ebf, []int{39} } func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2165,7 +2165,7 @@ func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicas func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasResponse) ProtoMessage() {} func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{40} + return fileDescriptor_api_85cf05ed10668ebf, []int{40} } func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2202,7 +2202,7 @@ func (m *AdminRelocateRangeRequest) Reset() { *m = AdminRelocateRangeReq func (m *AdminRelocateRangeRequest) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeRequest) ProtoMessage() {} func (*AdminRelocateRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{41} + return fileDescriptor_api_85cf05ed10668ebf, []int{41} } func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2235,7 +2235,7 @@ func (m *AdminRelocateRangeResponse) Reset() { *m = AdminRelocateRangeRe func (m *AdminRelocateRangeResponse) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeResponse) ProtoMessage() {} func (*AdminRelocateRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{42} + return fileDescriptor_api_85cf05ed10668ebf, []int{42} } func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2274,7 +2274,7 @@ func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} } func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnRequest) ProtoMessage() {} func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{43} + return fileDescriptor_api_85cf05ed10668ebf, []int{43} } func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2311,7 +2311,7 @@ func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} } func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnResponse) ProtoMessage() {} func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{44} + return fileDescriptor_api_85cf05ed10668ebf, []int{44} } func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2349,7 +2349,7 @@ func (m *GCRequest) Reset() { *m = GCRequest{} } func (m *GCRequest) String() string { return proto.CompactTextString(m) } func (*GCRequest) ProtoMessage() {} func (*GCRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{45} + return fileDescriptor_api_85cf05ed10668ebf, []int{45} } func (m *GCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2383,7 +2383,7 @@ func (m *GCRequest_GCKey) Reset() { *m = GCRequest_GCKey{} } func (m *GCRequest_GCKey) String() string { return proto.CompactTextString(m) } func (*GCRequest_GCKey) ProtoMessage() {} func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{45, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{45, 0} } func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2417,7 +2417,7 @@ func (m *GCResponse) Reset() { *m = GCResponse{} } func (m *GCResponse) String() string { return proto.CompactTextString(m) } func (*GCResponse) ProtoMessage() {} func (*GCResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{46} + return fileDescriptor_api_85cf05ed10668ebf, []int{46} } func (m *GCResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2486,7 +2486,7 @@ func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} } func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) } func (*PushTxnRequest) ProtoMessage() {} func (*PushTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{47} + return fileDescriptor_api_85cf05ed10668ebf, []int{47} } func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2529,7 +2529,7 @@ func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} } func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) } func (*PushTxnResponse) ProtoMessage() {} func (*PushTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{48} + return fileDescriptor_api_85cf05ed10668ebf, []int{48} } func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2576,7 +2576,7 @@ func (m *RecoverTxnRequest) Reset() { *m = RecoverTxnRequest{} } func (m *RecoverTxnRequest) String() string { return proto.CompactTextString(m) } func (*RecoverTxnRequest) ProtoMessage() {} func (*RecoverTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{49} + return fileDescriptor_api_85cf05ed10668ebf, []int{49} } func (m *RecoverTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2612,7 +2612,7 @@ func (m *RecoverTxnResponse) Reset() { *m = RecoverTxnResponse{} } func (m *RecoverTxnResponse) String() string { return proto.CompactTextString(m) } func (*RecoverTxnResponse) ProtoMessage() {} func (*RecoverTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{50} + return fileDescriptor_api_85cf05ed10668ebf, []int{50} } func (m *RecoverTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2656,7 +2656,7 @@ func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} } func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) } func (*QueryTxnRequest) ProtoMessage() {} func (*QueryTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{51} + return fileDescriptor_api_85cf05ed10668ebf, []int{51} } func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2695,7 +2695,7 @@ func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} } func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) } func (*QueryTxnResponse) ProtoMessage() {} func (*QueryTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{52} + return fileDescriptor_api_85cf05ed10668ebf, []int{52} } func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2755,7 +2755,7 @@ func (m *QueryIntentRequest) Reset() { *m = QueryIntentRequest{} } func (m *QueryIntentRequest) String() string { return proto.CompactTextString(m) } func (*QueryIntentRequest) ProtoMessage() {} func (*QueryIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{53} + return fileDescriptor_api_85cf05ed10668ebf, []int{53} } func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2791,7 +2791,7 @@ func (m *QueryIntentResponse) Reset() { *m = QueryIntentResponse{} } func (m *QueryIntentResponse) String() string { return proto.CompactTextString(m) } func (*QueryIntentResponse) ProtoMessage() {} func (*QueryIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{54} + return fileDescriptor_api_85cf05ed10668ebf, []int{54} } func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2837,7 +2837,7 @@ func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} } func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRequest) ProtoMessage() {} func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{55} + return fileDescriptor_api_85cf05ed10668ebf, []int{55} } func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2872,7 +2872,7 @@ func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} } func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentResponse) ProtoMessage() {} func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{56} + return fileDescriptor_api_85cf05ed10668ebf, []int{56} } func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2922,7 +2922,7 @@ func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeReq func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeRequest) ProtoMessage() {} func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{57} + return fileDescriptor_api_85cf05ed10668ebf, []int{57} } func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2957,7 +2957,7 @@ func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeRe func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeResponse) ProtoMessage() {} func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{58} + return fileDescriptor_api_85cf05ed10668ebf, []int{58} } func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2994,7 +2994,7 @@ func (m *MergeRequest) Reset() { *m = MergeRequest{} } func (m *MergeRequest) String() string { return proto.CompactTextString(m) } func (*MergeRequest) ProtoMessage() {} func (*MergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{59} + return fileDescriptor_api_85cf05ed10668ebf, []int{59} } func (m *MergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3028,7 +3028,7 @@ func (m *MergeResponse) Reset() { *m = MergeResponse{} } func (m *MergeResponse) String() string { return proto.CompactTextString(m) } func (*MergeResponse) ProtoMessage() {} func (*MergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{60} + return fileDescriptor_api_85cf05ed10668ebf, []int{60} } func (m *MergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3073,7 +3073,7 @@ func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} } func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) } func (*TruncateLogRequest) ProtoMessage() {} func (*TruncateLogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{61} + return fileDescriptor_api_85cf05ed10668ebf, []int{61} } func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3107,7 +3107,7 @@ func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} } func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) } func (*TruncateLogResponse) ProtoMessage() {} func (*TruncateLogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{62} + return fileDescriptor_api_85cf05ed10668ebf, []int{62} } func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3151,7 +3151,7 @@ func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} } func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) } func (*RequestLeaseRequest) ProtoMessage() {} func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{63} + return fileDescriptor_api_85cf05ed10668ebf, []int{63} } func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3200,7 +3200,7 @@ func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} } func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*TransferLeaseRequest) ProtoMessage() {} func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{64} + return fileDescriptor_api_85cf05ed10668ebf, []int{64} } func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3237,7 +3237,7 @@ func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} } func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) } func (*LeaseInfoRequest) ProtoMessage() {} func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{65} + return fileDescriptor_api_85cf05ed10668ebf, []int{65} } func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3274,7 +3274,7 @@ func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} } func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) } func (*LeaseInfoResponse) ProtoMessage() {} func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{66} + return fileDescriptor_api_85cf05ed10668ebf, []int{66} } func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3309,7 +3309,7 @@ func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} } func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) } func (*RequestLeaseResponse) ProtoMessage() {} func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{67} + return fileDescriptor_api_85cf05ed10668ebf, []int{67} } func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3364,7 +3364,7 @@ func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{} func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumRequest) ProtoMessage() {} func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{68} + return fileDescriptor_api_85cf05ed10668ebf, []int{68} } func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3401,7 +3401,7 @@ func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumResponse) ProtoMessage() {} func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{69} + return fileDescriptor_api_85cf05ed10668ebf, []int{69} } func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3441,7 +3441,7 @@ func (m *ExternalStorage) Reset() { *m = ExternalStorage{} } func (m *ExternalStorage) String() string { return proto.CompactTextString(m) } func (*ExternalStorage) ProtoMessage() {} func (*ExternalStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70} + return fileDescriptor_api_85cf05ed10668ebf, []int{70} } func (m *ExternalStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3475,7 +3475,7 @@ func (m *ExternalStorage_LocalFilePath) Reset() { *m = ExternalStorage_L func (m *ExternalStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_LocalFilePath) ProtoMessage() {} func (*ExternalStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 0} } func (m *ExternalStorage_LocalFilePath) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3508,7 +3508,7 @@ func (m *ExternalStorage_Http) Reset() { *m = ExternalStorage_Http{} } func (m *ExternalStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Http) ProtoMessage() {} func (*ExternalStorage_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 1} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 1} } func (m *ExternalStorage_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3548,7 +3548,7 @@ func (m *ExternalStorage_S3) Reset() { *m = ExternalStorage_S3{} } func (m *ExternalStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_S3) ProtoMessage() {} func (*ExternalStorage_S3) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 2} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 2} } func (m *ExternalStorage_S3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3587,7 +3587,7 @@ func (m *ExternalStorage_GCS) Reset() { *m = ExternalStorage_GCS{} } func (m *ExternalStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_GCS) ProtoMessage() {} func (*ExternalStorage_GCS) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 3} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 3} } func (m *ExternalStorage_GCS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3623,7 +3623,7 @@ func (m *ExternalStorage_Azure) Reset() { *m = ExternalStorage_Azure{} } func (m *ExternalStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Azure) ProtoMessage() {} func (*ExternalStorage_Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 4} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 4} } func (m *ExternalStorage_Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3662,7 +3662,7 @@ func (m *ExternalStorage_Workload) Reset() { *m = ExternalStorage_Worklo func (m *ExternalStorage_Workload) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Workload) ProtoMessage() {} func (*ExternalStorage_Workload) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 5} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 5} } func (m *ExternalStorage_Workload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3702,7 +3702,7 @@ func (m *ExternalStorage_FileTable) Reset() { *m = ExternalStorage_FileT func (m *ExternalStorage_FileTable) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_FileTable) ProtoMessage() {} func (*ExternalStorage_FileTable) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{70, 6} + return fileDescriptor_api_85cf05ed10668ebf, []int{70, 6} } func (m *ExternalStorage_FileTable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3742,7 +3742,7 @@ func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} } func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) } func (*WriteBatchRequest) ProtoMessage() {} func (*WriteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{71} + return fileDescriptor_api_85cf05ed10668ebf, []int{71} } func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3776,7 +3776,7 @@ func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} } func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) } func (*WriteBatchResponse) ProtoMessage() {} func (*WriteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{72} + return fileDescriptor_api_85cf05ed10668ebf, []int{72} } func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3812,7 +3812,7 @@ func (m *FileEncryptionOptions) Reset() { *m = FileEncryptionOptions{} } func (m *FileEncryptionOptions) String() string { return proto.CompactTextString(m) } func (*FileEncryptionOptions) ProtoMessage() {} func (*FileEncryptionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{73} + return fileDescriptor_api_85cf05ed10668ebf, []int{73} } func (m *FileEncryptionOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3882,7 +3882,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} func (*ExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{74} + return fileDescriptor_api_85cf05ed10668ebf, []int{74} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3934,7 +3934,7 @@ func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} } func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) } func (*BulkOpSummary) ProtoMessage() {} func (*BulkOpSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{75} + return fileDescriptor_api_85cf05ed10668ebf, []int{75} } func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3970,7 +3970,7 @@ func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} func (*ExportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{76} + return fileDescriptor_api_85cf05ed10668ebf, []int{76} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4010,7 +4010,7 @@ func (m *ExportResponse_File) Reset() { *m = ExportResponse_File{} } func (m *ExportResponse_File) String() string { return proto.CompactTextString(m) } func (*ExportResponse_File) ProtoMessage() {} func (*ExportResponse_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{76, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{76, 0} } func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4061,7 +4061,7 @@ func (m *ImportRequest) Reset() { *m = ImportRequest{} } func (m *ImportRequest) String() string { return proto.CompactTextString(m) } func (*ImportRequest) ProtoMessage() {} func (*ImportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{77} + return fileDescriptor_api_85cf05ed10668ebf, []int{77} } func (m *ImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4096,7 +4096,7 @@ func (m *ImportRequest_File) Reset() { *m = ImportRequest_File{} } func (m *ImportRequest_File) String() string { return proto.CompactTextString(m) } func (*ImportRequest_File) ProtoMessage() {} func (*ImportRequest_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{77, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{77, 0} } func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4132,7 +4132,7 @@ func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRek func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) } func (*ImportRequest_TableRekey) ProtoMessage() {} func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{77, 1} + return fileDescriptor_api_85cf05ed10668ebf, []int{77, 1} } func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4167,7 +4167,7 @@ func (m *ImportResponse) Reset() { *m = ImportResponse{} } func (m *ImportResponse) String() string { return proto.CompactTextString(m) } func (*ImportResponse) ProtoMessage() {} func (*ImportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{78} + return fileDescriptor_api_85cf05ed10668ebf, []int{78} } func (m *ImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4205,7 +4205,7 @@ func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} } func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) } func (*AdminScatterRequest) ProtoMessage() {} func (*AdminScatterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{79} + return fileDescriptor_api_85cf05ed10668ebf, []int{79} } func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4242,7 +4242,7 @@ func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} } func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse) ProtoMessage() {} func (*AdminScatterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{80} + return fileDescriptor_api_85cf05ed10668ebf, []int{80} } func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4275,7 +4275,7 @@ func (m *AdminScatterResponse_Range) Reset() { *m = AdminScatterResponse func (m *AdminScatterResponse_Range) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse_Range) ProtoMessage() {} func (*AdminScatterResponse_Range) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{80, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{80, 0} } func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4320,7 +4320,7 @@ func (m *AdminVerifyProtectedTimestampRequest) Reset() { *m = AdminVerif func (m *AdminVerifyProtectedTimestampRequest) String() string { return proto.CompactTextString(m) } func (*AdminVerifyProtectedTimestampRequest) ProtoMessage() {} func (*AdminVerifyProtectedTimestampRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{81} + return fileDescriptor_api_85cf05ed10668ebf, []int{81} } func (m *AdminVerifyProtectedTimestampRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4358,7 +4358,7 @@ func (m *AdminVerifyProtectedTimestampResponse) Reset() { *m = AdminVeri func (m *AdminVerifyProtectedTimestampResponse) String() string { return proto.CompactTextString(m) } func (*AdminVerifyProtectedTimestampResponse) ProtoMessage() {} func (*AdminVerifyProtectedTimestampResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{82} + return fileDescriptor_api_85cf05ed10668ebf, []int{82} } func (m *AdminVerifyProtectedTimestampResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4411,7 +4411,7 @@ func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} } func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) } func (*AddSSTableRequest) ProtoMessage() {} func (*AddSSTableRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{83} + return fileDescriptor_api_85cf05ed10668ebf, []int{83} } func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4445,7 +4445,7 @@ func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} } func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) } func (*AddSSTableResponse) ProtoMessage() {} func (*AddSSTableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{84} + return fileDescriptor_api_85cf05ed10668ebf, []int{84} } func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4489,7 +4489,7 @@ func (m *RefreshRequest) Reset() { *m = RefreshRequest{} } func (m *RefreshRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRequest) ProtoMessage() {} func (*RefreshRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{85} + return fileDescriptor_api_85cf05ed10668ebf, []int{85} } func (m *RefreshRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4523,7 +4523,7 @@ func (m *RefreshResponse) Reset() { *m = RefreshResponse{} } func (m *RefreshResponse) String() string { return proto.CompactTextString(m) } func (*RefreshResponse) ProtoMessage() {} func (*RefreshResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{86} + return fileDescriptor_api_85cf05ed10668ebf, []int{86} } func (m *RefreshResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4562,7 +4562,7 @@ func (m *RefreshRangeRequest) Reset() { *m = RefreshRangeRequest{} } func (m *RefreshRangeRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRangeRequest) ProtoMessage() {} func (*RefreshRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{87} + return fileDescriptor_api_85cf05ed10668ebf, []int{87} } func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4596,7 +4596,7 @@ func (m *RefreshRangeResponse) Reset() { *m = RefreshRangeResponse{} } func (m *RefreshRangeResponse) String() string { return proto.CompactTextString(m) } func (*RefreshRangeResponse) ProtoMessage() {} func (*RefreshRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{88} + return fileDescriptor_api_85cf05ed10668ebf, []int{88} } func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4645,7 +4645,7 @@ func (m *SubsumeRequest) Reset() { *m = SubsumeRequest{} } func (m *SubsumeRequest) String() string { return proto.CompactTextString(m) } func (*SubsumeRequest) ProtoMessage() {} func (*SubsumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{89} + return fileDescriptor_api_85cf05ed10668ebf, []int{89} } func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4694,7 +4694,7 @@ func (m *SubsumeResponse) Reset() { *m = SubsumeResponse{} } func (m *SubsumeResponse) String() string { return proto.CompactTextString(m) } func (*SubsumeResponse) ProtoMessage() {} func (*SubsumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{90} + return fileDescriptor_api_85cf05ed10668ebf, []int{90} } func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4729,7 +4729,7 @@ func (m *RangeStatsRequest) Reset() { *m = RangeStatsRequest{} } func (m *RangeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RangeStatsRequest) ProtoMessage() {} func (*RangeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{91} + return fileDescriptor_api_85cf05ed10668ebf, []int{91} } func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4771,7 +4771,7 @@ func (m *RangeStatsResponse) Reset() { *m = RangeStatsResponse{} } func (m *RangeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RangeStatsResponse) ProtoMessage() {} func (*RangeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{92} + return fileDescriptor_api_85cf05ed10668ebf, []int{92} } func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4854,7 +4854,7 @@ func (m *RequestUnion) Reset() { *m = RequestUnion{} } func (m *RequestUnion) String() string { return proto.CompactTextString(m) } func (*RequestUnion) ProtoMessage() {} func (*RequestUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{93} + return fileDescriptor_api_85cf05ed10668ebf, []int{93} } func (m *RequestUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6304,7 +6304,7 @@ func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } func (m *ResponseUnion) String() string { return proto.CompactTextString(m) } func (*ResponseUnion) ProtoMessage() {} func (*ResponseUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{94} + return fileDescriptor_api_85cf05ed10668ebf, []int{94} } func (m *ResponseUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7839,7 +7839,7 @@ func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{95} + return fileDescriptor_api_85cf05ed10668ebf, []int{95} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7877,7 +7877,7 @@ func (m *ClientRangeInfo) Reset() { *m = ClientRangeInfo{} } func (m *ClientRangeInfo) String() string { return proto.CompactTextString(m) } func (*ClientRangeInfo) ProtoMessage() {} func (*ClientRangeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{96} + return fileDescriptor_api_85cf05ed10668ebf, []int{96} } func (m *ClientRangeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7913,7 +7913,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} func (*BatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{97} + return fileDescriptor_api_85cf05ed10668ebf, []int{97} } func (m *BatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7950,7 +7950,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} func (*BatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{98} + return fileDescriptor_api_85cf05ed10668ebf, []int{98} } func (m *BatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8024,7 +8024,7 @@ func (m *BatchResponse_Header) Reset() { *m = BatchResponse_Header{} } func (m *BatchResponse_Header) String() string { return proto.CompactTextString(m) } func (*BatchResponse_Header) ProtoMessage() {} func (*BatchResponse_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{98, 0} + return fileDescriptor_api_85cf05ed10668ebf, []int{98, 0} } func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8062,7 +8062,7 @@ func (m *RangeLookupRequest) Reset() { *m = RangeLookupRequest{} } func (m *RangeLookupRequest) String() string { return proto.CompactTextString(m) } func (*RangeLookupRequest) ProtoMessage() {} func (*RangeLookupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{99} + return fileDescriptor_api_85cf05ed10668ebf, []int{99} } func (m *RangeLookupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8100,7 +8100,7 @@ func (m *RangeLookupResponse) Reset() { *m = RangeLookupResponse{} } func (m *RangeLookupResponse) String() string { return proto.CompactTextString(m) } func (*RangeLookupResponse) ProtoMessage() {} func (*RangeLookupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{100} + return fileDescriptor_api_85cf05ed10668ebf, []int{100} } func (m *RangeLookupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8139,7 +8139,7 @@ func (m *RangeFeedRequest) Reset() { *m = RangeFeedRequest{} } func (m *RangeFeedRequest) String() string { return proto.CompactTextString(m) } func (*RangeFeedRequest) ProtoMessage() {} func (*RangeFeedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{101} + return fileDescriptor_api_85cf05ed10668ebf, []int{101} } func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8180,7 +8180,7 @@ func (m *RangeFeedValue) Reset() { *m = RangeFeedValue{} } func (m *RangeFeedValue) String() string { return proto.CompactTextString(m) } func (*RangeFeedValue) ProtoMessage() {} func (*RangeFeedValue) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{102} + return fileDescriptor_api_85cf05ed10668ebf, []int{102} } func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8221,7 +8221,7 @@ func (m *RangeFeedCheckpoint) Reset() { *m = RangeFeedCheckpoint{} } func (m *RangeFeedCheckpoint) String() string { return proto.CompactTextString(m) } func (*RangeFeedCheckpoint) ProtoMessage() {} func (*RangeFeedCheckpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{103} + return fileDescriptor_api_85cf05ed10668ebf, []int{103} } func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8258,7 +8258,7 @@ func (m *RangeFeedError) Reset() { *m = RangeFeedError{} } func (m *RangeFeedError) String() string { return proto.CompactTextString(m) } func (*RangeFeedError) ProtoMessage() {} func (*RangeFeedError) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{104} + return fileDescriptor_api_85cf05ed10668ebf, []int{104} } func (m *RangeFeedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8295,7 +8295,7 @@ func (m *RangeFeedEvent) Reset() { *m = RangeFeedEvent{} } func (m *RangeFeedEvent) String() string { return proto.CompactTextString(m) } func (*RangeFeedEvent) ProtoMessage() {} func (*RangeFeedEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{105} + return fileDescriptor_api_85cf05ed10668ebf, []int{105} } func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8336,7 +8336,7 @@ func (m *GossipSubscriptionRequest) Reset() { *m = GossipSubscriptionReq func (m *GossipSubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*GossipSubscriptionRequest) ProtoMessage() {} func (*GossipSubscriptionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{106} + return fileDescriptor_api_85cf05ed10668ebf, []int{106} } func (m *GossipSubscriptionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8376,7 +8376,7 @@ func (m *GossipSubscriptionEvent) Reset() { *m = GossipSubscriptionEvent func (m *GossipSubscriptionEvent) String() string { return proto.CompactTextString(m) } func (*GossipSubscriptionEvent) ProtoMessage() {} func (*GossipSubscriptionEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_api_18cf6a70fea44207, []int{107} + return fileDescriptor_api_85cf05ed10668ebf, []int{107} } func (m *GossipSubscriptionEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8401,6 +8401,87 @@ func (m *GossipSubscriptionEvent) XXX_DiscardUnknown() { var xxx_messageInfo_GossipSubscriptionEvent proto.InternalMessageInfo +// JoinNodeRequest is used to specify to the server node what the client's +// MinimumSupportedVersion is. If it's not compatible with the rest of the +// cluster, the join attempt is refused. +type JoinNodeRequest struct { + // TODO(irfansharif): Actually make use of this min supported version. + MinSupportedVersion *Version `protobuf:"bytes,1,opt,name=min_supported_version,json=minSupportedVersion,proto3" json:"min_supported_version,omitempty"` +} + +func (m *JoinNodeRequest) Reset() { *m = JoinNodeRequest{} } +func (m *JoinNodeRequest) String() string { return proto.CompactTextString(m) } +func (*JoinNodeRequest) ProtoMessage() {} +func (*JoinNodeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_api_85cf05ed10668ebf, []int{108} +} +func (m *JoinNodeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JoinNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (dst *JoinNodeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_JoinNodeRequest.Merge(dst, src) +} +func (m *JoinNodeRequest) XXX_Size() int { + return m.Size() +} +func (m *JoinNodeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_JoinNodeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_JoinNodeRequest proto.InternalMessageInfo + +// JoinNodeResponse informs the joining node what the cluster id is and what +// node id was allocated to it. +// +// TODO(irfansharif): Think about the semantics for how store IDs get allocated. +// When letting a node join, we could return back at most (least?) one store ID, +// and entrust the node itself to allocate IDs for the remaining stores. +// +// TODO(irfansharif): We should use this RPC to tell us the right cluster +// version to use (instead of using the minimum possible version and relying on +// gossip to bump to for us). +type JoinNodeResponse struct { + ClusterID []byte `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + NodeID int32 `protobuf:"varint,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` +} + +func (m *JoinNodeResponse) Reset() { *m = JoinNodeResponse{} } +func (m *JoinNodeResponse) String() string { return proto.CompactTextString(m) } +func (*JoinNodeResponse) ProtoMessage() {} +func (*JoinNodeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_api_85cf05ed10668ebf, []int{109} +} +func (m *JoinNodeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JoinNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (dst *JoinNodeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_JoinNodeResponse.Merge(dst, src) +} +func (m *JoinNodeResponse) XXX_Size() int { + return m.Size() +} +func (m *JoinNodeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_JoinNodeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_JoinNodeResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*RequestHeader)(nil), "cockroach.roachpb.RequestHeader") proto.RegisterType((*ResponseHeader)(nil), "cockroach.roachpb.ResponseHeader") @@ -8526,6 +8607,8 @@ func init() { proto.RegisterType((*RangeFeedEvent)(nil), "cockroach.roachpb.RangeFeedEvent") proto.RegisterType((*GossipSubscriptionRequest)(nil), "cockroach.roachpb.GossipSubscriptionRequest") proto.RegisterType((*GossipSubscriptionEvent)(nil), "cockroach.roachpb.GossipSubscriptionEvent") + proto.RegisterType((*JoinNodeRequest)(nil), "cockroach.roachpb.JoinNodeRequest") + proto.RegisterType((*JoinNodeResponse)(nil), "cockroach.roachpb.JoinNodeResponse") proto.RegisterEnum("cockroach.roachpb.ReadConsistencyType", ReadConsistencyType_name, ReadConsistencyType_value) proto.RegisterEnum("cockroach.roachpb.ScanFormat", ScanFormat_name, ScanFormat_value) proto.RegisterEnum("cockroach.roachpb.ChecksumMode", ChecksumMode_name, ChecksumMode_value) @@ -10448,6 +10531,9 @@ type InternalClient interface { RangeLookup(ctx context.Context, in *RangeLookupRequest, opts ...grpc.CallOption) (*RangeLookupResponse, error) RangeFeed(ctx context.Context, in *RangeFeedRequest, opts ...grpc.CallOption) (Internal_RangeFeedClient, error) GossipSubscription(ctx context.Context, in *GossipSubscriptionRequest, opts ...grpc.CallOption) (Internal_GossipSubscriptionClient, error) + // Join a bootstrapped cluster. If the target node is itself not part of a + // bootstrapped cluster, an appropriate error is returned. + Join(ctx context.Context, in *JoinNodeRequest, opts ...grpc.CallOption) (*JoinNodeResponse, error) } type internalClient struct { @@ -10540,12 +10626,24 @@ func (x *internalGossipSubscriptionClient) Recv() (*GossipSubscriptionEvent, err return m, nil } +func (c *internalClient) Join(ctx context.Context, in *JoinNodeRequest, opts ...grpc.CallOption) (*JoinNodeResponse, error) { + out := new(JoinNodeResponse) + err := c.cc.Invoke(ctx, "/cockroach.roachpb.Internal/Join", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // InternalServer is the server API for Internal service. type InternalServer interface { Batch(context.Context, *BatchRequest) (*BatchResponse, error) RangeLookup(context.Context, *RangeLookupRequest) (*RangeLookupResponse, error) RangeFeed(*RangeFeedRequest, Internal_RangeFeedServer) error GossipSubscription(*GossipSubscriptionRequest, Internal_GossipSubscriptionServer) error + // Join a bootstrapped cluster. If the target node is itself not part of a + // bootstrapped cluster, an appropriate error is returned. + Join(context.Context, *JoinNodeRequest) (*JoinNodeResponse, error) } func RegisterInternalServer(s *grpc.Server, srv InternalServer) { @@ -10630,6 +10728,24 @@ func (x *internalGossipSubscriptionServer) Send(m *GossipSubscriptionEvent) erro return x.ServerStream.SendMsg(m) } +func _Internal_Join_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(JoinNodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InternalServer).Join(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cockroach.roachpb.Internal/Join", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InternalServer).Join(ctx, req.(*JoinNodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Internal_serviceDesc = grpc.ServiceDesc{ ServiceName: "cockroach.roachpb.Internal", HandlerType: (*InternalServer)(nil), @@ -10642,6 +10758,10 @@ var _Internal_serviceDesc = grpc.ServiceDesc{ MethodName: "RangeLookup", Handler: _Internal_RangeLookup_Handler, }, + { + MethodName: "Join", + Handler: _Internal_Join_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -17091,6 +17211,63 @@ func (m *GossipSubscriptionEvent) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *JoinNodeRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *JoinNodeRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MinSupportedVersion != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.MinSupportedVersion.Size())) + n274, err := m.MinSupportedVersion.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n274 + } + return i, nil +} + +func (m *JoinNodeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *JoinNodeResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ClusterID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.ClusterID))) + i += copy(dAtA[i:], m.ClusterID) + } + if m.NodeID != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.NodeID)) + } + return i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -20335,6 +20512,35 @@ func (m *GossipSubscriptionEvent) Size() (n int) { return n } +func (m *JoinNodeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MinSupportedVersion != nil { + l = m.MinSupportedVersion.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *JoinNodeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ClusterID) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.NodeID != 0 { + n += 1 + sovApi(uint64(m.NodeID)) + } + return n +} + func sovApi(x uint64) (n int) { for { n++ @@ -39130,6 +39336,189 @@ func (m *GossipSubscriptionEvent) Unmarshal(dAtA []byte) error { } return nil } +func (m *JoinNodeRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: JoinNodeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: JoinNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSupportedVersion", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MinSupportedVersion == nil { + m.MinSupportedVersion = &Version{} + } + if err := m.MinSupportedVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *JoinNodeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: JoinNodeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: JoinNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterID = append(m.ClusterID[:0], dAtA[iNdEx:postIndex]...) + if m.ClusterID == nil { + m.ClusterID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) + } + m.NodeID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NodeID |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -39235,498 +39624,504 @@ var ( ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_18cf6a70fea44207) } - -var fileDescriptor_api_18cf6a70fea44207 = []byte{ - // 7832 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5d, 0x6c, 0x23, 0xc9, - 0xb5, 0x9e, 0x9a, 0xa4, 0x24, 0xf2, 0x90, 0xa2, 0x5a, 0x25, 0xcd, 0x0c, 0x47, 0xb3, 0x2b, 0x69, - 0xb8, 0xf3, 0xb7, 0xe3, 0x5d, 0x69, 0x67, 0x66, 0x37, 0xbb, 0xde, 0x59, 0xaf, 0x2d, 0x51, 0x9c, - 0xa1, 0xa4, 0x91, 0x46, 0xd3, 0xa4, 0x66, 0xbc, 0x6b, 0x3b, 0xed, 0x56, 0x77, 0x89, 0x6a, 0x8b, - 0xec, 0xe6, 0x74, 0x37, 0xf5, 0x33, 0x40, 0x00, 0xe7, 0x0f, 0x0e, 0x9c, 0x60, 0x91, 0x87, 0x24, - 0x08, 0xe2, 0x38, 0xbb, 0x80, 0x03, 0x38, 0x80, 0xb1, 0x41, 0x90, 0xb7, 0x04, 0xce, 0xcf, 0x83, - 0x03, 0x6c, 0x0c, 0x07, 0x70, 0x02, 0x24, 0x36, 0x02, 0x44, 0x88, 0xc7, 0x40, 0x10, 0xe4, 0x21, - 0x40, 0xf2, 0x70, 0x2f, 0x30, 0xc0, 0xbd, 0xb8, 0xa8, 0x9f, 0xfe, 0x23, 0x9b, 0x14, 0xa5, 0xed, - 0xbd, 0x77, 0x01, 0xbf, 0x10, 0xec, 0xd3, 0x75, 0x4e, 0x57, 0x9d, 0x3a, 0x75, 0xea, 0x7c, 0xd5, - 0xa7, 0xaa, 0x61, 0xc2, 0x32, 0x15, 0x75, 0xb7, 0xb5, 0xbd, 0xa0, 0xb4, 0xf4, 0xf9, 0x96, 0x65, - 0x3a, 0x26, 0x9a, 0x50, 0x4d, 0x75, 0x8f, 0x92, 0xe7, 0xf9, 0xcd, 0xe9, 0x9b, 0x7b, 0xfb, 0x0b, - 0x7b, 0xfb, 0x36, 0xb6, 0xf6, 0xb1, 0xb5, 0xa0, 0x9a, 0x86, 0xda, 0xb6, 0x2c, 0x6c, 0xa8, 0x47, - 0x0b, 0x0d, 0x53, 0xdd, 0xa3, 0x3f, 0xba, 0x51, 0x67, 0xec, 0xd3, 0xc8, 0x95, 0xa8, 0x29, 0x8e, - 0xc2, 0x69, 0x53, 0x2e, 0x0d, 0x5b, 0x96, 0x69, 0xd9, 0x9c, 0x7a, 0xde, 0xa5, 0x36, 0xb1, 0xa3, - 0x04, 0x4a, 0x5f, 0xb2, 0x1d, 0xd3, 0x52, 0xea, 0x78, 0x01, 0x1b, 0x75, 0xdd, 0xc0, 0xa4, 0xc0, - 0xbe, 0xaa, 0xf2, 0x9b, 0x2f, 0x45, 0xde, 0xbc, 0xc3, 0xef, 0x16, 0xda, 0x8e, 0xde, 0x58, 0xd8, - 0x6d, 0xa8, 0x0b, 0x8e, 0xde, 0xc4, 0xb6, 0xa3, 0x34, 0x5b, 0xfc, 0xce, 0x1c, 0xbd, 0xe3, 0x58, - 0x8a, 0xaa, 0x1b, 0xf5, 0x05, 0x0b, 0xab, 0xa6, 0xa5, 0x61, 0x4d, 0xb6, 0x5b, 0x8a, 0xe1, 0x56, - 0xb2, 0x6e, 0xd6, 0x4d, 0xfa, 0x77, 0x81, 0xfc, 0x63, 0xd4, 0xe2, 0xcf, 0x05, 0x18, 0x93, 0xf0, - 0xd3, 0x36, 0xb6, 0x9d, 0x0a, 0x56, 0x34, 0x6c, 0xa1, 0x8b, 0x90, 0xdc, 0xc3, 0x47, 0x85, 0xe4, - 0x9c, 0x70, 0x23, 0xb7, 0x34, 0xfa, 0xe2, 0x78, 0x36, 0xb9, 0x86, 0x8f, 0x24, 0x42, 0x43, 0x73, - 0x30, 0x8a, 0x0d, 0x4d, 0x26, 0xb7, 0x53, 0xe1, 0xdb, 0x23, 0xd8, 0xd0, 0xd6, 0xf0, 0x11, 0xfa, - 0x36, 0xa4, 0x6d, 0x22, 0xcd, 0x50, 0x71, 0x61, 0x78, 0x4e, 0xb8, 0x31, 0xbc, 0xf4, 0x8d, 0x17, - 0xc7, 0xb3, 0xef, 0xd5, 0x75, 0x67, 0xb7, 0xbd, 0x3d, 0xaf, 0x9a, 0xcd, 0x05, 0x4f, 0xfb, 0xda, - 0xb6, 0xff, 0x7f, 0xa1, 0xb5, 0x57, 0x5f, 0xe8, 0x6c, 0xf9, 0x7c, 0xed, 0xd0, 0xa8, 0xe2, 0xa7, - 0x92, 0x27, 0xf1, 0xdd, 0xd4, 0xff, 0xfe, 0x64, 0x56, 0x58, 0x4d, 0xa5, 0x05, 0x31, 0xb1, 0x9a, - 0x4a, 0x27, 0xc4, 0x64, 0xf1, 0x27, 0x49, 0xc8, 0x4b, 0xd8, 0x6e, 0x99, 0x86, 0x8d, 0x79, 0xfd, - 0xdf, 0x80, 0xa4, 0x73, 0x68, 0xd0, 0xfa, 0x67, 0x6f, 0xcf, 0xcc, 0x77, 0xf5, 0xf6, 0x7c, 0xcd, - 0x52, 0x0c, 0x5b, 0x51, 0x1d, 0xdd, 0x34, 0x24, 0x52, 0x14, 0xbd, 0x03, 0x59, 0x0b, 0xdb, 0xed, - 0x26, 0xa6, 0xea, 0xa2, 0x4d, 0xcb, 0xde, 0xbe, 0x10, 0xc1, 0x59, 0x6d, 0x29, 0x86, 0x04, 0xac, - 0x2c, 0xf9, 0x8f, 0x2e, 0x42, 0xda, 0x68, 0x37, 0x89, 0x42, 0x6c, 0xda, 0xdc, 0xa4, 0x34, 0x6a, - 0xb4, 0x9b, 0x6b, 0xf8, 0xc8, 0x46, 0xdf, 0x84, 0xf3, 0x1a, 0x6e, 0x59, 0x58, 0x55, 0x1c, 0xac, - 0xc9, 0x96, 0x62, 0xd4, 0xb1, 0xac, 0x1b, 0x3b, 0xa6, 0x5d, 0x18, 0x99, 0x4b, 0xde, 0xc8, 0xde, - 0x7e, 0x29, 0x42, 0xbe, 0x44, 0x4a, 0xad, 0x18, 0x3b, 0xe6, 0x52, 0xea, 0xb3, 0xe3, 0xd9, 0x21, - 0x69, 0xca, 0x97, 0xe0, 0xdd, 0xb2, 0x51, 0x15, 0xc6, 0x78, 0x75, 0x2d, 0xac, 0xd8, 0xa6, 0x51, - 0x18, 0x9d, 0x13, 0x6e, 0xe4, 0x6f, 0xcf, 0x47, 0x09, 0x0c, 0xa9, 0x86, 0x5c, 0xb6, 0x9b, 0x58, - 0xa2, 0x5c, 0x52, 0xce, 0x0a, 0x5c, 0xa1, 0x4b, 0x90, 0x21, 0x2d, 0xd9, 0x3e, 0x72, 0xb0, 0x5d, - 0x48, 0xd3, 0xa6, 0x90, 0xa6, 0x2d, 0x91, 0xeb, 0xe2, 0xfb, 0x90, 0x0b, 0xb2, 0x22, 0x04, 0x79, - 0xa9, 0x5c, 0xdd, 0x5a, 0x2f, 0xcb, 0x5b, 0x1b, 0x6b, 0x1b, 0x0f, 0x9f, 0x6c, 0x88, 0x43, 0x68, - 0x0a, 0x44, 0x4e, 0x5b, 0x2b, 0x7f, 0x20, 0x3f, 0x58, 0x59, 0x5f, 0xa9, 0x89, 0xc2, 0x74, 0xea, - 0x6f, 0xfd, 0x64, 0x66, 0xa8, 0xf8, 0x18, 0xe0, 0x3e, 0x76, 0xb8, 0x99, 0xa1, 0x25, 0x18, 0xd9, - 0xa5, 0xf5, 0x29, 0x08, 0x54, 0xd3, 0x73, 0x91, 0x15, 0x0f, 0x98, 0xe4, 0x52, 0x9a, 0x68, 0xe3, - 0xd7, 0xc7, 0xb3, 0x82, 0xc4, 0x39, 0x99, 0x25, 0x14, 0xff, 0x9d, 0x00, 0x59, 0x2a, 0x98, 0xb5, - 0x12, 0x95, 0x3a, 0x24, 0x5f, 0x3e, 0x51, 0x25, 0xdd, 0xa2, 0xd1, 0x3c, 0x0c, 0xef, 0x2b, 0x8d, - 0x36, 0x2e, 0x24, 0xa8, 0x8c, 0x42, 0x84, 0x8c, 0xc7, 0xe4, 0xbe, 0xc4, 0x8a, 0xa1, 0xbb, 0x90, - 0xd3, 0x0d, 0x07, 0x1b, 0x8e, 0xcc, 0xd8, 0x92, 0x27, 0xb0, 0x65, 0x59, 0x69, 0x7a, 0x51, 0xfc, - 0xd7, 0x02, 0xc0, 0x66, 0x3b, 0x4e, 0xd5, 0xa0, 0x37, 0x07, 0xac, 0x3f, 0xb7, 0x31, 0xde, 0x8a, - 0xf3, 0x30, 0xa2, 0x1b, 0x0d, 0xdd, 0x60, 0xf5, 0x4f, 0x4b, 0xfc, 0x0a, 0x4d, 0xc1, 0xf0, 0x76, - 0x43, 0x37, 0x34, 0x3a, 0x2a, 0xd2, 0x12, 0xbb, 0xe0, 0xea, 0x97, 0x20, 0x4b, 0xeb, 0x1e, 0xa3, - 0xf6, 0x8b, 0xbf, 0x4a, 0xc0, 0xb9, 0x92, 0x69, 0x68, 0x3a, 0x19, 0x9e, 0x4a, 0xe3, 0x4b, 0xa1, - 0x9b, 0x55, 0x08, 0x0c, 0x44, 0x19, 0x1f, 0xb6, 0x06, 0xec, 0x69, 0xe4, 0x73, 0x95, 0x0f, 0x5b, - 0x94, 0x16, 0xad, 0x4f, 0xf4, 0x26, 0x5c, 0x50, 0x1a, 0x0d, 0xf3, 0x40, 0xd6, 0x77, 0x64, 0xcd, - 0xc4, 0xb6, 0x6c, 0x98, 0x8e, 0x8c, 0x0f, 0x75, 0xdb, 0xa1, 0x6e, 0x25, 0x2d, 0x4d, 0xd2, 0xdb, - 0x2b, 0x3b, 0xcb, 0x26, 0xb6, 0x37, 0x4c, 0xa7, 0x4c, 0x6e, 0x91, 0x31, 0x4b, 0x2a, 0xc3, 0xc6, - 0xec, 0x08, 0x71, 0xc8, 0x52, 0x1a, 0x1f, 0xb6, 0xe8, 0x98, 0xe5, 0x5d, 0xf4, 0x1d, 0x38, 0xdf, - 0xa9, 0xcd, 0x38, 0x7b, 0xeb, 0xbf, 0x08, 0x90, 0x5f, 0x31, 0x74, 0xe7, 0x4b, 0xd1, 0x4d, 0x9e, - 0x6a, 0x93, 0x41, 0xd5, 0xde, 0x04, 0x71, 0x47, 0xd1, 0x1b, 0x0f, 0x8d, 0x9a, 0xd9, 0xdc, 0xb6, - 0x1d, 0xd3, 0xc0, 0x36, 0xd7, 0x7d, 0x17, 0x9d, 0xeb, 0xec, 0x31, 0x8c, 0x7b, 0x6d, 0x8a, 0x53, - 0x59, 0xcf, 0x40, 0x5c, 0x31, 0x54, 0x0b, 0x37, 0xb1, 0x11, 0xab, 0xb6, 0x5e, 0x82, 0x8c, 0xee, - 0xca, 0xa5, 0x1a, 0x4b, 0x4a, 0x3e, 0x81, 0xb7, 0xa9, 0x0d, 0x13, 0x81, 0x67, 0xc7, 0xe9, 0x2e, - 0xc9, 0xc4, 0x81, 0x0f, 0x64, 0xbf, 0xbf, 0xc8, 0xc4, 0x81, 0x0f, 0x98, 0x7b, 0xfb, 0x00, 0xc6, - 0x96, 0x71, 0x03, 0x3b, 0x38, 0x7e, 0xdf, 0xbf, 0x05, 0x79, 0x57, 0x74, 0x9c, 0x9d, 0xf4, 0x63, - 0x01, 0x10, 0x97, 0x4b, 0x66, 0xdc, 0x38, 0xfb, 0x69, 0x96, 0x84, 0x19, 0x4e, 0xdb, 0x32, 0x58, - 0xbc, 0xc0, 0xac, 0x14, 0x18, 0x89, 0x86, 0x0c, 0xbe, 0x0f, 0x4e, 0x05, 0x7d, 0xb0, 0x17, 0xf6, - 0x90, 0x80, 0xe7, 0x00, 0x26, 0x43, 0xd5, 0x8b, 0xb7, 0x2b, 0x53, 0xb4, 0x66, 0x89, 0xb9, 0x64, - 0x30, 0xb6, 0xa3, 0xc4, 0xe2, 0x3f, 0x11, 0x60, 0xa2, 0xd4, 0xc0, 0x8a, 0x15, 0xbb, 0x5e, 0xbe, - 0x0e, 0x69, 0x0d, 0x2b, 0x1a, 0x6d, 0x38, 0x1b, 0xf0, 0x2f, 0x07, 0xa4, 0x90, 0xb8, 0x76, 0x7e, - 0xb7, 0xa1, 0xce, 0xd7, 0xdc, 0x88, 0x97, 0x8f, 0x7a, 0x8f, 0x89, 0x1b, 0xc4, 0x07, 0x80, 0x82, - 0xf5, 0x8b, 0xd3, 0x28, 0xfe, 0xa9, 0x00, 0x48, 0xc2, 0xfb, 0xd8, 0x72, 0x62, 0x6f, 0xfc, 0x32, - 0x64, 0x1d, 0xc5, 0xaa, 0x63, 0x47, 0x26, 0x11, 0xfd, 0x69, 0xda, 0x0f, 0x8c, 0x8f, 0x90, 0xb9, - 0x06, 0x3e, 0x84, 0xc9, 0x50, 0x2d, 0xe3, 0x54, 0xc1, 0x1f, 0x09, 0x90, 0xad, 0xaa, 0x8a, 0x11, - 0x67, 0xdb, 0xdf, 0x87, 0xac, 0xad, 0x2a, 0x86, 0xbc, 0x63, 0x5a, 0x4d, 0xc5, 0xa1, 0x46, 0x9f, - 0x0f, 0xb5, 0xdd, 0x8b, 0xbb, 0x55, 0xc5, 0xb8, 0x47, 0x0b, 0x49, 0x60, 0x7b, 0xff, 0xd1, 0x23, - 0xc8, 0xee, 0xe1, 0x23, 0x99, 0xe3, 0x33, 0x3a, 0x53, 0xe6, 0x6f, 0xbf, 0x11, 0xe0, 0xdf, 0xdb, - 0x9f, 0x77, 0x61, 0xdd, 0x7c, 0x00, 0xd6, 0xcd, 0x13, 0x8e, 0xf9, 0xaa, 0x63, 0x61, 0xa3, 0xee, - 0xec, 0x4a, 0xb0, 0x87, 0x8f, 0x1e, 0x30, 0x19, 0xc1, 0xa1, 0xb6, 0x9a, 0x4a, 0x27, 0xc5, 0x54, - 0xf1, 0x8f, 0x05, 0xc8, 0xb1, 0x86, 0xc7, 0x39, 0xd4, 0xde, 0x82, 0x94, 0x65, 0x1e, 0xb0, 0xa1, - 0x96, 0xbd, 0x7d, 0x29, 0x42, 0xc4, 0x1a, 0x3e, 0x0a, 0xce, 0x71, 0xb4, 0x38, 0x5a, 0x02, 0x1e, - 0x3d, 0xca, 0x94, 0x3b, 0x39, 0x28, 0x37, 0x30, 0x2e, 0x89, 0xc8, 0xb8, 0x0e, 0xe3, 0xdb, 0x8a, - 0xa3, 0xee, 0xca, 0x16, 0xaf, 0x24, 0x99, 0x0f, 0x93, 0x37, 0x72, 0x52, 0x9e, 0x92, 0xdd, 0xaa, - 0xdb, 0xc5, 0x3f, 0x71, 0xad, 0xde, 0xc6, 0x7f, 0x90, 0x3d, 0xff, 0xa7, 0x02, 0x1f, 0x4f, 0x6e, - 0xfb, 0xff, 0xd0, 0x0c, 0xe0, 0xe3, 0x04, 0x5c, 0x28, 0xed, 0x62, 0x75, 0xaf, 0x64, 0x1a, 0xb6, - 0x6e, 0x3b, 0x44, 0x83, 0x71, 0x5a, 0xc1, 0x25, 0xc8, 0x1c, 0xe8, 0xce, 0xae, 0xac, 0xe9, 0x3b, - 0x3b, 0xd4, 0xf3, 0xa5, 0xa5, 0x34, 0x21, 0x2c, 0xeb, 0x3b, 0x3b, 0xe8, 0x0e, 0xa4, 0x9a, 0xa6, - 0xc6, 0x82, 0xec, 0xfc, 0xed, 0xd9, 0x08, 0xf1, 0xb4, 0x6a, 0x76, 0xbb, 0xb9, 0x6e, 0x6a, 0x58, - 0xa2, 0x85, 0xd1, 0x0c, 0x80, 0x4a, 0xa8, 0x2d, 0x53, 0x37, 0x1c, 0x3e, 0x8b, 0x06, 0x28, 0xa8, - 0x02, 0x19, 0x07, 0x5b, 0x4d, 0xdd, 0x50, 0x1c, 0x5c, 0x18, 0xa6, 0xca, 0xbb, 0x12, 0x59, 0xf1, - 0x56, 0x43, 0x57, 0x95, 0x65, 0x6c, 0xab, 0x96, 0xde, 0x72, 0x4c, 0x8b, 0x6b, 0xd1, 0x67, 0xe6, - 0x1e, 0xf7, 0xa3, 0x14, 0x14, 0xba, 0x35, 0x14, 0xa7, 0x9d, 0x6c, 0xc2, 0x08, 0xc1, 0xe9, 0x0d, - 0x87, 0x5b, 0xca, 0xed, 0x5e, 0x8a, 0x88, 0xa8, 0x01, 0xc5, 0xfb, 0x0d, 0x87, 0x57, 0x9e, 0xcb, - 0x99, 0xfe, 0xb9, 0x00, 0x23, 0xec, 0x06, 0xba, 0x05, 0x69, 0xbe, 0x30, 0xa1, 0xd1, 0x3a, 0x26, - 0x97, 0xce, 0x3f, 0x3f, 0x9e, 0x1d, 0x65, 0x6b, 0x0d, 0xcb, 0x2f, 0xfc, 0xbf, 0xd2, 0x28, 0x2d, - 0xb7, 0xa2, 0x91, 0x3e, 0xb3, 0x1d, 0xc5, 0x72, 0xe8, 0x22, 0x50, 0x82, 0x61, 0x0e, 0x4a, 0x58, - 0xc3, 0x47, 0x68, 0x15, 0x46, 0x6c, 0x47, 0x71, 0xda, 0x36, 0xef, 0xb5, 0x53, 0x55, 0xb6, 0x4a, - 0x39, 0x25, 0x2e, 0x81, 0x04, 0x43, 0x1a, 0x76, 0x14, 0xbd, 0x41, 0xbb, 0x31, 0x23, 0xf1, 0xab, - 0xe2, 0x8f, 0x04, 0x18, 0x61, 0x45, 0xd1, 0x05, 0x98, 0x94, 0x16, 0x37, 0xee, 0x97, 0xe5, 0x95, - 0x8d, 0xe5, 0x72, 0xad, 0x2c, 0xad, 0xaf, 0x6c, 0x2c, 0xd6, 0xca, 0xe2, 0x10, 0x3a, 0x0f, 0xc8, - 0xbd, 0x51, 0x7a, 0xb8, 0x51, 0x5d, 0xa9, 0xd6, 0xca, 0x1b, 0x35, 0x51, 0xa0, 0x6b, 0x14, 0x94, - 0x1e, 0xa0, 0x26, 0xd0, 0x15, 0x98, 0xeb, 0xa4, 0xca, 0xd5, 0xda, 0x62, 0xad, 0x2a, 0x97, 0xab, - 0xb5, 0x95, 0xf5, 0xc5, 0x5a, 0x79, 0x59, 0x4c, 0xf6, 0x29, 0x45, 0x1e, 0x22, 0x49, 0xe5, 0x52, - 0x4d, 0x4c, 0x15, 0x9f, 0xc1, 0x39, 0x09, 0xab, 0x66, 0xb3, 0xd5, 0x76, 0x30, 0xa9, 0xa5, 0x1d, - 0xe7, 0x78, 0xb9, 0x00, 0xa3, 0x9a, 0x75, 0x24, 0x5b, 0x6d, 0x83, 0x8f, 0x96, 0x11, 0xcd, 0x3a, - 0x92, 0xda, 0x06, 0x37, 0xc6, 0x7f, 0x21, 0xc0, 0xf9, 0xce, 0x87, 0xc7, 0x69, 0x8a, 0x8f, 0x20, - 0xab, 0x68, 0x1a, 0xd6, 0x64, 0x0d, 0x37, 0x1c, 0x85, 0x87, 0x2a, 0x37, 0x03, 0x92, 0xf8, 0x02, - 0xde, 0xbc, 0xb7, 0x80, 0xb7, 0xfe, 0xb8, 0x54, 0xa2, 0x15, 0x59, 0x26, 0x1c, 0xae, 0x2b, 0xa2, - 0x42, 0x28, 0xa5, 0xf8, 0x2f, 0x53, 0x30, 0x56, 0x36, 0xb4, 0xda, 0x61, 0xac, 0xb3, 0xcb, 0x79, - 0x18, 0x51, 0xcd, 0x66, 0x53, 0x77, 0x5c, 0x35, 0xb1, 0x2b, 0xf4, 0xd5, 0x40, 0xa0, 0x99, 0x1c, - 0x20, 0xd0, 0xf2, 0x43, 0x4c, 0xf4, 0x5d, 0xb8, 0x40, 0x3c, 0xa8, 0x65, 0x28, 0x0d, 0x99, 0x49, - 0x93, 0x1d, 0x4b, 0xaf, 0xd7, 0xb1, 0xc5, 0x97, 0x0b, 0x6f, 0x44, 0xd4, 0x73, 0x85, 0x73, 0x94, - 0x28, 0x43, 0x8d, 0x95, 0x97, 0xce, 0xe9, 0x51, 0x64, 0xf4, 0x1e, 0x00, 0x99, 0x9c, 0xe8, 0x12, - 0xa4, 0xcd, 0x7d, 0x53, 0xaf, 0x35, 0x48, 0xd7, 0x1d, 0x11, 0x06, 0x72, 0x6d, 0xa3, 0x05, 0x82, - 0x2d, 0x9e, 0xb6, 0x75, 0x0b, 0xcb, 0xb7, 0x5a, 0x2a, 0x5d, 0x0c, 0x48, 0x2f, 0xe5, 0x9f, 0x1f, - 0xcf, 0x82, 0xc4, 0xc8, 0xb7, 0x36, 0x4b, 0x04, 0x6b, 0xb0, 0xff, 0x2d, 0x15, 0x2d, 0xc1, 0x0c, - 0x99, 0x80, 0x79, 0x5b, 0x14, 0x47, 0xde, 0xd5, 0xeb, 0xbb, 0xd8, 0x92, 0xbd, 0x75, 0x65, 0xba, - 0x08, 0x98, 0x96, 0xa6, 0x55, 0xc5, 0x60, 0x15, 0x5d, 0x74, 0x2a, 0xb4, 0x88, 0xa7, 0x1e, 0xa2, - 0xe7, 0x96, 0xa9, 0xdb, 0xa6, 0x51, 0xc8, 0x30, 0x3d, 0xb3, 0x2b, 0xf4, 0x08, 0x44, 0xdd, 0x90, - 0x77, 0x1a, 0x7a, 0x7d, 0xd7, 0x91, 0x0f, 0x2c, 0xdd, 0xc1, 0x76, 0x61, 0x82, 0x36, 0x28, 0xca, - 0xee, 0xaa, 0x7c, 0x75, 0x57, 0x7b, 0x42, 0x4a, 0xf2, 0xa6, 0xe5, 0x75, 0xe3, 0x1e, 0xe5, 0xa7, - 0x44, 0xdb, 0x9b, 0x9d, 0x47, 0xc5, 0x74, 0xf1, 0x7f, 0x08, 0x90, 0x77, 0x8d, 0x26, 0x4e, 0xfb, - 0xbe, 0x01, 0xa2, 0x69, 0x60, 0xb9, 0xb5, 0xab, 0xd8, 0x98, 0x2b, 0x86, 0x4f, 0x21, 0x79, 0xd3, - 0xc0, 0x9b, 0x84, 0xcc, 0x34, 0x81, 0x36, 0x61, 0xc2, 0x76, 0x94, 0xba, 0x6e, 0xd4, 0x03, 0xfa, - 0x1a, 0x1e, 0x3c, 0x74, 0x17, 0x39, 0xb7, 0x47, 0x0f, 0xc5, 0x1d, 0xbf, 0x11, 0x60, 0x62, 0x51, - 0x6b, 0xea, 0x46, 0xb5, 0xd5, 0xd0, 0x63, 0x5d, 0x29, 0xb8, 0x02, 0x19, 0x9b, 0xc8, 0xf4, 0x9d, - 0xb7, 0x8f, 0xf2, 0xd2, 0xf4, 0x0e, 0xf1, 0xe2, 0x0f, 0x60, 0x1c, 0x1f, 0xb6, 0x74, 0x4b, 0x71, - 0x74, 0xd3, 0x60, 0xb0, 0x24, 0x35, 0x78, 0xdb, 0xf2, 0x3e, 0xaf, 0x0f, 0x4d, 0x78, 0xcb, 0x3e, - 0x00, 0x14, 0x6c, 0x58, 0x9c, 0xf8, 0x44, 0x86, 0x49, 0x2a, 0x7a, 0xcb, 0xb0, 0x63, 0xd6, 0x1a, - 0xf7, 0xae, 0xdf, 0x82, 0xa9, 0xf0, 0x03, 0xe2, 0xac, 0xfd, 0x77, 0x78, 0x8f, 0xaf, 0x63, 0xab, - 0xfe, 0x05, 0xac, 0x95, 0xb8, 0x7a, 0xe7, 0xe2, 0xe3, 0xac, 0xf9, 0x0f, 0x05, 0xb8, 0x48, 0x65, - 0xd3, 0xb7, 0x2a, 0x3b, 0xd8, 0x7a, 0x80, 0x15, 0x3b, 0x56, 0x84, 0xfc, 0x0a, 0x8c, 0x30, 0xa4, - 0x4b, 0x2d, 0x76, 0x78, 0x29, 0x4b, 0xe2, 0x92, 0xaa, 0x63, 0x5a, 0x24, 0x2e, 0xe1, 0xb7, 0x78, - 0x3b, 0x15, 0x98, 0x8e, 0xaa, 0x4b, 0xcc, 0x4b, 0x01, 0x13, 0x3c, 0x3c, 0x24, 0x26, 0x5e, 0xda, - 0x25, 0x71, 0x11, 0x2a, 0x43, 0x56, 0xa5, 0xff, 0x64, 0xe7, 0xa8, 0x85, 0xa9, 0xfc, 0x7c, 0xbf, - 0xc8, 0x92, 0xb1, 0xd5, 0x8e, 0x5a, 0x98, 0x84, 0xa7, 0xee, 0x7f, 0xa2, 0xae, 0x40, 0x53, 0xfb, - 0xc6, 0xa6, 0x74, 0x7c, 0xd1, 0xb2, 0x6e, 0x78, 0x17, 0xd2, 0xc4, 0xbf, 0x4a, 0x72, 0x55, 0xb0, - 0x27, 0x71, 0xa6, 0x58, 0xa3, 0x91, 0x0f, 0x43, 0x2f, 0xb8, 0x82, 0xcd, 0x4f, 0x9c, 0xa2, 0xf9, - 0x81, 0x95, 0x75, 0x9f, 0x8a, 0x3e, 0x80, 0xc0, 0xda, 0xb9, 0xcc, 0x5a, 0xe6, 0xa2, 0x9d, 0xd3, - 0x28, 0x65, 0xc2, 0x97, 0xc2, 0xe8, 0x36, 0x2a, 0x41, 0x1a, 0x1f, 0xb6, 0x64, 0x0d, 0xdb, 0x2a, - 0x77, 0x6b, 0xc5, 0x5e, 0x6f, 0xe2, 0xba, 0xe2, 0xff, 0x51, 0x7c, 0xd8, 0x22, 0x44, 0xb4, 0x45, - 0x66, 0x38, 0x37, 0x1c, 0xa0, 0xd5, 0xb6, 0x4f, 0x86, 0x13, 0xbe, 0xbd, 0x70, 0x71, 0xe3, 0x5e, - 0x24, 0xc0, 0x44, 0xf0, 0xbe, 0xfb, 0x44, 0x80, 0x4b, 0x91, 0x7d, 0x17, 0xe7, 0x64, 0xf7, 0x1e, - 0xa4, 0xa8, 0x0a, 0x12, 0xa7, 0x54, 0x01, 0xe5, 0x2a, 0xfe, 0xcc, 0x1d, 0xf5, 0x12, 0x6e, 0x98, - 0x44, 0xbd, 0x5f, 0xc0, 0xba, 0xd8, 0xa8, 0xdb, 0xed, 0x89, 0x53, 0x77, 0xbb, 0xcb, 0xda, 0xe1, - 0x16, 0x3a, 0x2a, 0x1b, 0xa7, 0x5b, 0xf8, 0x07, 0x02, 0x4c, 0x56, 0xb0, 0x62, 0x39, 0xdb, 0x58, - 0x71, 0x62, 0x0e, 0x67, 0xdf, 0x82, 0xa4, 0x61, 0x1e, 0x9c, 0x66, 0x69, 0x90, 0x94, 0xf7, 0xa7, - 0xad, 0x70, 0xbd, 0xe2, 0x6c, 0xf5, 0x7f, 0x4c, 0x40, 0xe6, 0x7e, 0x29, 0xce, 0xb6, 0xbe, 0xc7, - 0x97, 0xa0, 0xd9, 0x50, 0x8f, 0x32, 0x4b, 0xef, 0x79, 0xf3, 0xf7, 0x4b, 0x6b, 0xf8, 0xc8, 0x35, - 0x4b, 0xc2, 0x85, 0x16, 0x21, 0xe3, 0xec, 0x5a, 0xd8, 0xde, 0x35, 0x1b, 0xda, 0x69, 0x62, 0x16, - 0x9f, 0x6b, 0x7a, 0x0f, 0x86, 0xa9, 0x5c, 0x37, 0x0d, 0x42, 0x88, 0x48, 0x83, 0x20, 0x8f, 0xf1, - 0xc2, 0xbe, 0xc4, 0x69, 0x1e, 0xe3, 0x12, 0x58, 0xe7, 0x78, 0xb1, 0xd1, 0xb0, 0x38, 0x52, 0x7c, - 0x04, 0x40, 0x9a, 0x16, 0x67, 0xf7, 0xfc, 0x9d, 0x24, 0xe4, 0x37, 0xdb, 0xf6, 0x6e, 0xcc, 0xf6, - 0x58, 0x02, 0x68, 0xb5, 0x6d, 0x0a, 0x16, 0x0e, 0x0d, 0xde, 0xfe, 0x13, 0xf2, 0x2c, 0x5c, 0x05, - 0x30, 0xbe, 0xda, 0xa1, 0x81, 0x2a, 0x5c, 0x08, 0x96, 0xfd, 0x64, 0x8d, 0x57, 0xfa, 0x61, 0xc9, - 0xda, 0xa1, 0xb1, 0x8e, 0x3d, 0x10, 0xc9, 0x24, 0x61, 0x22, 0xe9, 0x3d, 0x18, 0x25, 0x17, 0xb2, - 0x63, 0x9e, 0xa6, 0xcb, 0x47, 0x08, 0x4f, 0xcd, 0x44, 0x77, 0x21, 0xc3, 0xb8, 0xc9, 0xc4, 0x35, - 0x42, 0x27, 0xae, 0xa8, 0xb6, 0x70, 0x35, 0xd2, 0x29, 0x2b, 0x4d, 0x59, 0xc9, 0x34, 0x35, 0x05, - 0xc3, 0x3b, 0xa6, 0xa5, 0x62, 0x9a, 0x81, 0x91, 0x96, 0xd8, 0x45, 0xb0, 0x57, 0x57, 0x53, 0xe9, - 0xb4, 0x98, 0x59, 0x4d, 0xa5, 0x33, 0x22, 0x14, 0x7f, 0x24, 0xc0, 0xb8, 0xd7, 0x1d, 0x71, 0xfa, - 0xf2, 0x52, 0x48, 0x97, 0xa7, 0xef, 0x10, 0xa2, 0xc6, 0xe2, 0x7f, 0xa2, 0x81, 0x8d, 0x6a, 0xee, - 0xd3, 0xfe, 0x89, 0xd3, 0x5e, 0xee, 0xb2, 0x84, 0x9c, 0xc4, 0x69, 0xfb, 0x98, 0xe6, 0xe6, 0xdc, - 0x82, 0x29, 0xbd, 0x49, 0xbc, 0xbc, 0xee, 0x34, 0x8e, 0x38, 0x2a, 0x73, 0xb0, 0xfb, 0x8e, 0x77, - 0xd2, 0xbf, 0x57, 0x72, 0x6f, 0x71, 0xc7, 0xc7, 0xde, 0xd9, 0xf8, 0xed, 0x89, 0x53, 0xe1, 0x2b, - 0x30, 0x66, 0x31, 0xd1, 0x24, 0x3a, 0x39, 0xa5, 0xce, 0x73, 0x1e, 0x2b, 0x51, 0xfb, 0x4f, 0x13, - 0x30, 0xfe, 0xa8, 0x8d, 0xad, 0xa3, 0x2f, 0x93, 0xd2, 0xaf, 0xc1, 0xf8, 0x81, 0xa2, 0x3b, 0xf2, - 0x8e, 0x69, 0xc9, 0xed, 0x96, 0xa6, 0x38, 0x6e, 0x56, 0xc8, 0x18, 0x21, 0xdf, 0x33, 0xad, 0x2d, - 0x4a, 0x44, 0x18, 0xd0, 0x9e, 0x61, 0x1e, 0x18, 0x32, 0x21, 0x53, 0x34, 0x7c, 0x68, 0xf0, 0xc5, - 0xe4, 0xa5, 0xb7, 0xff, 0xfb, 0xf1, 0xec, 0x9d, 0x81, 0xf2, 0xbe, 0x68, 0xe6, 0x5a, 0xbb, 0xad, - 0x6b, 0xf3, 0x5b, 0x5b, 0x2b, 0xcb, 0x92, 0x48, 0x45, 0x3e, 0x61, 0x12, 0x6b, 0x87, 0x86, 0x3b, - 0x8b, 0xbf, 0x10, 0x40, 0xf4, 0x35, 0x15, 0x67, 0x77, 0x96, 0x21, 0xfb, 0xb4, 0x8d, 0x2d, 0xfd, - 0x0c, 0x9d, 0x09, 0x9c, 0x91, 0x38, 0xa2, 0x0f, 0x21, 0x17, 0xd2, 0x43, 0xf2, 0xf3, 0xe9, 0x21, - 0x7b, 0xe0, 0xab, 0xa0, 0xf8, 0x1f, 0x04, 0x40, 0xb4, 0xf1, 0x2b, 0x6c, 0x1d, 0xff, 0xcb, 0x62, - 0x29, 0x37, 0x40, 0xa4, 0x39, 0x8f, 0xb2, 0xbe, 0x23, 0x37, 0x75, 0xdb, 0xd6, 0x8d, 0x3a, 0x37, - 0x95, 0x3c, 0xa5, 0xaf, 0xec, 0xac, 0x33, 0x2a, 0xef, 0xc4, 0xbf, 0x02, 0x93, 0xa1, 0x66, 0xc4, - 0xd9, 0x8d, 0x97, 0x21, 0xb7, 0x63, 0xb6, 0x0d, 0x4d, 0x66, 0xef, 0x3a, 0xf8, 0xe2, 0x5f, 0x96, - 0xd2, 0xd8, 0xf3, 0x8a, 0xff, 0x2f, 0x01, 0x53, 0x12, 0xb6, 0xcd, 0xc6, 0x3e, 0x8e, 0x5f, 0x91, - 0x15, 0xe0, 0x6f, 0x59, 0xe4, 0x33, 0xe9, 0x33, 0xc3, 0x98, 0xd9, 0x94, 0x16, 0x5e, 0x47, 0xbf, - 0xd2, 0xdf, 0x16, 0xbb, 0x57, 0xce, 0xf9, 0xb2, 0x5c, 0x2a, 0xb4, 0x2c, 0x67, 0xc2, 0xb8, 0x5e, - 0x37, 0x4c, 0xe2, 0xb3, 0x6c, 0xfc, 0xd4, 0x68, 0x37, 0x5d, 0xcc, 0x32, 0xdf, 0xaf, 0x92, 0x2b, - 0x8c, 0xa5, 0x8a, 0x9f, 0x6e, 0xb4, 0x9b, 0x34, 0x72, 0x5e, 0x3a, 0x4f, 0xea, 0xfb, 0xfc, 0x78, - 0x36, 0x1f, 0xba, 0x67, 0x4b, 0x79, 0xdd, 0xbb, 0x26, 0xd2, 0x79, 0x97, 0x7f, 0x1b, 0xce, 0x75, - 0xa8, 0x3c, 0xce, 0x18, 0xe7, 0xdf, 0x27, 0xe1, 0x62, 0x58, 0x7c, 0xdc, 0x48, 0xe4, 0xcb, 0xde, - 0xad, 0x15, 0x18, 0x6b, 0xea, 0xc6, 0xd9, 0x16, 0x22, 0x73, 0x4d, 0xdd, 0xf0, 0xd7, 0x73, 0x23, - 0x0c, 0x64, 0xe4, 0xcf, 0xc1, 0x40, 0x14, 0x98, 0x8e, 0xea, 0xc1, 0x38, 0xad, 0xe4, 0x23, 0x01, - 0x72, 0x71, 0xaf, 0xad, 0x9d, 0x2d, 0x4b, 0x8d, 0xb7, 0xb9, 0x06, 0x63, 0x5f, 0xc0, 0x62, 0xdc, - 0x4f, 0x05, 0x40, 0x35, 0xab, 0x6d, 0x10, 0x90, 0xfb, 0xc0, 0xac, 0xc7, 0xd9, 0xd8, 0x29, 0x18, - 0xd6, 0x0d, 0x0d, 0x1f, 0xd2, 0xc6, 0xa6, 0x24, 0x76, 0x11, 0x7a, 0x81, 0x98, 0x1c, 0xe8, 0x05, - 0xa2, 0x9f, 0xaa, 0x12, 0xaa, 0x68, 0x9c, 0x5a, 0xf8, 0xe7, 0x09, 0x98, 0xe4, 0xcd, 0x89, 0x7d, - 0x31, 0xf2, 0x4d, 0x18, 0x6e, 0x10, 0x99, 0x7d, 0xfa, 0x9c, 0x3e, 0xd3, 0xed, 0x73, 0x5a, 0x18, - 0x7d, 0x0d, 0xa0, 0x65, 0xe1, 0x7d, 0x99, 0xb1, 0x26, 0x07, 0x62, 0xcd, 0x10, 0x0e, 0x4a, 0x40, - 0xdf, 0x84, 0x71, 0x32, 0xc2, 0x5b, 0x96, 0xd9, 0x32, 0x6d, 0x12, 0xa4, 0xd8, 0x83, 0x21, 0x9d, - 0x89, 0xe7, 0xc7, 0xb3, 0x63, 0xeb, 0xba, 0xb1, 0xc9, 0x19, 0x6b, 0x55, 0x89, 0xb8, 0x0a, 0xef, - 0xd2, 0x1d, 0x80, 0xff, 0x55, 0x80, 0xa9, 0x2f, 0x6c, 0xf9, 0xf6, 0x2f, 0x42, 0x63, 0xde, 0xcc, - 0x23, 0xd2, 0xcb, 0x15, 0x63, 0xc7, 0x8c, 0x7f, 0x51, 0xfd, 0x23, 0x01, 0x26, 0x02, 0xe2, 0xe3, - 0x8c, 0x64, 0xce, 0xa4, 0xb3, 0xe2, 0xb7, 0x48, 0x6c, 0x13, 0x34, 0xfb, 0x38, 0x07, 0xd5, 0xbf, - 0x49, 0xc0, 0xf9, 0x12, 0x7b, 0xb5, 0xec, 0xe6, 0x5d, 0xc4, 0x69, 0x25, 0x05, 0x18, 0xdd, 0xc7, - 0x96, 0xad, 0x9b, 0x6c, 0x86, 0x1d, 0x93, 0xdc, 0x4b, 0x34, 0x0d, 0x69, 0xdb, 0x50, 0x5a, 0xf6, - 0xae, 0xe9, 0xbe, 0x8d, 0xf3, 0xae, 0xbd, 0x1c, 0x91, 0xe1, 0xb3, 0xe7, 0x88, 0x8c, 0xf4, 0xcf, - 0x11, 0x19, 0xfd, 0xdc, 0x39, 0x22, 0xfc, 0xd5, 0xd7, 0x2f, 0x05, 0xb8, 0xd0, 0xa5, 0xbf, 0x38, - 0x6d, 0xe6, 0x7b, 0x90, 0x55, 0xb9, 0x60, 0xe2, 0x8d, 0xd9, 0xdb, 0xbd, 0x15, 0x52, 0xec, 0x8c, - 0x00, 0xe4, 0xf9, 0xf1, 0x2c, 0xb8, 0x55, 0x5d, 0x59, 0xe6, 0x2a, 0x22, 0xff, 0xb5, 0xe2, 0x7f, - 0xcb, 0xc1, 0x78, 0xf9, 0x90, 0xad, 0x5d, 0x57, 0x59, 0x3c, 0x80, 0xee, 0x41, 0xba, 0x65, 0x99, - 0xfb, 0xba, 0xdb, 0x8c, 0x7c, 0x28, 0x35, 0xc0, 0x6d, 0x46, 0x07, 0xd7, 0x26, 0xe7, 0x90, 0x3c, - 0x5e, 0x54, 0x83, 0xcc, 0x03, 0x53, 0x55, 0x1a, 0xf7, 0xf4, 0x86, 0x6b, 0xff, 0x6f, 0x9c, 0x2c, - 0x68, 0xde, 0xe3, 0xd9, 0x54, 0x9c, 0x5d, 0xb7, 0x2b, 0x3c, 0x22, 0x5a, 0x81, 0x74, 0xc5, 0x71, - 0x5a, 0xe4, 0x26, 0xf7, 0x26, 0xd7, 0x07, 0x10, 0x4a, 0x58, 0xdc, 0x6c, 0x53, 0x97, 0x1d, 0xd5, - 0x60, 0xe2, 0xbe, 0x69, 0xd6, 0x1b, 0xb8, 0xd4, 0x30, 0xdb, 0x5a, 0xc9, 0x34, 0x76, 0xf4, 0x3a, - 0xf7, 0xc7, 0xd7, 0x06, 0x90, 0x79, 0xbf, 0x54, 0x95, 0xba, 0x05, 0xa0, 0x45, 0x48, 0x57, 0xef, - 0x70, 0x61, 0x2c, 0x80, 0xbb, 0x3a, 0x80, 0xb0, 0xea, 0x1d, 0xc9, 0x63, 0x43, 0xab, 0x90, 0x5d, - 0x7c, 0xd6, 0xb6, 0x30, 0x97, 0x32, 0xd2, 0x33, 0x2f, 0xa1, 0x53, 0x0a, 0xe5, 0x92, 0x82, 0xcc, - 0xa8, 0x0a, 0xf9, 0x27, 0xa6, 0xb5, 0xd7, 0x30, 0x15, 0xb7, 0x85, 0xa3, 0x54, 0xdc, 0x57, 0x06, - 0x10, 0xe7, 0x32, 0x4a, 0x1d, 0x22, 0xd0, 0xb7, 0x61, 0x9c, 0x74, 0x46, 0x4d, 0xd9, 0x6e, 0xb8, - 0x95, 0x4c, 0x53, 0xa9, 0xaf, 0x0d, 0x20, 0xd5, 0xe3, 0x74, 0x5f, 0x9e, 0x74, 0x88, 0x9a, 0xfe, - 0x26, 0x8c, 0x85, 0x8c, 0x00, 0x21, 0x48, 0xb5, 0x48, 0x7f, 0x0b, 0x34, 0x7f, 0x88, 0xfe, 0x47, - 0xaf, 0xc3, 0xa8, 0x61, 0x6a, 0xd8, 0x1d, 0x21, 0x63, 0x4b, 0x53, 0xcf, 0x8f, 0x67, 0x47, 0x36, - 0x4c, 0x8d, 0x85, 0x2b, 0xfc, 0x9f, 0x34, 0x42, 0x0a, 0xb9, 0xc1, 0xca, 0xf4, 0x35, 0x48, 0x91, - 0xde, 0x27, 0x4e, 0x6a, 0x5b, 0xb1, 0xf1, 0x96, 0xa5, 0x73, 0x99, 0xee, 0x25, 0x2f, 0xf7, 0x5b, - 0x01, 0x12, 0xd5, 0x3b, 0x24, 0x50, 0xdf, 0x6e, 0xab, 0x7b, 0xd8, 0xe1, 0xa5, 0xf8, 0x15, 0x0d, - 0xe0, 0x2d, 0xbc, 0xa3, 0xb3, 0x18, 0x2a, 0x23, 0xf1, 0x2b, 0xf4, 0x32, 0x80, 0xa2, 0xaa, 0xd8, - 0xb6, 0x65, 0x77, 0xdf, 0x5d, 0x46, 0xca, 0x30, 0xca, 0x1a, 0x3e, 0x22, 0x6c, 0x36, 0x56, 0x2d, - 0xec, 0xb8, 0x89, 0x50, 0xec, 0x8a, 0xb0, 0x39, 0xb8, 0xd9, 0x92, 0x1d, 0x73, 0x0f, 0x1b, 0xd4, - 0x66, 0x32, 0xc4, 0xf9, 0x34, 0x5b, 0x35, 0x42, 0x20, 0x7e, 0x13, 0x1b, 0x9a, 0xef, 0xe4, 0x32, - 0x92, 0x77, 0x4d, 0x44, 0x5a, 0xb8, 0xae, 0xf3, 0xad, 0x63, 0x19, 0x89, 0x5f, 0x11, 0x8d, 0x29, - 0x6d, 0x67, 0x97, 0xf6, 0x4a, 0x46, 0xa2, 0xff, 0x79, 0xd3, 0xfe, 0x91, 0x00, 0xc9, 0xfb, 0xa5, - 0xea, 0xa9, 0xdb, 0xe6, 0x4a, 0x4c, 0xfa, 0x12, 0x69, 0xfe, 0xa1, 0xde, 0x68, 0xe8, 0x46, 0x9d, - 0x84, 0x34, 0xdf, 0xc3, 0xaa, 0xdb, 0xb2, 0x3c, 0x27, 0x6f, 0x32, 0x2a, 0x9a, 0x83, 0xac, 0x6a, - 0x61, 0x0d, 0x1b, 0x8e, 0xae, 0x34, 0x6c, 0xde, 0xc4, 0x20, 0x89, 0x57, 0xee, 0x07, 0x02, 0x0c, - 0x53, 0xe3, 0x45, 0x2f, 0x41, 0x46, 0x35, 0x0d, 0x47, 0xd1, 0x0d, 0xee, 0x85, 0x32, 0x92, 0x4f, - 0xe8, 0x59, 0xc9, 0xcb, 0x90, 0x53, 0x54, 0xd5, 0x6c, 0x1b, 0x8e, 0x6c, 0x28, 0x4d, 0xcc, 0x2b, - 0x9b, 0xe5, 0xb4, 0x0d, 0xa5, 0x89, 0xd1, 0x2c, 0xb8, 0x97, 0xde, 0xee, 0xc7, 0x8c, 0x04, 0x9c, - 0xb4, 0x86, 0x8f, 0x78, 0x4d, 0x7e, 0x29, 0x40, 0xda, 0x35, 0x7a, 0x52, 0x99, 0x3a, 0x36, 0xb0, - 0xa5, 0x38, 0xa6, 0x57, 0x19, 0x8f, 0xd0, 0x39, 0xe3, 0x65, 0xfc, 0x19, 0x6f, 0x0a, 0x86, 0x1d, - 0x62, 0xd7, 0xbc, 0x1e, 0xec, 0x82, 0xae, 0x35, 0x37, 0x94, 0x3a, 0x5b, 0x5e, 0xcb, 0x48, 0xec, - 0x82, 0x34, 0x89, 0xe7, 0xd0, 0x32, 0xed, 0xf0, 0x2b, 0x52, 0x5f, 0x96, 0xe3, 0xb9, 0x8d, 0xeb, - 0xba, 0x41, 0x0d, 0x20, 0x29, 0x01, 0x25, 0x2d, 0x11, 0x0a, 0xba, 0x04, 0x19, 0x56, 0x00, 0x1b, - 0x1a, 0xb5, 0x82, 0xa4, 0x94, 0xa6, 0x84, 0xb2, 0xbb, 0xbd, 0x6b, 0x7a, 0x0f, 0x32, 0xde, 0x18, - 0x23, 0x1d, 0xd9, 0xb6, 0x3d, 0xa5, 0xd2, 0xff, 0xe8, 0x0d, 0x98, 0x7a, 0xda, 0x56, 0x1a, 0xfa, - 0x0e, 0x5d, 0x39, 0x23, 0xc5, 0x98, 0xfe, 0x58, 0x7b, 0x90, 0x77, 0x8f, 0x4a, 0xa0, 0x6a, 0x74, - 0x87, 0x64, 0xd2, 0x1f, 0x92, 0xc1, 0x57, 0x21, 0xc5, 0x4f, 0x05, 0x98, 0x60, 0x69, 0x40, 0x2c, - 0x13, 0x35, 0xbe, 0x00, 0xe3, 0x5d, 0xc8, 0x68, 0x8a, 0xa3, 0xb0, 0x1d, 0x9e, 0x89, 0xbe, 0x3b, - 0x3c, 0xbd, 0xfd, 0x05, 0x8a, 0xa3, 0xd0, 0x5d, 0x9e, 0x08, 0x52, 0xe4, 0x3f, 0xdb, 0x12, 0x2b, - 0xd1, 0xff, 0x7e, 0x62, 0x45, 0xb0, 0xba, 0x71, 0x06, 0x5c, 0x0b, 0x70, 0x8e, 0x68, 0xbf, 0x6c, - 0xa8, 0xd6, 0x51, 0xcb, 0xd1, 0x4d, 0xe3, 0x21, 0xfd, 0xb5, 0x91, 0x18, 0x78, 0x31, 0x45, 0xdf, - 0x47, 0xf1, 0xba, 0xfc, 0x62, 0x04, 0xc6, 0xca, 0x87, 0x2d, 0xd3, 0x8a, 0x75, 0x51, 0x6b, 0x09, - 0x46, 0x39, 0xe2, 0xef, 0xf3, 0xaa, 0xb8, 0xc3, 0x57, 0xbb, 0x6f, 0x61, 0x39, 0x23, 0x5a, 0x02, - 0x60, 0x39, 0xa3, 0x34, 0x97, 0x28, 0x79, 0x8a, 0x17, 0x66, 0x94, 0x8d, 0x50, 0xd1, 0x06, 0x64, - 0x9b, 0xfb, 0xaa, 0x2a, 0xef, 0xe8, 0x0d, 0x87, 0x27, 0xdd, 0x45, 0x67, 0x8c, 0xaf, 0x3f, 0x2e, - 0x95, 0xee, 0xd1, 0x42, 0x2c, 0xff, 0xcd, 0xbf, 0x96, 0x80, 0x48, 0x60, 0xff, 0xd1, 0x6b, 0xc0, - 0x77, 0xde, 0xc8, 0xb6, 0xbb, 0xc9, 0x6e, 0x69, 0xec, 0xf9, 0xf1, 0x6c, 0x46, 0xa2, 0xd4, 0x6a, - 0xb5, 0x26, 0x65, 0x58, 0x81, 0xaa, 0xed, 0xa0, 0x57, 0x60, 0xcc, 0x6c, 0xea, 0x8e, 0xec, 0xc6, - 0x40, 0x3c, 0x6c, 0xcc, 0x11, 0xa2, 0x1b, 0x23, 0xa1, 0x1a, 0x5c, 0xc7, 0x06, 0x1d, 0x05, 0xa4, - 0x9d, 0xf2, 0x36, 0x5b, 0x8b, 0x74, 0xd8, 0x78, 0x97, 0xcd, 0x96, 0xa3, 0x37, 0xf5, 0x67, 0xf4, - 0x65, 0x35, 0x7f, 0x5f, 0xf4, 0x0a, 0x2b, 0x4e, 0xda, 0xb7, 0x44, 0x17, 0x29, 0x79, 0xd9, 0x87, - 0x81, 0xa2, 0xe8, 0x07, 0x02, 0x9c, 0xe7, 0x8a, 0x94, 0xb7, 0x69, 0xca, 0xbb, 0xd2, 0xd0, 0x9d, - 0x23, 0x79, 0x6f, 0xbf, 0x90, 0xa6, 0xc1, 0xe9, 0x57, 0x23, 0x3b, 0x24, 0x60, 0x07, 0xf3, 0x6e, - 0xb7, 0x1c, 0x3d, 0xe0, 0xcc, 0x6b, 0xfb, 0x65, 0xc3, 0xb1, 0x8e, 0x96, 0x2e, 0x3c, 0x3f, 0x9e, - 0x9d, 0xec, 0xbe, 0xfb, 0x58, 0x9a, 0xb4, 0xbb, 0x59, 0x50, 0x05, 0x00, 0x7b, 0xd6, 0x48, 0x53, - 0xfe, 0xa2, 0xc3, 0x8b, 0x48, 0xb3, 0x95, 0x02, 0xbc, 0xe8, 0x06, 0x88, 0x7c, 0xd3, 0xcb, 0x8e, - 0xde, 0xc0, 0xb2, 0xad, 0x3f, 0xc3, 0x05, 0xa0, 0x3e, 0x28, 0xcf, 0xe8, 0x44, 0x44, 0x55, 0x7f, - 0x86, 0xa7, 0xbf, 0x07, 0x85, 0x5e, 0xb5, 0x0f, 0x0e, 0x84, 0x0c, 0x7b, 0x31, 0xfb, 0x4e, 0x78, - 0x45, 0x66, 0x00, 0x53, 0x75, 0x57, 0x65, 0x12, 0xef, 0xb8, 0x2e, 0xe8, 0x67, 0x09, 0x18, 0x5b, - 0x6a, 0x37, 0xf6, 0x1e, 0xb6, 0xaa, 0xed, 0x66, 0x53, 0xb1, 0x8e, 0x88, 0xab, 0x64, 0xae, 0x83, - 0x54, 0x53, 0x60, 0xae, 0x92, 0xfa, 0x06, 0xfd, 0x19, 0x26, 0x93, 0x59, 0x70, 0x9b, 0x37, 0x4b, - 0xe9, 0xa7, 0x2d, 0x09, 0xec, 0xdd, 0x36, 0x0f, 0x6c, 0xf4, 0x0e, 0x14, 0x02, 0x05, 0xe9, 0xf2, - 0x89, 0x8c, 0x0d, 0xc7, 0xd2, 0x31, 0x5b, 0x0e, 0x4c, 0x4a, 0x81, 0x74, 0x9a, 0x15, 0x72, 0xbb, - 0xcc, 0xee, 0xa2, 0x1a, 0xe4, 0x48, 0xc1, 0x23, 0x99, 0x4e, 0x36, 0xee, 0xa2, 0xed, 0xad, 0x88, - 0xc6, 0x85, 0xea, 0x3d, 0x4f, 0xb5, 0x54, 0xa2, 0x3c, 0xf4, 0xaf, 0x94, 0xc5, 0x3e, 0x65, 0xfa, - 0x7d, 0x10, 0x3b, 0x0b, 0x04, 0x35, 0x9a, 0x62, 0x1a, 0x9d, 0x0a, 0x6a, 0x34, 0x19, 0xd0, 0xd6, - 0x6a, 0x2a, 0x9d, 0x12, 0x87, 0x8b, 0xbf, 0x4b, 0x42, 0xde, 0x35, 0xb6, 0x38, 0xd1, 0xcc, 0x12, - 0x0c, 0x13, 0xd3, 0x70, 0x93, 0x3f, 0xae, 0xf5, 0xb1, 0x71, 0x9e, 0x3e, 0x4e, 0x4c, 0xc6, 0xc5, - 0xc3, 0x94, 0x35, 0x0e, 0xb7, 0x33, 0xfd, 0x57, 0x13, 0x90, 0xa2, 0x00, 0xe2, 0x16, 0xa4, 0xe8, - 0xd4, 0x21, 0x0c, 0x32, 0x75, 0xd0, 0xa2, 0xde, 0x64, 0x97, 0x08, 0xc4, 0x9f, 0x24, 0x98, 0xdb, - 0x55, 0xde, 0xba, 0x75, 0x9b, 0xba, 0x9c, 0x9c, 0xc4, 0xaf, 0xd0, 0x12, 0xcd, 0x4a, 0x32, 0x2d, - 0x07, 0x6b, 0x3c, 0x70, 0x9f, 0x3b, 0xa9, 0x7f, 0xdd, 0x69, 0xca, 0xe5, 0x43, 0x17, 0x21, 0x49, - 0x7c, 0xd9, 0x28, 0xcb, 0x58, 0x78, 0x7e, 0x3c, 0x9b, 0x24, 0x5e, 0x8c, 0xd0, 0xd0, 0x02, 0x64, - 0xc3, 0x8e, 0x43, 0xb8, 0x91, 0x61, 0xee, 0x31, 0x30, 0xe8, 0xa1, 0xe1, 0x0d, 0x30, 0x06, 0x5a, - 0x79, 0x1f, 0x7f, 0x7f, 0x18, 0xc6, 0x56, 0x9a, 0x71, 0x4f, 0x2c, 0x8b, 0xe1, 0x1e, 0x8e, 0x42, - 0x3b, 0xa1, 0x87, 0x46, 0x74, 0x70, 0x68, 0x4e, 0x4f, 0x9e, 0x6e, 0x4e, 0x5f, 0x21, 0x21, 0x30, - 0x3f, 0xb7, 0x21, 0xd9, 0x03, 0xd8, 0x84, 0x9f, 0x4f, 0xa3, 0x18, 0x89, 0xf0, 0xf8, 0x1b, 0x2a, - 0x68, 0xd6, 0xc9, 0xfb, 0x34, 0xd2, 0x66, 0x56, 0x36, 0x32, 0xb8, 0x95, 0x8d, 0x62, 0x43, 0xa3, - 0x53, 0x5b, 0xd8, 0xaf, 0x8e, 0x9e, 0xdd, 0xaf, 0x4e, 0x3f, 0xe3, 0xc6, 0xfa, 0x2e, 0x24, 0x35, - 0xdd, 0xed, 0x9c, 0xc1, 0x27, 0x6c, 0xc2, 0x74, 0x82, 0xd5, 0xa6, 0x82, 0x56, 0x1b, 0x5c, 0xe0, - 0x98, 0x7e, 0x08, 0xe0, 0x6b, 0x08, 0xcd, 0xc1, 0x88, 0xd9, 0xd0, 0xdc, 0x7d, 0x25, 0x63, 0x4b, - 0x99, 0xe7, 0xc7, 0xb3, 0xc3, 0x0f, 0x1b, 0xda, 0xca, 0xb2, 0x34, 0x6c, 0x36, 0xb4, 0x15, 0x8d, - 0x1e, 0x9d, 0x81, 0x0f, 0x64, 0x2f, 0x09, 0x2d, 0x27, 0x8d, 0x1a, 0xf8, 0x60, 0x19, 0xdb, 0x6a, - 0x47, 0x72, 0x0c, 0x31, 0xc1, 0x8f, 0x05, 0xc8, 0xbb, 0xbd, 0x11, 0xaf, 0x9b, 0x49, 0xeb, 0x4d, - 0x3e, 0xec, 0x92, 0xa7, 0x1b, 0x76, 0x2e, 0x1f, 0xdf, 0x97, 0xfb, 0x43, 0x81, 0x27, 0x20, 0x57, - 0x55, 0xc5, 0x21, 0xc1, 0x46, 0x8c, 0x43, 0xe5, 0x55, 0x10, 0x2d, 0xc5, 0xd0, 0xcc, 0xa6, 0xfe, - 0x0c, 0xb3, 0x15, 0x51, 0x9b, 0xbf, 0xdc, 0x1c, 0xf7, 0xe8, 0x74, 0xc9, 0xcf, 0x5d, 0xd0, 0xfd, - 0x45, 0x82, 0x27, 0x2b, 0x7b, 0x95, 0x89, 0x53, 0x69, 0xdf, 0x85, 0x89, 0xce, 0x93, 0x4d, 0xdc, - 0x51, 0xfc, 0x7a, 0x84, 0xbc, 0xa8, 0x8a, 0xb0, 0xe4, 0x42, 0x37, 0x1b, 0xbe, 0xe3, 0x94, 0x13, - 0x1b, 0x95, 0x20, 0x1b, 0x3c, 0x30, 0x25, 0x39, 0xf0, 0x81, 0x29, 0x60, 0x79, 0xc7, 0xa4, 0x4c, - 0x7f, 0x03, 0x86, 0xe9, 0xed, 0x33, 0xb8, 0x6e, 0xde, 0xa7, 0xff, 0x2b, 0x01, 0x57, 0x68, 0xed, - 0x1f, 0x63, 0x4b, 0xdf, 0x39, 0xda, 0xb4, 0x4c, 0x07, 0xab, 0x0e, 0xd6, 0xfc, 0x0d, 0x22, 0xb1, - 0xfa, 0xc3, 0x4c, 0xcb, 0x7d, 0xc0, 0xa9, 0x92, 0xca, 0x3c, 0x2e, 0xb4, 0x06, 0xe3, 0xec, 0xe0, - 0x1f, 0x59, 0x69, 0xe8, 0xfb, 0x58, 0x56, 0x9c, 0xd3, 0xcc, 0x7a, 0x63, 0x8c, 0x77, 0x91, 0xb0, - 0x2e, 0x3a, 0x48, 0x83, 0x0c, 0x17, 0xa6, 0x6b, 0xfc, 0xb4, 0x9f, 0xfb, 0x9f, 0x6f, 0x35, 0x31, - 0x2d, 0x51, 0x79, 0x2b, 0xcb, 0x52, 0x9a, 0x49, 0xf6, 0xde, 0x06, 0xfd, 0x46, 0x80, 0xab, 0x27, - 0x28, 0x3a, 0x4e, 0x03, 0x9e, 0x86, 0xf4, 0x3e, 0x79, 0x90, 0xce, 0x35, 0x9d, 0x96, 0xbc, 0x6b, - 0xb4, 0x0e, 0x63, 0x3b, 0x8a, 0xde, 0xf0, 0x0d, 0xbb, 0x77, 0x26, 0x62, 0x74, 0x82, 0x6c, 0x8e, - 0xb1, 0x33, 0x4b, 0x2e, 0x7e, 0x9c, 0x80, 0x89, 0x45, 0x4d, 0xab, 0x56, 0xb9, 0x6f, 0x8c, 0xcf, - 0x5e, 0x5c, 0x50, 0x9a, 0xf0, 0x41, 0x29, 0x7a, 0x1d, 0x90, 0xa6, 0xdb, 0xec, 0x24, 0x11, 0x7b, - 0x57, 0xd1, 0xcc, 0x03, 0x3f, 0x1f, 0x63, 0xc2, 0xbd, 0x53, 0x75, 0x6f, 0xa0, 0x2a, 0x50, 0x44, - 0x24, 0xdb, 0x8e, 0xe2, 0xbd, 0x52, 0xba, 0x3a, 0xd0, 0x7e, 0x2e, 0x06, 0x95, 0xbc, 0x4b, 0x29, - 0x43, 0xe4, 0xd0, 0xbf, 0x24, 0xb6, 0xd7, 0x49, 0xd3, 0x1d, 0x59, 0xb1, 0xdd, 0xcd, 0x3f, 0xec, - 0x0c, 0x93, 0x3c, 0xa3, 0x2f, 0xda, 0xc1, 0x3d, 0x3d, 0x6c, 0x6f, 0x82, 0xaf, 0xa0, 0x38, 0x21, - 0xf4, 0x3f, 0x13, 0x20, 0x2f, 0xe1, 0x1d, 0x0b, 0xdb, 0xb1, 0x2e, 0x25, 0xdc, 0x83, 0x9c, 0xc5, - 0xa4, 0xca, 0x3b, 0x96, 0xd9, 0x3c, 0xcd, 0x18, 0xcb, 0x72, 0xc6, 0x7b, 0x96, 0xd9, 0x0c, 0x1d, - 0xeb, 0xf0, 0x18, 0xc6, 0xbd, 0x9a, 0xc6, 0xa9, 0x82, 0x4f, 0xe9, 0x1e, 0x66, 0x26, 0x38, 0xee, - 0xc4, 0x88, 0x2f, 0x42, 0x0f, 0xf4, 0x1d, 0x56, 0xb0, 0xba, 0x71, 0x2a, 0xe3, 0xff, 0x08, 0x90, - 0xaf, 0xb6, 0xb7, 0xd9, 0x41, 0x56, 0xf1, 0xe9, 0xa1, 0x0c, 0x99, 0x06, 0xde, 0x71, 0xe4, 0x33, - 0xe5, 0xd3, 0xa7, 0x09, 0x2b, 0xdd, 0x53, 0x70, 0x1f, 0xc0, 0xa2, 0x3b, 0xe6, 0xa8, 0x9c, 0xe4, - 0x29, 0xe5, 0x64, 0x28, 0xaf, 0x1f, 0x3e, 0x15, 0x3f, 0x4d, 0xc0, 0xb8, 0xd7, 0xd8, 0x38, 0xbd, - 0xe7, 0x93, 0x90, 0xd7, 0x48, 0x9e, 0xc6, 0x6b, 0x4c, 0xf0, 0xbc, 0x90, 0x68, 0xcf, 0x31, 0x0f, - 0x93, 0x34, 0xb8, 0x91, 0x95, 0x56, 0xab, 0xa1, 0xbb, 0x20, 0x99, 0xfa, 0xa5, 0x94, 0x34, 0x41, - 0x6f, 0x2d, 0xb2, 0x3b, 0x14, 0x1e, 0x13, 0xfb, 0xdb, 0xb1, 0x30, 0x7e, 0x86, 0x65, 0x8a, 0xd7, - 0x4e, 0x93, 0xf7, 0x92, 0x65, 0x8c, 0x55, 0xc2, 0xc7, 0x2d, 0xef, 0x3b, 0x30, 0x41, 0x35, 0x1b, - 0xf7, 0xae, 0x5d, 0xde, 0x1d, 0x3f, 0x4e, 0x00, 0x0a, 0xca, 0xff, 0xe2, 0x7a, 0x24, 0x11, 0x5f, - 0x8f, 0xbc, 0x06, 0x88, 0xe5, 0x37, 0xda, 0x72, 0x0b, 0x5b, 0xb2, 0x8d, 0x55, 0x93, 0x1f, 0xaf, - 0x24, 0x48, 0x22, 0xbf, 0xb3, 0x89, 0xad, 0x2a, 0xa5, 0xa3, 0xbb, 0x00, 0x7e, 0xd4, 0xc6, 0xa7, - 0x93, 0xbe, 0x41, 0x9b, 0x94, 0xf1, 0xc2, 0xb5, 0xe2, 0x47, 0xd3, 0x90, 0xe3, 0x9a, 0xdc, 0x32, - 0x74, 0xd3, 0x40, 0xb7, 0x20, 0x59, 0xe7, 0xaf, 0x19, 0xb2, 0x91, 0x0b, 0x7d, 0xfe, 0x89, 0x72, - 0x95, 0x21, 0x89, 0x94, 0x25, 0x2c, 0xad, 0xb6, 0x13, 0x11, 0x3c, 0xf9, 0x59, 0xdc, 0x41, 0x96, - 0x56, 0xdb, 0x41, 0x55, 0x18, 0x57, 0xfd, 0xf3, 0xb1, 0x64, 0xc2, 0x9e, 0xec, 0x09, 0xc0, 0x22, - 0xcf, 0x25, 0xab, 0x0c, 0x49, 0x79, 0x35, 0x74, 0x03, 0x95, 0x82, 0x07, 0x32, 0xa5, 0xba, 0x12, - 0xc6, 0xfc, 0xed, 0xc1, 0xe1, 0xc3, 0xa0, 0x2a, 0x43, 0x81, 0x73, 0x9b, 0xd0, 0xbb, 0x30, 0xa2, - 0xd1, 0x83, 0x7e, 0xb8, 0x5d, 0x47, 0x99, 0x5e, 0xe8, 0x6c, 0xa5, 0xca, 0x90, 0xc4, 0x39, 0xd0, - 0x2a, 0xe4, 0xd8, 0x3f, 0x16, 0xc4, 0x70, 0x54, 0x7a, 0xb5, 0xb7, 0x84, 0xc0, 0xd4, 0x50, 0x19, - 0x92, 0xb2, 0x9a, 0x4f, 0x45, 0x6f, 0x42, 0xca, 0x56, 0x15, 0x17, 0x97, 0xce, 0xf4, 0x38, 0xa3, - 0xc3, 0x67, 0xa6, 0xa5, 0xd1, 0x5d, 0x76, 0x52, 0xa4, 0x73, 0xe8, 0x2e, 0x14, 0x46, 0x55, 0x3f, - 0xb4, 0xf3, 0x9b, 0x54, 0x1f, 0x53, 0x02, 0xba, 0x0f, 0x59, 0x85, 0x44, 0x83, 0x32, 0xdd, 0x69, - 0x49, 0x57, 0x06, 0xa3, 0xdf, 0xc1, 0x77, 0xed, 0x92, 0xad, 0xd0, 0xed, 0xe5, 0x2e, 0xd1, 0x17, - 0xd4, 0xc4, 0x56, 0x1d, 0x17, 0xb2, 0xfd, 0x05, 0x05, 0x13, 0xc4, 0x3c, 0x41, 0x94, 0x48, 0xa2, - 0xc2, 0x5d, 0x77, 0x17, 0x0d, 0x6d, 0x54, 0xae, 0xe7, 0xfb, 0xde, 0x88, 0x5d, 0x40, 0x95, 0x21, - 0x29, 0xb7, 0x1b, 0x20, 0xa3, 0x79, 0x48, 0xd4, 0xd5, 0xc2, 0x58, 0xcf, 0x11, 0xe2, 0xed, 0x71, - 0xa9, 0x0c, 0x49, 0x89, 0xba, 0x8a, 0xde, 0x87, 0x34, 0xdb, 0xa4, 0x70, 0x68, 0x14, 0xf2, 0x3d, - 0xfd, 0x44, 0x78, 0xab, 0x47, 0x65, 0x48, 0xa2, 0xfb, 0x22, 0xc8, 0xf3, 0x36, 0x21, 0x6f, 0xb1, - 0x0c, 0x3b, 0x37, 0x37, 0x56, 0xec, 0xf9, 0x0e, 0x3c, 0x2a, 0x3d, 0xb6, 0x42, 0xd1, 0x41, 0x80, - 0x8e, 0xbe, 0x0b, 0x53, 0x61, 0x89, 0xdc, 0xd2, 0x26, 0x7a, 0xbe, 0xcf, 0xed, 0x99, 0xa4, 0x59, - 0x19, 0x92, 0x90, 0xd5, 0x75, 0x13, 0xbd, 0x0d, 0xc3, 0xac, 0xd7, 0x10, 0x15, 0x19, 0x95, 0xdc, - 0xd1, 0xd1, 0x61, 0xac, 0x3c, 0x31, 0x7e, 0x87, 0xa7, 0x96, 0xc9, 0x0d, 0xb3, 0x5e, 0x98, 0xec, - 0x69, 0xfc, 0xdd, 0xa9, 0x72, 0xc4, 0xf8, 0x1d, 0x9f, 0x4a, 0xfa, 0xdd, 0x62, 0x77, 0x78, 0x26, - 0xd2, 0x54, 0xcf, 0x7e, 0x8f, 0xc8, 0x38, 0xab, 0xd0, 0x64, 0x7f, 0x9f, 0x4c, 0xaa, 0x66, 0xb1, - 0x03, 0x65, 0x64, 0x3a, 0xa6, 0xce, 0xf5, 0xac, 0x5a, 0xf7, 0xb9, 0x3b, 0x15, 0x1a, 0x35, 0x79, - 0x54, 0xf4, 0x18, 0x44, 0x7e, 0xd4, 0x83, 0xff, 0x56, 0xe2, 0x3c, 0x95, 0xf7, 0x6a, 0xa4, 0xeb, - 0x8a, 0x4a, 0xdd, 0xa9, 0x0c, 0x49, 0xe3, 0x6a, 0xf8, 0x0e, 0xfa, 0x00, 0x26, 0xa8, 0x3c, 0x59, - 0xf5, 0xcf, 0xe8, 0x28, 0x14, 0xba, 0xce, 0x7a, 0xe8, 0x7d, 0x9c, 0x87, 0x2b, 0x59, 0x54, 0x3b, - 0x6e, 0x11, 0x33, 0xd6, 0x0d, 0xdd, 0xa1, 0x5e, 0x76, 0xba, 0xa7, 0x19, 0x87, 0xcf, 0x13, 0x24, - 0x66, 0xac, 0x33, 0x0a, 0x31, 0x63, 0x87, 0xa7, 0xa9, 0xf1, 0xee, 0x78, 0xa9, 0xa7, 0x19, 0x47, - 0xe5, 0xb3, 0x11, 0x33, 0x76, 0x82, 0x74, 0x62, 0xc6, 0xcc, 0x41, 0x74, 0xc8, 0x7d, 0xb9, 0xa7, - 0x19, 0xf7, 0xdc, 0xeb, 0x4c, 0xcc, 0x58, 0xe9, 0xba, 0x89, 0x96, 0x01, 0x58, 0x50, 0x43, 0x27, - 0xc5, 0x99, 0x9e, 0x93, 0x41, 0x67, 0xa2, 0x1a, 0x99, 0x0c, 0x1a, 0x2e, 0x8d, 0x38, 0x32, 0x0a, - 0xa5, 0x64, 0xfa, 0x8a, 0xb6, 0x30, 0xdb, 0xd3, 0x91, 0x75, 0xbd, 0x3c, 0x25, 0x8e, 0xec, 0xc0, - 0x23, 0x92, 0x59, 0x85, 0xad, 0x17, 0x17, 0xe6, 0x7a, 0xbb, 0xe5, 0xe0, 0xcb, 0x23, 0xea, 0x96, - 0x29, 0x01, 0x2d, 0x42, 0x86, 0xcc, 0xf9, 0x47, 0xd4, 0x0d, 0x5d, 0xee, 0x19, 0x9f, 0x76, 0xec, - 0x66, 0xa9, 0x0c, 0x49, 0xe9, 0xa7, 0x9c, 0x44, 0x1e, 0xcf, 0xd6, 0xcd, 0x0a, 0xc5, 0x9e, 0x8f, - 0x0f, 0xad, 0xba, 0x92, 0xc7, 0x33, 0x0e, 0xa4, 0xc2, 0x39, 0xd6, 0x57, 0x7c, 0xab, 0xb1, 0xc5, - 0xf7, 0xc5, 0x16, 0x5e, 0xa1, 0xa2, 0x7a, 0x2e, 0x3d, 0x45, 0xee, 0x80, 0xae, 0x0c, 0x49, 0x93, - 0x4a, 0xf7, 0x5d, 0x32, 0xe0, 0xf9, 0xd4, 0xc3, 0x16, 0xac, 0x0a, 0x57, 0x7a, 0x0e, 0xf8, 0x88, - 0xd5, 0x3e, 0x32, 0xe0, 0x95, 0x00, 0x99, 0x4d, 0x40, 0x9a, 0x6c, 0xdb, 0xec, 0x85, 0xfe, 0xd5, - 0x3e, 0x13, 0x50, 0xc7, 0x1a, 0x01, 0x9b, 0x80, 0xb4, 0x2a, 0xe3, 0x24, 0x82, 0xd4, 0x06, 0x56, - 0x2c, 0xee, 0x66, 0xaf, 0xf5, 0x14, 0xd4, 0x75, 0x44, 0x1f, 0x11, 0xa4, 0x7a, 0x44, 0x12, 0xf0, - 0x58, 0xee, 0x19, 0x31, 0x3c, 0x60, 0xbc, 0xde, 0x33, 0xe0, 0x89, 0x3c, 0xca, 0x86, 0x04, 0x3c, - 0x56, 0xe8, 0x06, 0xfa, 0x1a, 0x8c, 0x72, 0x40, 0x57, 0xb8, 0xd1, 0x27, 0x8c, 0x0d, 0x22, 0x71, - 0x32, 0xae, 0x39, 0x0f, 0xf3, 0xb2, 0x0c, 0x48, 0xb2, 0xe6, 0xbd, 0xda, 0xc7, 0xcb, 0x76, 0x61, - 0x59, 0xe6, 0x65, 0x7d, 0x32, 0xf1, 0xb2, 0xcc, 0x4e, 0xf9, 0x5c, 0x77, 0xb3, 0xa7, 0x97, 0xed, - 0xde, 0x51, 0x43, 0xbc, 0xec, 0x53, 0x9f, 0x4a, 0x5a, 0x66, 0x33, 0x10, 0x55, 0xf8, 0x4a, 0xcf, - 0x96, 0x85, 0x31, 0x25, 0x69, 0x19, 0xe7, 0x21, 0xdd, 0xc6, 0x42, 0x62, 0xa6, 0xe9, 0xd7, 0x7a, - 0xef, 0xea, 0xef, 0x84, 0x1e, 0x15, 0x77, 0x31, 0x93, 0x69, 0xd8, 0x73, 0x54, 0x16, 0xdf, 0xc3, - 0xcc, 0x35, 0xf5, 0x7a, 0x7f, 0x47, 0x15, 0xb5, 0x3d, 0xdb, 0x73, 0x54, 0xa1, 0x9b, 0xb4, 0xaa, - 0x6c, 0x63, 0x1a, 0x1d, 0xdf, 0xf3, 0x7d, 0x0e, 0x20, 0xe8, 0xd8, 0x24, 0x48, 0xab, 0xea, 0x11, - 0xfd, 0x21, 0xd4, 0x66, 0x27, 0x65, 0x14, 0x16, 0xfa, 0x0f, 0xa1, 0xf0, 0x89, 0x1d, 0xde, 0x10, - 0xe2, 0x64, 0x6f, 0xce, 0x74, 0x23, 0x8c, 0x37, 0xfa, 0xcf, 0x99, 0x9d, 0xa1, 0x05, 0x9b, 0x33, - 0x79, 0x4c, 0xf1, 0xd7, 0x04, 0x98, 0x63, 0x75, 0xa3, 0xeb, 0x7d, 0x47, 0xb2, 0xb7, 0x76, 0x1a, - 0xd8, 0x3e, 0x71, 0x8b, 0x3e, 0xe0, 0xed, 0x5e, 0xd5, 0x3d, 0x61, 0x2d, 0xb8, 0x32, 0x24, 0xbd, - 0xac, 0xf4, 0x2b, 0xb7, 0x34, 0xca, 0x5f, 0xa9, 0x7a, 0x7b, 0x43, 0xc7, 0x45, 0x71, 0x35, 0x95, - 0xbe, 0x20, 0x16, 0x56, 0x53, 0xe9, 0x8b, 0xe2, 0xf4, 0x6a, 0x2a, 0x7d, 0x49, 0x7c, 0xa9, 0xf8, - 0x7f, 0x2f, 0xc2, 0x98, 0x8b, 0xfc, 0x18, 0x22, 0xba, 0x1d, 0x44, 0x44, 0x33, 0xbd, 0x10, 0x11, - 0xc7, 0x8a, 0x1c, 0x12, 0xdd, 0x0e, 0x42, 0xa2, 0x99, 0x5e, 0x90, 0xc8, 0xe7, 0x21, 0x98, 0xa8, - 0xd6, 0x0b, 0x13, 0xbd, 0x3a, 0x00, 0x26, 0xf2, 0x44, 0x75, 0x82, 0xa2, 0xe5, 0x6e, 0x50, 0x74, - 0xa5, 0x3f, 0x28, 0xf2, 0x44, 0x05, 0x50, 0xd1, 0xdd, 0x0e, 0x54, 0x74, 0xb9, 0x0f, 0x2a, 0xf2, - 0xf8, 0x5d, 0x58, 0xb4, 0x16, 0x09, 0x8b, 0xae, 0x9d, 0x04, 0x8b, 0x3c, 0x39, 0x21, 0x5c, 0xf4, - 0x56, 0x08, 0x17, 0xcd, 0xf6, 0xc4, 0x45, 0x1e, 0x37, 0x03, 0x46, 0xef, 0x75, 0x02, 0xa3, 0xcb, - 0x7d, 0x80, 0x91, 0xdf, 0x02, 0x8e, 0x8c, 0x2a, 0x51, 0xc8, 0xe8, 0xea, 0x09, 0xc8, 0xc8, 0x93, - 0x12, 0x84, 0x46, 0x95, 0x28, 0x68, 0x74, 0xf5, 0x04, 0x68, 0xd4, 0x21, 0x89, 0x61, 0xa3, 0x8d, - 0x68, 0x6c, 0x74, 0xfd, 0x44, 0x6c, 0xe4, 0x49, 0x0b, 0x83, 0xa3, 0x85, 0x00, 0x38, 0x7a, 0xb9, - 0x07, 0x38, 0xf2, 0x58, 0x09, 0x3a, 0xfa, 0x7a, 0x17, 0x3a, 0x2a, 0xf6, 0x43, 0x47, 0x1e, 0xaf, - 0x07, 0x8f, 0x1e, 0xf5, 0x80, 0x47, 0x37, 0x4e, 0x86, 0x47, 0x9e, 0xb0, 0x0e, 0x7c, 0xa4, 0xf4, - 0xc5, 0x47, 0xaf, 0x0f, 0x88, 0x8f, 0x3c, 0xe9, 0x51, 0x00, 0xe9, 0x9d, 0x30, 0x40, 0x9a, 0xeb, - 0x0d, 0x90, 0x3c, 0x31, 0x1c, 0x21, 0xad, 0x45, 0x22, 0xa4, 0x6b, 0x27, 0x21, 0x24, 0x7f, 0x1c, - 0x04, 0x21, 0xd2, 0x46, 0x34, 0x44, 0xba, 0x7e, 0x22, 0x44, 0xf2, 0xbb, 0x3f, 0x84, 0x91, 0xd6, - 0x22, 0x31, 0xd2, 0xb5, 0x93, 0x30, 0x92, 0x5f, 0xb9, 0x20, 0x48, 0x7a, 0xd2, 0x13, 0x24, 0xdd, - 0x1c, 0x04, 0x24, 0x79, 0x42, 0xbb, 0x50, 0xd2, 0x87, 0xbd, 0x51, 0xd2, 0x57, 0x4e, 0x71, 0xe8, - 0x61, 0x24, 0x4c, 0xfa, 0x7a, 0x17, 0x4c, 0x2a, 0xf6, 0x83, 0x49, 0xbe, 0x3d, 0xbb, 0x38, 0x49, - 0xe9, 0x8b, 0x6a, 0x5e, 0x1f, 0x10, 0xd5, 0xf8, 0xc6, 0x17, 0x01, 0x6b, 0xca, 0x11, 0xb0, 0xe6, - 0x4a, 0x7f, 0x58, 0xe3, 0xbb, 0x73, 0x1f, 0xd7, 0x54, 0xa2, 0x70, 0xcd, 0xd5, 0x13, 0x70, 0x8d, - 0xef, 0x85, 0x02, 0xc0, 0xe6, 0x6e, 0x07, 0xb0, 0xb9, 0x7c, 0x62, 0xc6, 0x50, 0x00, 0xd9, 0x2c, - 0x75, 0x23, 0x9b, 0x57, 0xfa, 0x22, 0x1b, 0x4f, 0x82, 0x0f, 0x6d, 0xee, 0x76, 0x40, 0x9b, 0xcb, - 0x7d, 0xa0, 0x8d, 0x5f, 0x01, 0x8e, 0x6d, 0xb4, 0xfe, 0xd8, 0x66, 0x7e, 0x50, 0x6c, 0xe3, 0x09, - 0x8e, 0x04, 0x37, 0x1b, 0xd1, 0xe0, 0xe6, 0xfa, 0x80, 0x2f, 0xed, 0xbb, 0xd0, 0x4d, 0x25, 0x0a, - 0xdd, 0x5c, 0x3d, 0x01, 0xdd, 0x04, 0xe7, 0x10, 0x0f, 0xde, 0x54, 0xa2, 0xe0, 0xcd, 0xd5, 0x13, - 0xe0, 0x8d, 0x2f, 0x29, 0x80, 0x6f, 0x6a, 0xbd, 0xf0, 0xcd, 0xab, 0x03, 0xe0, 0x1b, 0x3f, 0x78, - 0xe9, 0x00, 0x38, 0xef, 0x77, 0x02, 0x9c, 0x62, 0x3f, 0x80, 0xe3, 0x8f, 0x48, 0x17, 0xe1, 0x6c, - 0x44, 0x23, 0x9c, 0xeb, 0x27, 0x22, 0x9c, 0xa0, 0x93, 0x0c, 0x40, 0x9c, 0xb5, 0x48, 0x88, 0x73, - 0xed, 0x24, 0x88, 0xe3, 0x3b, 0xc9, 0x20, 0xc6, 0x79, 0xbf, 0x13, 0xe3, 0x14, 0xfb, 0x61, 0x1c, - 0xbf, 0x71, 0x2e, 0xc8, 0xa9, 0x44, 0x81, 0x9c, 0xab, 0x27, 0x80, 0x1c, 0xbf, 0xf3, 0x02, 0x28, - 0x47, 0xe9, 0x8b, 0x72, 0x5e, 0x1f, 0x10, 0xe5, 0x74, 0x38, 0xae, 0x30, 0xcc, 0xa9, 0x44, 0xc1, - 0x9c, 0xab, 0x27, 0xc0, 0x9c, 0x40, 0x65, 0x7d, 0x9c, 0xb3, 0x11, 0x8d, 0x73, 0xae, 0x9f, 0x88, - 0x73, 0x3a, 0x46, 0x93, 0x0b, 0x74, 0xd6, 0x22, 0x81, 0xce, 0xb5, 0x93, 0x80, 0x4e, 0xc7, 0xc4, - 0xc7, 0x83, 0x83, 0xbf, 0x3e, 0x38, 0xd2, 0x79, 0xe7, 0xf4, 0x48, 0xc7, 0x7b, 0x66, 0x2c, 0x50, - 0x67, 0x35, 0x95, 0x7e, 0x49, 0x7c, 0xb9, 0xf8, 0xb7, 0x47, 0x61, 0xa4, 0xe2, 0xe5, 0xc2, 0xf8, - 0xb5, 0x14, 0xce, 0x72, 0xc0, 0x12, 0x5a, 0x26, 0x23, 0x96, 0xfa, 0xbd, 0x93, 0xcf, 0xd2, 0xeb, - 0x3e, 0xe7, 0x8d, 0xb3, 0x9e, 0x61, 0x7f, 0x33, 0x7a, 0x0b, 0xc6, 0xda, 0x36, 0xb6, 0xe4, 0x96, - 0xa5, 0x9b, 0x96, 0xee, 0xb0, 0xbd, 0x22, 0xc2, 0x92, 0xf8, 0xe2, 0x78, 0x36, 0xb7, 0x65, 0x63, - 0x6b, 0x93, 0xd3, 0xa5, 0x5c, 0x3b, 0x70, 0xe5, 0x7e, 0xb5, 0x6a, 0x78, 0xf0, 0xaf, 0x56, 0x3d, - 0x02, 0xd1, 0xc2, 0x8a, 0x16, 0x8a, 0x40, 0xd8, 0x01, 0x46, 0xd1, 0x36, 0x43, 0xb7, 0x61, 0xb9, - 0x25, 0xe9, 0x41, 0x46, 0xe3, 0x56, 0x98, 0x88, 0x6e, 0xc1, 0xb9, 0xa6, 0x72, 0x48, 0xf3, 0x29, - 0x65, 0x37, 0xa8, 0xa3, 0x39, 0x92, 0xec, 0x83, 0x50, 0xa8, 0xa9, 0x1c, 0xd2, 0x4f, 0x60, 0xb1, - 0x5b, 0xf4, 0x9b, 0x15, 0x57, 0x21, 0xaf, 0xe9, 0xb6, 0xa3, 0x1b, 0xaa, 0xc3, 0x8f, 0xae, 0x65, - 0x67, 0xc1, 0x8e, 0xb9, 0x54, 0x76, 0x3e, 0xed, 0x4d, 0x98, 0xe0, 0xe9, 0xf6, 0x81, 0x57, 0x84, - 0xc0, 0x73, 0xd8, 0xe8, 0x0d, 0xef, 0xad, 0x20, 0x2a, 0xc1, 0x78, 0x5d, 0x71, 0xf0, 0x81, 0x72, - 0x24, 0xbb, 0x7b, 0xb5, 0xb2, 0xf4, 0xe4, 0xc7, 0x4b, 0xcf, 0x8f, 0x67, 0xc7, 0xee, 0xb3, 0x5b, - 0x5d, 0x5b, 0xb6, 0xc6, 0xea, 0x81, 0x1b, 0x1a, 0xba, 0x0e, 0xe3, 0x8a, 0x7d, 0x64, 0xa8, 0x54, - 0x3d, 0xd8, 0xb0, 0xdb, 0x36, 0x85, 0x14, 0x69, 0x29, 0x4f, 0xc9, 0x25, 0x97, 0x8a, 0x2e, 0x43, - 0x8e, 0xe7, 0xa2, 0xb3, 0xef, 0xe8, 0x8c, 0xd3, 0xa6, 0xf2, 0x8f, 0x32, 0xd0, 0x4f, 0xe9, 0xa0, - 0xbb, 0x30, 0xcd, 0x0f, 0xab, 0x3f, 0x50, 0x2c, 0x4d, 0xa6, 0x5a, 0xf7, 0xed, 0x53, 0xa4, 0x62, - 0x2f, 0xb0, 0xc3, 0xe9, 0x49, 0x01, 0xa2, 0x6a, 0xff, 0x50, 0x85, 0x0d, 0x98, 0x50, 0x1b, 0xba, - 0x87, 0x00, 0x58, 0xcb, 0x27, 0x7a, 0xfa, 0xd9, 0x12, 0x2d, 0xeb, 0xbf, 0x22, 0x1d, 0x57, 0xc3, - 0x04, 0x54, 0x05, 0x7a, 0x30, 0x8c, 0xdc, 0x32, 0x1b, 0xba, 0x7a, 0x44, 0x83, 0xff, 0xf0, 0x41, - 0xdb, 0x7d, 0x8f, 0xbe, 0x7f, 0xa2, 0xe8, 0xce, 0x26, 0xe5, 0x94, 0xe0, 0xc0, 0xfb, 0xcf, 0x0e, - 0xd6, 0x5d, 0x4d, 0xa5, 0x73, 0xe2, 0xd8, 0x6a, 0x2a, 0x9d, 0x17, 0xc7, 0x8b, 0x7f, 0x5f, 0x80, - 0xf1, 0x8e, 0xba, 0xa0, 0x0a, 0x9c, 0xd3, 0xbc, 0xa1, 0x22, 0xf3, 0xad, 0x4c, 0xba, 0x69, 0xf0, - 0xb3, 0xc3, 0x27, 0x5f, 0x1c, 0xcf, 0x8e, 0xd3, 0xd2, 0xf7, 0xbd, 0x5b, 0xd2, 0x94, 0xcf, 0xe1, - 0x53, 0xd1, 0x3b, 0x90, 0x67, 0xe1, 0xa3, 0xf7, 0xb1, 0x38, 0x9a, 0x5f, 0xbe, 0x34, 0xf1, 0xe2, - 0x78, 0x76, 0x8c, 0xc6, 0x8c, 0xee, 0xa9, 0xc0, 0xd2, 0x58, 0x23, 0x78, 0x59, 0xfc, 0x7b, 0x02, - 0xe4, 0x42, 0x9b, 0x83, 0xee, 0x76, 0xbc, 0x41, 0xbf, 0x18, 0x8d, 0x3b, 0x7b, 0x25, 0xdd, 0xa5, - 0xb9, 0x9d, 0xbb, 0x19, 0x8c, 0xb3, 0xbd, 0x71, 0x0b, 0x5d, 0x85, 0x71, 0xd3, 0x36, 0x5c, 0xb6, - 0x77, 0x53, 0xff, 0xf0, 0x93, 0xd9, 0xa1, 0xe2, 0xa7, 0x29, 0x18, 0x0b, 0x6f, 0x02, 0x5a, 0xe9, - 0xa8, 0x57, 0xd4, 0xbc, 0x10, 0xe2, 0x98, 0xef, 0x73, 0x16, 0x62, 0xc6, 0x3f, 0xaa, 0x9f, 0x55, - 0x73, 0xae, 0x4f, 0x9e, 0x40, 0xb0, 0x9e, 0x3e, 0xe3, 0xf4, 0xdf, 0x48, 0x7a, 0xfe, 0x75, 0x1e, - 0x86, 0xe9, 0xe9, 0x3c, 0xbc, 0x6a, 0x51, 0xfb, 0xcb, 0xcb, 0xe4, 0xbe, 0xc4, 0x8a, 0x11, 0x7f, - 0x5c, 0x3b, 0xd3, 0x81, 0x77, 0xfe, 0x30, 0x38, 0xfd, 0x57, 0xf9, 0xf8, 0xb1, 0x87, 0xc3, 0xa7, - 0x3b, 0xf6, 0x90, 0xbd, 0xd1, 0x6f, 0x34, 0xd8, 0x5c, 0xc7, 0x3c, 0xd2, 0x48, 0xd7, 0x26, 0x6e, - 0x2a, 0x82, 0x7f, 0x2c, 0x71, 0x5e, 0xe2, 0x1f, 0x4b, 0x0c, 0x64, 0x81, 0xe6, 0x3d, 0x11, 0xcc, - 0x7d, 0x75, 0x24, 0xa4, 0x8e, 0x9e, 0x25, 0x21, 0x95, 0xa5, 0x32, 0x73, 0x7b, 0xf9, 0xcf, 0x02, - 0x4f, 0x07, 0x79, 0x60, 0x9a, 0x7b, 0x6d, 0x2f, 0x91, 0x74, 0x3a, 0x78, 0xe8, 0x60, 0xfa, 0xc5, - 0xf1, 0x6c, 0x4a, 0xf2, 0x4e, 0x1d, 0x8c, 0xf2, 0xf7, 0x89, 0xcf, 0xe7, 0xef, 0x2f, 0x43, 0xae, - 0x65, 0xe1, 0x1d, 0xec, 0xa8, 0xbb, 0xb2, 0xd1, 0x6e, 0xf2, 0x7d, 0x28, 0x59, 0x97, 0xb6, 0xd1, - 0x6e, 0xa2, 0x57, 0x41, 0xf4, 0x8a, 0x70, 0x64, 0xcd, 0xb7, 0xe1, 0x8f, 0xbb, 0x74, 0x8e, 0xc3, - 0x8b, 0xff, 0x5f, 0x80, 0xc9, 0x50, 0x9b, 0xf8, 0x48, 0x58, 0x85, 0xac, 0xef, 0x04, 0xec, 0x82, - 0x70, 0xca, 0x84, 0xca, 0x20, 0x33, 0x92, 0xe1, 0xbc, 0xfb, 0x58, 0x7a, 0x10, 0xbd, 0x2f, 0x36, - 0x71, 0x4a, 0xb1, 0xe7, 0x7c, 0x39, 0xcb, 0x81, 0x07, 0x78, 0x43, 0x23, 0x39, 0xd0, 0xd0, 0x28, - 0x7e, 0x2c, 0x80, 0x48, 0x1f, 0x70, 0x0f, 0x63, 0x2d, 0x16, 0x9f, 0xe4, 0xa6, 0x2b, 0x27, 0x06, - 0xdf, 0x69, 0x12, 0xfa, 0x90, 0x46, 0x32, 0xfc, 0x21, 0x8d, 0xe2, 0x27, 0x02, 0xe4, 0xbd, 0x1a, - 0xb2, 0x8f, 0xd0, 0xf5, 0x39, 0xdb, 0xf2, 0x6c, 0x9f, 0x5e, 0x73, 0x8f, 0xeb, 0x18, 0xe8, 0xbb, - 0x78, 0xc1, 0xe3, 0x3a, 0xd8, 0x67, 0xc2, 0xfe, 0xb1, 0x6b, 0x39, 0xa4, 0x8a, 0x25, 0xff, 0x28, - 0x86, 0x33, 0x6c, 0xba, 0x91, 0xe8, 0xb7, 0x3c, 0xcd, 0xc6, 0x3e, 0x3b, 0x27, 0x65, 0x20, 0x67, - 0x85, 0x78, 0x12, 0x14, 0xf0, 0x35, 0x38, 0xad, 0x56, 0xa5, 0x5f, 0xf9, 0x64, 0xff, 0xed, 0xe2, - 0xbd, 0x80, 0x02, 0x69, 0xe7, 0x13, 0x2d, 0x0d, 0xe4, 0x40, 0x5d, 0x2d, 0x31, 0x5b, 0xf9, 0x55, - 0xb0, 0x27, 0xca, 0xfb, 0x04, 0x7b, 0xdd, 0x81, 0xe4, 0xbe, 0xd2, 0xe8, 0x97, 0xfc, 0x15, 0xea, - 0x39, 0x89, 0x94, 0x46, 0xf7, 0x42, 0x27, 0x58, 0x24, 0x7a, 0xe3, 0x84, 0x6e, 0x95, 0x86, 0x4e, - 0xba, 0x78, 0x3b, 0x6c, 0xeb, 0x7d, 0x1f, 0x1f, 0x34, 0xfa, 0x77, 0x53, 0x9f, 0x7d, 0x32, 0x2b, - 0x14, 0xdf, 0x86, 0x8b, 0xf7, 0x4d, 0xdb, 0xd6, 0x5b, 0x04, 0x1b, 0xd2, 0x01, 0x44, 0x7c, 0xb7, - 0xe7, 0xc9, 0xd2, 0x2d, 0xba, 0x4a, 0x60, 0xb0, 0x11, 0x9f, 0x91, 0xbc, 0xeb, 0xe2, 0xbf, 0x15, - 0xe0, 0x42, 0x37, 0x27, 0x53, 0x48, 0xd4, 0xa6, 0xbe, 0x51, 0xd5, 0xf4, 0x4f, 0x74, 0x3b, 0xd9, - 0xb0, 0xdc, 0xe2, 0x24, 0x06, 0xe4, 0xcf, 0x94, 0x9b, 0x0a, 0x1d, 0xe9, 0x7c, 0xe3, 0x71, 0x9e, - 0x93, 0xd7, 0x19, 0xd5, 0x1f, 0xf4, 0xa9, 0x81, 0x06, 0xfd, 0xcd, 0x2a, 0x4c, 0x46, 0xf8, 0x57, - 0x94, 0x07, 0x08, 0x7c, 0x58, 0x84, 0x7f, 0x12, 0x75, 0x71, 0x59, 0xde, 0xda, 0x28, 0x3d, 0x5c, - 0x5f, 0x5f, 0xa9, 0xd5, 0xca, 0xcb, 0xa2, 0x80, 0x44, 0xc8, 0x85, 0x3e, 0x4b, 0x92, 0x60, 0x1f, - 0x49, 0xbd, 0xf9, 0x97, 0x00, 0xfc, 0xaf, 0x1d, 0x11, 0x59, 0x6b, 0xe5, 0x0f, 0xe4, 0xc7, 0x8b, - 0x0f, 0xb6, 0xca, 0x55, 0x71, 0x08, 0x21, 0xc8, 0x2f, 0x2d, 0xd6, 0x4a, 0x15, 0x59, 0x2a, 0x57, - 0x37, 0x1f, 0x6e, 0x54, 0xcb, 0xee, 0xc7, 0x55, 0x6f, 0x2e, 0x43, 0x2e, 0x78, 0xca, 0x09, 0x9a, - 0x84, 0xf1, 0x52, 0xa5, 0x5c, 0x5a, 0x93, 0x1f, 0xaf, 0x2c, 0xca, 0x8f, 0xb6, 0xca, 0x5b, 0x65, - 0x71, 0x88, 0x56, 0x8d, 0x12, 0xef, 0x6d, 0x3d, 0x78, 0x20, 0x0a, 0x68, 0x1c, 0xb2, 0xec, 0x9a, - 0x7e, 0xc2, 0x44, 0x4c, 0xdc, 0x5c, 0x87, 0x6c, 0xe0, 0x8c, 0x53, 0xf2, 0xb8, 0xcd, 0xad, 0x6a, - 0x45, 0xae, 0xad, 0xac, 0x97, 0xab, 0xb5, 0xc5, 0xf5, 0x4d, 0x26, 0x83, 0xd2, 0x16, 0x97, 0x1e, - 0x4a, 0x35, 0x51, 0xf0, 0xae, 0x6b, 0x0f, 0xb7, 0x4a, 0x15, 0xb7, 0x19, 0xc5, 0x54, 0x3a, 0x29, - 0x26, 0x6f, 0x7e, 0x5f, 0x80, 0x0b, 0x3d, 0xce, 0xfa, 0x40, 0x59, 0x18, 0xdd, 0x32, 0xe8, 0x21, - 0x8f, 0xe2, 0x10, 0x1a, 0x0b, 0x1c, 0xf7, 0x21, 0x0a, 0x28, 0xcd, 0x8e, 0x5a, 0x10, 0x13, 0x68, - 0x04, 0x12, 0xd5, 0x3b, 0x62, 0x92, 0xd4, 0x34, 0x70, 0x5a, 0x86, 0x98, 0x42, 0x19, 0xbe, 0xd9, - 0x5f, 0x1c, 0x46, 0x39, 0x7f, 0xb7, 0xbd, 0x38, 0x42, 0x44, 0x79, 0xfb, 0xd5, 0xc5, 0xd1, 0x9b, - 0x97, 0x21, 0xb0, 0xf7, 0x17, 0x01, 0x8c, 0x3c, 0x50, 0x1c, 0x6c, 0x3b, 0xe2, 0x10, 0x1a, 0x85, - 0xe4, 0x62, 0xa3, 0x21, 0x0a, 0xb7, 0xff, 0x66, 0x12, 0xd2, 0xee, 0x47, 0x3a, 0xd0, 0x03, 0x18, - 0x66, 0x4b, 0x89, 0xb3, 0xbd, 0x23, 0x35, 0x6a, 0xdb, 0xd3, 0x73, 0x27, 0x85, 0x72, 0xc5, 0x21, - 0xf4, 0x97, 0x21, 0x1b, 0x98, 0x0b, 0x51, 0xcf, 0xe5, 0x90, 0xd0, 0xfc, 0x3f, 0x7d, 0xed, 0xa4, - 0x62, 0x9e, 0xfc, 0x27, 0x90, 0xf1, 0xc6, 0x26, 0x7a, 0xa5, 0xdf, 0xc8, 0x75, 0x65, 0xf7, 0x1f, - 0xde, 0x64, 0xf0, 0x15, 0x87, 0xde, 0x10, 0x90, 0x05, 0xa8, 0x7b, 0x6c, 0xa2, 0xa8, 0x37, 0xcc, - 0x3d, 0x07, 0xff, 0xf4, 0xcd, 0x81, 0x4a, 0x7b, 0xcf, 0x5c, 0x7a, 0xf5, 0xb3, 0xdf, 0xcd, 0x0c, - 0x7d, 0xf6, 0x7c, 0x46, 0xf8, 0xf5, 0xf3, 0x19, 0xe1, 0xb7, 0xcf, 0x67, 0x84, 0xff, 0xf9, 0x7c, - 0x46, 0xf8, 0xbb, 0xbf, 0x9f, 0x19, 0xfa, 0xf5, 0xef, 0x67, 0x86, 0x7e, 0xfb, 0xfb, 0x99, 0xa1, - 0x0f, 0x47, 0xb9, 0x98, 0xed, 0x11, 0xfa, 0xd9, 0xea, 0x3b, 0x7f, 0x16, 0x00, 0x00, 0xff, 0xff, - 0x6a, 0x1d, 0x32, 0x29, 0xd9, 0x7b, 0x00, 0x00, +func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_85cf05ed10668ebf) } + +var fileDescriptor_api_85cf05ed10668ebf = []byte{ + // 7932 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5d, 0x6c, 0x1b, 0x59, + 0x96, 0x9e, 0x8a, 0xa4, 0x24, 0xf2, 0x90, 0xa2, 0xa8, 0x2b, 0xd9, 0xa6, 0xd5, 0xdd, 0x96, 0x4c, + 0xb7, 0x7f, 0xda, 0xd3, 0x2d, 0xb5, 0xed, 0xe9, 0x74, 0x6f, 0xbb, 0xb7, 0x67, 0x45, 0x8a, 0x36, + 0x29, 0x59, 0xb2, 0x5c, 0xa4, 0xdc, 0xd3, 0xbd, 0x33, 0xa9, 0x29, 0x57, 0x5d, 0x51, 0x35, 0x22, + 0xab, 0xe8, 0xaa, 0xa2, 0x7e, 0x0c, 0x04, 0xd8, 0xfc, 0x00, 0x1b, 0x6c, 0x82, 0x41, 0x1e, 0x92, + 0x20, 0xc8, 0x66, 0x33, 0x0d, 0x6c, 0x80, 0x0d, 0xb0, 0x98, 0x20, 0xc8, 0x5b, 0x82, 0xcd, 0xcf, + 0xc3, 0x06, 0x98, 0x2c, 0x36, 0xc0, 0x24, 0x40, 0xb2, 0x83, 0x00, 0x11, 0xb2, 0x1e, 0x20, 0x08, + 0xf2, 0x10, 0x20, 0x79, 0x48, 0x00, 0x03, 0x09, 0x82, 0xfb, 0x57, 0x3f, 0x64, 0x91, 0xa2, 0xdc, + 0xd5, 0x49, 0x03, 0xf3, 0x42, 0xb0, 0x4e, 0xdd, 0x73, 0xea, 0xde, 0x73, 0xcf, 0x3d, 0xf7, 0x7c, + 0xb7, 0xce, 0xbd, 0x05, 0x73, 0xb6, 0xa5, 0x6a, 0xfb, 0xdd, 0x67, 0xab, 0x6a, 0xd7, 0x58, 0xe9, + 0xda, 0x96, 0x6b, 0xa1, 0x39, 0xcd, 0xd2, 0x0e, 0x28, 0x79, 0x85, 0xdf, 0x5c, 0xbc, 0x7d, 0x70, + 0xb8, 0x7a, 0x70, 0xe8, 0x60, 0xfb, 0x10, 0xdb, 0xab, 0x9a, 0x65, 0x6a, 0x3d, 0xdb, 0xc6, 0xa6, + 0x76, 0xb2, 0xda, 0xb6, 0xb4, 0x03, 0xfa, 0x63, 0x98, 0x2d, 0xc6, 0xbe, 0x88, 0x84, 0x44, 0x5d, + 0x75, 0x55, 0x4e, 0x5b, 0x10, 0x34, 0x6c, 0xdb, 0x96, 0xed, 0x70, 0xea, 0x45, 0x41, 0xed, 0x60, + 0x57, 0x0d, 0x94, 0x7e, 0xc3, 0x71, 0x2d, 0x5b, 0x6d, 0xe1, 0x55, 0x6c, 0xb6, 0x0c, 0x13, 0x93, + 0x02, 0x87, 0x9a, 0xc6, 0x6f, 0xbe, 0x19, 0x79, 0xf3, 0x1e, 0xbf, 0x5b, 0xec, 0xb9, 0x46, 0x7b, + 0x75, 0xbf, 0xad, 0xad, 0xba, 0x46, 0x07, 0x3b, 0xae, 0xda, 0xe9, 0xf2, 0x3b, 0xcb, 0xf4, 0x8e, + 0x6b, 0xab, 0x9a, 0x61, 0xb6, 0x56, 0x6d, 0xac, 0x59, 0xb6, 0x8e, 0x75, 0xc5, 0xe9, 0xaa, 0xa6, + 0xa8, 0x64, 0xcb, 0x6a, 0x59, 0xf4, 0xef, 0x2a, 0xf9, 0xc7, 0xa8, 0xa5, 0x3f, 0x90, 0x60, 0x46, + 0xc6, 0xcf, 0x7b, 0xd8, 0x71, 0x6b, 0x58, 0xd5, 0xb1, 0x8d, 0x2e, 0x43, 0xf2, 0x00, 0x9f, 0x14, + 0x93, 0xcb, 0xd2, 0xad, 0x5c, 0x79, 0xfa, 0xd5, 0xe9, 0x52, 0x72, 0x13, 0x9f, 0xc8, 0x84, 0x86, + 0x96, 0x61, 0x1a, 0x9b, 0xba, 0x42, 0x6e, 0xa7, 0xc2, 0xb7, 0xa7, 0xb0, 0xa9, 0x6f, 0xe2, 0x13, + 0xf4, 0x3d, 0x48, 0x3b, 0x44, 0x9a, 0xa9, 0xe1, 0xe2, 0xe4, 0xb2, 0x74, 0x6b, 0xb2, 0xfc, 0x6b, + 0xaf, 0x4e, 0x97, 0x3e, 0x69, 0x19, 0xee, 0x7e, 0xef, 0xd9, 0x8a, 0x66, 0x75, 0x56, 0x3d, 0xed, + 0xeb, 0xcf, 0xfc, 0xff, 0xab, 0xdd, 0x83, 0xd6, 0x6a, 0x7f, 0xcb, 0x57, 0x9a, 0xc7, 0x66, 0x03, + 0x3f, 0x97, 0x3d, 0x89, 0x1f, 0xa7, 0xfe, 0xcb, 0x97, 0x4b, 0xd2, 0x46, 0x2a, 0x2d, 0x15, 0x12, + 0x1b, 0xa9, 0x74, 0xa2, 0x90, 0x2c, 0xfd, 0x6e, 0x12, 0xf2, 0x32, 0x76, 0xba, 0x96, 0xe9, 0x60, + 0x5e, 0xff, 0xf7, 0x21, 0xe9, 0x1e, 0x9b, 0xb4, 0xfe, 0xd9, 0xbb, 0x57, 0x56, 0x06, 0x7a, 0x7b, + 0xa5, 0x69, 0xab, 0xa6, 0xa3, 0x6a, 0xae, 0x61, 0x99, 0x32, 0x29, 0x8a, 0x3e, 0x82, 0xac, 0x8d, + 0x9d, 0x5e, 0x07, 0x53, 0x75, 0xd1, 0xa6, 0x65, 0xef, 0x5e, 0x8a, 0xe0, 0x6c, 0x74, 0x55, 0x53, + 0x06, 0x56, 0x96, 0xfc, 0x47, 0x97, 0x21, 0x6d, 0xf6, 0x3a, 0x44, 0x21, 0x0e, 0x6d, 0x6e, 0x52, + 0x9e, 0x36, 0x7b, 0x9d, 0x4d, 0x7c, 0xe2, 0xa0, 0xef, 0xc2, 0x45, 0x1d, 0x77, 0x6d, 0xac, 0xa9, + 0x2e, 0xd6, 0x15, 0x5b, 0x35, 0x5b, 0x58, 0x31, 0xcc, 0x3d, 0xcb, 0x29, 0x4e, 0x2d, 0x27, 0x6f, + 0x65, 0xef, 0xbe, 0x19, 0x21, 0x5f, 0x26, 0xa5, 0xea, 0xe6, 0x9e, 0x55, 0x4e, 0xfd, 0xf4, 0x74, + 0x69, 0x42, 0x5e, 0xf0, 0x25, 0x78, 0xb7, 0x1c, 0xd4, 0x80, 0x19, 0x5e, 0x5d, 0x1b, 0xab, 0x8e, + 0x65, 0x16, 0xa7, 0x97, 0xa5, 0x5b, 0xf9, 0xbb, 0x2b, 0x51, 0x02, 0x43, 0xaa, 0x21, 0x97, 0xbd, + 0x0e, 0x96, 0x29, 0x97, 0x9c, 0xb3, 0x03, 0x57, 0xe8, 0x0d, 0xc8, 0x90, 0x96, 0x3c, 0x3b, 0x71, + 0xb1, 0x53, 0x4c, 0xd3, 0xa6, 0x90, 0xa6, 0x95, 0xc9, 0x75, 0xe9, 0x53, 0xc8, 0x05, 0x59, 0x11, + 0x82, 0xbc, 0x5c, 0x6d, 0xec, 0x6e, 0x55, 0x95, 0xdd, 0xed, 0xcd, 0xed, 0xc7, 0x9f, 0x6d, 0x17, + 0x26, 0xd0, 0x02, 0x14, 0x38, 0x6d, 0xb3, 0xfa, 0xb9, 0xf2, 0xa8, 0xbe, 0x55, 0x6f, 0x16, 0xa4, + 0xc5, 0xd4, 0x5f, 0xfe, 0xdd, 0x2b, 0x13, 0xa5, 0xa7, 0x00, 0x0f, 0xb1, 0xcb, 0xcd, 0x0c, 0x95, + 0x61, 0x6a, 0x9f, 0xd6, 0xa7, 0x28, 0x51, 0x4d, 0x2f, 0x47, 0x56, 0x3c, 0x60, 0x92, 0xe5, 0x34, + 0xd1, 0xc6, 0xcf, 0x4e, 0x97, 0x24, 0x99, 0x73, 0x32, 0x4b, 0x28, 0xfd, 0x73, 0x09, 0xb2, 0x54, + 0x30, 0x6b, 0x25, 0xaa, 0xf4, 0x49, 0xbe, 0x7a, 0xa6, 0x4a, 0x06, 0x45, 0xa3, 0x15, 0x98, 0x3c, + 0x54, 0xdb, 0x3d, 0x5c, 0x4c, 0x50, 0x19, 0xc5, 0x08, 0x19, 0x4f, 0xc9, 0x7d, 0x99, 0x15, 0x43, + 0xf7, 0x21, 0x67, 0x98, 0x2e, 0x36, 0x5d, 0x85, 0xb1, 0x25, 0xcf, 0x60, 0xcb, 0xb2, 0xd2, 0xf4, + 0xa2, 0xf4, 0x4f, 0x24, 0x80, 0x9d, 0x5e, 0x9c, 0xaa, 0x41, 0xdf, 0x1e, 0xb3, 0xfe, 0xdc, 0xc6, + 0x78, 0x2b, 0x2e, 0xc2, 0x94, 0x61, 0xb6, 0x0d, 0x93, 0xd5, 0x3f, 0x2d, 0xf3, 0x2b, 0xb4, 0x00, + 0x93, 0xcf, 0xda, 0x86, 0xa9, 0xd3, 0x51, 0x91, 0x96, 0xd9, 0x05, 0x57, 0xbf, 0x0c, 0x59, 0x5a, + 0xf7, 0x18, 0xb5, 0x5f, 0xfa, 0xe3, 0x04, 0x5c, 0xa8, 0x58, 0xa6, 0x6e, 0x90, 0xe1, 0xa9, 0xb6, + 0xbf, 0x11, 0xba, 0xd9, 0x80, 0xc0, 0x40, 0x54, 0xf0, 0x71, 0x77, 0xcc, 0x9e, 0x46, 0x3e, 0x57, + 0xf5, 0xb8, 0x4b, 0x69, 0xd1, 0xfa, 0x44, 0xdf, 0x86, 0x4b, 0x6a, 0xbb, 0x6d, 0x1d, 0x29, 0xc6, + 0x9e, 0xa2, 0x5b, 0xd8, 0x51, 0x4c, 0xcb, 0x55, 0xf0, 0xb1, 0xe1, 0xb8, 0xd4, 0xad, 0xa4, 0xe5, + 0x79, 0x7a, 0xbb, 0xbe, 0xb7, 0x6e, 0x61, 0x67, 0xdb, 0x72, 0xab, 0xe4, 0x16, 0x19, 0xb3, 0xa4, + 0x32, 0x6c, 0xcc, 0x4e, 0x11, 0x87, 0x2c, 0xa7, 0xf1, 0x71, 0x97, 0x8e, 0x59, 0xde, 0x45, 0xdf, + 0x87, 0x8b, 0xfd, 0xda, 0x8c, 0xb3, 0xb7, 0xfe, 0xad, 0x04, 0xf9, 0xba, 0x69, 0xb8, 0xdf, 0x88, + 0x6e, 0xf2, 0x54, 0x9b, 0x0c, 0xaa, 0xf6, 0x36, 0x14, 0xf6, 0x54, 0xa3, 0xfd, 0xd8, 0x6c, 0x5a, + 0x9d, 0x67, 0x8e, 0x6b, 0x99, 0xd8, 0xe1, 0xba, 0x1f, 0xa0, 0x73, 0x9d, 0x3d, 0x85, 0x59, 0xaf, + 0x4d, 0x71, 0x2a, 0xeb, 0x05, 0x14, 0xea, 0xa6, 0x66, 0xe3, 0x0e, 0x36, 0x63, 0xd5, 0xd6, 0x9b, + 0x90, 0x31, 0x84, 0x5c, 0xaa, 0xb1, 0xa4, 0xec, 0x13, 0x78, 0x9b, 0x7a, 0x30, 0x17, 0x78, 0x76, + 0x9c, 0xee, 0x92, 0x4c, 0x1c, 0xf8, 0x48, 0xf1, 0xfb, 0x8b, 0x4c, 0x1c, 0xf8, 0x88, 0xb9, 0xb7, + 0xcf, 0x61, 0x66, 0x1d, 0xb7, 0xb1, 0x8b, 0xe3, 0xf7, 0xfd, 0xbb, 0x90, 0x17, 0xa2, 0xe3, 0xec, + 0xa4, 0xdf, 0x91, 0x00, 0x71, 0xb9, 0x64, 0xc6, 0x8d, 0xb3, 0x9f, 0x96, 0x48, 0x98, 0xe1, 0xf6, + 0x6c, 0x93, 0xc5, 0x0b, 0xcc, 0x4a, 0x81, 0x91, 0x68, 0xc8, 0xe0, 0xfb, 0xe0, 0x54, 0xd0, 0x07, + 0x7b, 0x61, 0x0f, 0x09, 0x78, 0x8e, 0x60, 0x3e, 0x54, 0xbd, 0x78, 0xbb, 0x32, 0x45, 0x6b, 0x96, + 0x58, 0x4e, 0x06, 0x63, 0x3b, 0x4a, 0x2c, 0xfd, 0x5d, 0x09, 0xe6, 0x2a, 0x6d, 0xac, 0xda, 0xb1, + 0xeb, 0xe5, 0x3b, 0x90, 0xd6, 0xb1, 0xaa, 0xd3, 0x86, 0xb3, 0x01, 0xff, 0x56, 0x40, 0x0a, 0x89, + 0x6b, 0x57, 0xf6, 0xdb, 0xda, 0x4a, 0x53, 0x44, 0xbc, 0x7c, 0xd4, 0x7b, 0x4c, 0xdc, 0x20, 0x3e, + 0x07, 0x14, 0xac, 0x5f, 0x9c, 0x46, 0xf1, 0xf7, 0x24, 0x40, 0x32, 0x3e, 0xc4, 0xb6, 0x1b, 0x7b, + 0xe3, 0xd7, 0x21, 0xeb, 0xaa, 0x76, 0x0b, 0xbb, 0x0a, 0x89, 0xe8, 0xcf, 0xd3, 0x7e, 0x60, 0x7c, + 0x84, 0xcc, 0x35, 0xf0, 0x05, 0xcc, 0x87, 0x6a, 0x19, 0xa7, 0x0a, 0xfe, 0xa7, 0x04, 0xd9, 0x86, + 0xa6, 0x9a, 0x71, 0xb6, 0xfd, 0x53, 0xc8, 0x3a, 0x9a, 0x6a, 0x2a, 0x7b, 0x96, 0xdd, 0x51, 0x5d, + 0x6a, 0xf4, 0xf9, 0x50, 0xdb, 0xbd, 0xb8, 0x5b, 0x53, 0xcd, 0x07, 0xb4, 0x90, 0x0c, 0x8e, 0xf7, + 0x1f, 0x3d, 0x81, 0xec, 0x01, 0x3e, 0x51, 0x38, 0x3e, 0xa3, 0x33, 0x65, 0xfe, 0xee, 0xfb, 0x01, + 0xfe, 0x83, 0xc3, 0x15, 0x01, 0xeb, 0x56, 0x02, 0xb0, 0x6e, 0x85, 0x70, 0xac, 0x34, 0x5c, 0x1b, + 0x9b, 0x2d, 0x77, 0x5f, 0x86, 0x03, 0x7c, 0xf2, 0x88, 0xc9, 0x08, 0x0e, 0xb5, 0x8d, 0x54, 0x3a, + 0x59, 0x48, 0x95, 0xfe, 0x97, 0x04, 0x39, 0xd6, 0xf0, 0x38, 0x87, 0xda, 0x07, 0x90, 0xb2, 0xad, + 0x23, 0x36, 0xd4, 0xb2, 0x77, 0xdf, 0x88, 0x10, 0xb1, 0x89, 0x4f, 0x82, 0x73, 0x1c, 0x2d, 0x8e, + 0xca, 0xc0, 0xa3, 0x47, 0x85, 0x72, 0x27, 0xc7, 0xe5, 0x06, 0xc6, 0x25, 0x13, 0x19, 0x37, 0x61, + 0xf6, 0x99, 0xea, 0x6a, 0xfb, 0x8a, 0xcd, 0x2b, 0x49, 0xe6, 0xc3, 0xe4, 0xad, 0x9c, 0x9c, 0xa7, + 0x64, 0x51, 0x75, 0xa7, 0xf4, 0xbf, 0x85, 0xd5, 0x3b, 0xf8, 0x97, 0xb2, 0xe7, 0xff, 0x8f, 0xc4, + 0xc7, 0x93, 0x68, 0xff, 0x2f, 0x9b, 0x01, 0xfc, 0x38, 0x01, 0x97, 0x2a, 0xfb, 0x58, 0x3b, 0xa8, + 0x58, 0xa6, 0x63, 0x38, 0x2e, 0xd1, 0x60, 0x9c, 0x56, 0xf0, 0x06, 0x64, 0x8e, 0x0c, 0x77, 0x5f, + 0xd1, 0x8d, 0xbd, 0x3d, 0xea, 0xf9, 0xd2, 0x72, 0x9a, 0x10, 0xd6, 0x8d, 0xbd, 0x3d, 0x74, 0x0f, + 0x52, 0x1d, 0x4b, 0x67, 0x41, 0x76, 0xfe, 0xee, 0x52, 0x84, 0x78, 0x5a, 0x35, 0xa7, 0xd7, 0xd9, + 0xb2, 0x74, 0x2c, 0xd3, 0xc2, 0xe8, 0x0a, 0x80, 0x46, 0xa8, 0x5d, 0xcb, 0x30, 0x5d, 0x3e, 0x8b, + 0x06, 0x28, 0xa8, 0x06, 0x19, 0x17, 0xdb, 0x1d, 0xc3, 0x54, 0x5d, 0x5c, 0x9c, 0xa4, 0xca, 0x7b, + 0x3b, 0xb2, 0xe2, 0xdd, 0xb6, 0xa1, 0xa9, 0xeb, 0xd8, 0xd1, 0x6c, 0xa3, 0xeb, 0x5a, 0x36, 0xd7, + 0xa2, 0xcf, 0xcc, 0x3d, 0xee, 0x8f, 0x52, 0x50, 0x1c, 0xd4, 0x50, 0x9c, 0x76, 0xb2, 0x03, 0x53, + 0x04, 0xa7, 0xb7, 0x5d, 0x6e, 0x29, 0x77, 0x87, 0x29, 0x22, 0xa2, 0x06, 0x14, 0xef, 0xb7, 0x5d, + 0x5e, 0x79, 0x2e, 0x67, 0xf1, 0x0f, 0x24, 0x98, 0x62, 0x37, 0xd0, 0x1d, 0x48, 0xf3, 0x85, 0x09, + 0x9d, 0xd6, 0x31, 0x59, 0xbe, 0xf8, 0xf2, 0x74, 0x69, 0x9a, 0xad, 0x35, 0xac, 0xbf, 0xf2, 0xff, + 0xca, 0xd3, 0xb4, 0x5c, 0x5d, 0x27, 0x7d, 0xe6, 0xb8, 0xaa, 0xed, 0xd2, 0x45, 0xa0, 0x04, 0xc3, + 0x1c, 0x94, 0xb0, 0x89, 0x4f, 0xd0, 0x06, 0x4c, 0x39, 0xae, 0xea, 0xf6, 0x1c, 0xde, 0x6b, 0xe7, + 0xaa, 0x6c, 0x83, 0x72, 0xca, 0x5c, 0x02, 0x09, 0x86, 0x74, 0xec, 0xaa, 0x46, 0x9b, 0x76, 0x63, + 0x46, 0xe6, 0x57, 0xa5, 0xdf, 0x96, 0x60, 0x8a, 0x15, 0x45, 0x97, 0x60, 0x5e, 0x5e, 0xdb, 0x7e, + 0x58, 0x55, 0xea, 0xdb, 0xeb, 0xd5, 0x66, 0x55, 0xde, 0xaa, 0x6f, 0xaf, 0x35, 0xab, 0x85, 0x09, + 0x74, 0x11, 0x90, 0xb8, 0x51, 0x79, 0xbc, 0xdd, 0xa8, 0x37, 0x9a, 0xd5, 0xed, 0x66, 0x41, 0xa2, + 0x6b, 0x14, 0x94, 0x1e, 0xa0, 0x26, 0xd0, 0xdb, 0xb0, 0xdc, 0x4f, 0x55, 0x1a, 0xcd, 0xb5, 0x66, + 0x43, 0xa9, 0x36, 0x9a, 0xf5, 0xad, 0xb5, 0x66, 0x75, 0xbd, 0x90, 0x1c, 0x51, 0x8a, 0x3c, 0x44, + 0x96, 0xab, 0x95, 0x66, 0x21, 0x55, 0x7a, 0x01, 0x17, 0x64, 0xac, 0x59, 0x9d, 0x6e, 0xcf, 0xc5, + 0xa4, 0x96, 0x4e, 0x9c, 0xe3, 0xe5, 0x12, 0x4c, 0xeb, 0xf6, 0x89, 0x62, 0xf7, 0x4c, 0x3e, 0x5a, + 0xa6, 0x74, 0xfb, 0x44, 0xee, 0x99, 0xdc, 0x18, 0xff, 0xa1, 0x04, 0x17, 0xfb, 0x1f, 0x1e, 0xa7, + 0x29, 0x3e, 0x81, 0xac, 0xaa, 0xeb, 0x58, 0x57, 0x74, 0xdc, 0x76, 0x55, 0x1e, 0xaa, 0xdc, 0x0e, + 0x48, 0xe2, 0x0b, 0x78, 0x2b, 0xde, 0x02, 0xde, 0xd6, 0xd3, 0x4a, 0x85, 0x56, 0x64, 0x9d, 0x70, + 0x08, 0x57, 0x44, 0x85, 0x50, 0x4a, 0xe9, 0x1f, 0xa5, 0x60, 0xa6, 0x6a, 0xea, 0xcd, 0xe3, 0x58, + 0x67, 0x97, 0x8b, 0x30, 0xa5, 0x59, 0x9d, 0x8e, 0xe1, 0x0a, 0x35, 0xb1, 0x2b, 0xf4, 0x2b, 0x81, + 0x40, 0x33, 0x39, 0x46, 0xa0, 0xe5, 0x87, 0x98, 0xe8, 0x07, 0x70, 0x89, 0x78, 0x50, 0xdb, 0x54, + 0xdb, 0x0a, 0x93, 0xa6, 0xb8, 0xb6, 0xd1, 0x6a, 0x61, 0x9b, 0x2f, 0x17, 0xde, 0x8a, 0xa8, 0x67, + 0x9d, 0x73, 0x54, 0x28, 0x43, 0x93, 0x95, 0x97, 0x2f, 0x18, 0x51, 0x64, 0xf4, 0x09, 0x00, 0x99, + 0x9c, 0xe8, 0x12, 0xa4, 0xc3, 0x7d, 0xd3, 0xb0, 0x35, 0x48, 0xe1, 0x8e, 0x08, 0x03, 0xb9, 0x76, + 0xd0, 0x2a, 0xc1, 0x16, 0xcf, 0x7b, 0x86, 0x8d, 0x95, 0x3b, 0x5d, 0x8d, 0x2e, 0x06, 0xa4, 0xcb, + 0xf9, 0x97, 0xa7, 0x4b, 0x20, 0x33, 0xf2, 0x9d, 0x9d, 0x0a, 0xc1, 0x1a, 0xec, 0x7f, 0x57, 0x43, + 0x65, 0xb8, 0x42, 0x26, 0x60, 0xde, 0x16, 0xd5, 0x55, 0xf6, 0x8d, 0xd6, 0x3e, 0xb6, 0x15, 0x6f, + 0x5d, 0x99, 0x2e, 0x02, 0xa6, 0xe5, 0x45, 0x4d, 0x35, 0x59, 0x45, 0xd7, 0xdc, 0x1a, 0x2d, 0xe2, + 0xa9, 0x87, 0xe8, 0xb9, 0x6b, 0x19, 0x8e, 0x65, 0x16, 0x33, 0x4c, 0xcf, 0xec, 0x0a, 0x3d, 0x81, + 0x82, 0x61, 0x2a, 0x7b, 0x6d, 0xa3, 0xb5, 0xef, 0x2a, 0x47, 0xb6, 0xe1, 0x62, 0xa7, 0x38, 0x47, + 0x1b, 0x14, 0x65, 0x77, 0x0d, 0xbe, 0xba, 0xab, 0x7f, 0x46, 0x4a, 0xf2, 0xa6, 0xe5, 0x0d, 0xf3, + 0x01, 0xe5, 0xa7, 0x44, 0xc7, 0x9b, 0x9d, 0xa7, 0x0b, 0xe9, 0xd2, 0x7f, 0x94, 0x20, 0x2f, 0x8c, + 0x26, 0x4e, 0xfb, 0xbe, 0x05, 0x05, 0xcb, 0xc4, 0x4a, 0x77, 0x5f, 0x75, 0x30, 0x57, 0x0c, 0x9f, + 0x42, 0xf2, 0x96, 0x89, 0x77, 0x08, 0x99, 0x69, 0x02, 0xed, 0xc0, 0x9c, 0xe3, 0xaa, 0x2d, 0xc3, + 0x6c, 0x05, 0xf4, 0x35, 0x39, 0x7e, 0xe8, 0x5e, 0xe0, 0xdc, 0x1e, 0x3d, 0x14, 0x77, 0xfc, 0x89, + 0x04, 0x73, 0x6b, 0x7a, 0xc7, 0x30, 0x1b, 0xdd, 0xb6, 0x11, 0xeb, 0x4a, 0xc1, 0xdb, 0x90, 0x71, + 0x88, 0x4c, 0xdf, 0x79, 0xfb, 0x28, 0x2f, 0x4d, 0xef, 0x10, 0x2f, 0xfe, 0x08, 0x66, 0xf1, 0x71, + 0xd7, 0xb0, 0x55, 0xd7, 0xb0, 0x4c, 0x06, 0x4b, 0x52, 0xe3, 0xb7, 0x2d, 0xef, 0xf3, 0xfa, 0xd0, + 0x84, 0xb7, 0xec, 0x73, 0x40, 0xc1, 0x86, 0xc5, 0x89, 0x4f, 0x14, 0x98, 0xa7, 0xa2, 0x77, 0x4d, + 0x27, 0x66, 0xad, 0x71, 0xef, 0xfa, 0xeb, 0xb0, 0x10, 0x7e, 0x40, 0x9c, 0xb5, 0xff, 0x3e, 0xef, + 0xf1, 0x2d, 0x6c, 0xb7, 0xbe, 0x86, 0xb5, 0x12, 0xa1, 0x77, 0x2e, 0x3e, 0xce, 0x9a, 0xff, 0x96, + 0x04, 0x97, 0xa9, 0x6c, 0xfa, 0x56, 0x65, 0x0f, 0xdb, 0x8f, 0xb0, 0xea, 0xc4, 0x8a, 0x90, 0xaf, + 0xc1, 0x14, 0x43, 0xba, 0xd4, 0x62, 0x27, 0xcb, 0x59, 0x12, 0x97, 0x34, 0x5c, 0xcb, 0x26, 0x71, + 0x09, 0xbf, 0xc5, 0xdb, 0xa9, 0xc2, 0x62, 0x54, 0x5d, 0x62, 0x5e, 0x0a, 0x98, 0xe3, 0xe1, 0x21, + 0x31, 0xf1, 0xca, 0x3e, 0x89, 0x8b, 0x50, 0x15, 0xb2, 0x1a, 0xfd, 0xa7, 0xb8, 0x27, 0x5d, 0x4c, + 0xe5, 0xe7, 0x47, 0x45, 0x96, 0x8c, 0xad, 0x79, 0xd2, 0xc5, 0x24, 0x3c, 0x15, 0xff, 0x89, 0xba, + 0x02, 0x4d, 0x1d, 0x19, 0x9b, 0xd2, 0xf1, 0x45, 0xcb, 0x8a, 0xf0, 0x2e, 0xa4, 0x89, 0x7f, 0x9c, + 0xe4, 0xaa, 0x60, 0x4f, 0xe2, 0x4c, 0xb1, 0x46, 0x23, 0x5f, 0x84, 0x5e, 0x70, 0x05, 0x9b, 0x9f, + 0x38, 0x47, 0xf3, 0x03, 0x2b, 0xeb, 0x3e, 0x15, 0x7d, 0x0e, 0x81, 0xb5, 0x73, 0x85, 0xb5, 0x4c, + 0xa0, 0x9d, 0xf3, 0x28, 0x65, 0xce, 0x97, 0xc2, 0xe8, 0x0e, 0xaa, 0x40, 0x1a, 0x1f, 0x77, 0x15, + 0x1d, 0x3b, 0x1a, 0x77, 0x6b, 0xa5, 0x61, 0x6f, 0xe2, 0x06, 0xe2, 0xff, 0x69, 0x7c, 0xdc, 0x25, + 0x44, 0xb4, 0x4b, 0x66, 0x38, 0x11, 0x0e, 0xd0, 0x6a, 0x3b, 0x67, 0xc3, 0x09, 0xdf, 0x5e, 0xb8, + 0xb8, 0x59, 0x2f, 0x12, 0x60, 0x22, 0x78, 0xdf, 0x7d, 0x29, 0xc1, 0x1b, 0x91, 0x7d, 0x17, 0xe7, + 0x64, 0xf7, 0x09, 0xa4, 0xa8, 0x0a, 0x12, 0xe7, 0x54, 0x01, 0xe5, 0x2a, 0xfd, 0xbe, 0x18, 0xf5, + 0x32, 0x6e, 0x5b, 0x44, 0xbd, 0x5f, 0xc3, 0xba, 0xd8, 0xb4, 0xe8, 0xf6, 0xc4, 0xb9, 0xbb, 0x5d, + 0xb0, 0xf6, 0xb9, 0x85, 0xbe, 0xca, 0xc6, 0xe9, 0x16, 0xfe, 0xa6, 0x04, 0xf3, 0x35, 0xac, 0xda, + 0xee, 0x33, 0xac, 0xba, 0x31, 0x87, 0xb3, 0x1f, 0x40, 0xd2, 0xb4, 0x8e, 0xce, 0xb3, 0x34, 0x48, + 0xca, 0xfb, 0xd3, 0x56, 0xb8, 0x5e, 0x71, 0xb6, 0xfa, 0x5f, 0x25, 0x20, 0xf3, 0xb0, 0x12, 0x67, + 0x5b, 0x3f, 0xe1, 0x4b, 0xd0, 0x6c, 0xa8, 0x47, 0x99, 0xa5, 0xf7, 0xbc, 0x95, 0x87, 0x95, 0x4d, + 0x7c, 0x22, 0xcc, 0x92, 0x70, 0xa1, 0x35, 0xc8, 0xb8, 0xfb, 0x36, 0x76, 0xf6, 0xad, 0xb6, 0x7e, + 0x9e, 0x98, 0xc5, 0xe7, 0x5a, 0x3c, 0x80, 0x49, 0x2a, 0x57, 0xa4, 0x41, 0x48, 0x11, 0x69, 0x10, + 0xe4, 0x31, 0x5e, 0xd8, 0x97, 0x38, 0xcf, 0x63, 0x04, 0x81, 0x75, 0x8e, 0x17, 0x1b, 0x4d, 0x16, + 0xa6, 0x4a, 0x4f, 0x00, 0x48, 0xd3, 0xe2, 0xec, 0x9e, 0xbf, 0x9a, 0x84, 0xfc, 0x4e, 0xcf, 0xd9, + 0x8f, 0xd9, 0x1e, 0x2b, 0x00, 0xdd, 0x9e, 0x43, 0xc1, 0xc2, 0xb1, 0xc9, 0xdb, 0x7f, 0x46, 0x9e, + 0x85, 0x50, 0x00, 0xe3, 0x6b, 0x1e, 0x9b, 0xa8, 0xc6, 0x85, 0x60, 0xc5, 0x4f, 0xd6, 0xb8, 0x36, + 0x0a, 0x4b, 0x36, 0x8f, 0xcd, 0x2d, 0xec, 0x81, 0x48, 0x26, 0x09, 0x13, 0x49, 0x9f, 0xc0, 0x34, + 0xb9, 0x50, 0x5c, 0xeb, 0x3c, 0x5d, 0x3e, 0x45, 0x78, 0x9a, 0x16, 0xba, 0x0f, 0x19, 0xc6, 0x4d, + 0x26, 0xae, 0x29, 0x3a, 0x71, 0x45, 0xb5, 0x85, 0xab, 0x91, 0x4e, 0x59, 0x69, 0xca, 0x4a, 0xa6, + 0xa9, 0x05, 0x98, 0xdc, 0xb3, 0x6c, 0x0d, 0xd3, 0x0c, 0x8c, 0xb4, 0xcc, 0x2e, 0x82, 0xbd, 0xba, + 0x91, 0x4a, 0xa7, 0x0b, 0x99, 0x8d, 0x54, 0x3a, 0x53, 0x80, 0xd2, 0x6f, 0x4b, 0x30, 0xeb, 0x75, + 0x47, 0x9c, 0xbe, 0xbc, 0x12, 0xd2, 0xe5, 0xf9, 0x3b, 0x84, 0xa8, 0xb1, 0xf4, 0xaf, 0x69, 0x60, + 0xa3, 0x59, 0x87, 0xb4, 0x7f, 0xe2, 0xb4, 0x97, 0xfb, 0x2c, 0x21, 0x27, 0x71, 0xde, 0x3e, 0xa6, + 0xb9, 0x39, 0x77, 0x60, 0xc1, 0xe8, 0x10, 0x2f, 0x6f, 0xb8, 0xed, 0x13, 0x8e, 0xca, 0x5c, 0x2c, + 0xde, 0xf1, 0xce, 0xfb, 0xf7, 0x2a, 0xe2, 0x16, 0x77, 0x7c, 0xec, 0x9d, 0x8d, 0xdf, 0x9e, 0x38, + 0x15, 0x5e, 0x87, 0x19, 0x9b, 0x89, 0x26, 0xd1, 0xc9, 0x39, 0x75, 0x9e, 0xf3, 0x58, 0x89, 0xda, + 0x7f, 0x2f, 0x01, 0xb3, 0x4f, 0x7a, 0xd8, 0x3e, 0xf9, 0x26, 0x29, 0xfd, 0x06, 0xcc, 0x1e, 0xa9, + 0x86, 0xab, 0xec, 0x59, 0xb6, 0xd2, 0xeb, 0xea, 0xaa, 0x2b, 0xb2, 0x42, 0x66, 0x08, 0xf9, 0x81, + 0x65, 0xef, 0x52, 0x22, 0xc2, 0x80, 0x0e, 0x4c, 0xeb, 0xc8, 0x54, 0x08, 0x99, 0xa2, 0xe1, 0x63, + 0x93, 0x2f, 0x26, 0x97, 0x3f, 0xfc, 0x0f, 0xa7, 0x4b, 0xf7, 0xc6, 0xca, 0xfb, 0xa2, 0x99, 0x6b, + 0xbd, 0x9e, 0xa1, 0xaf, 0xec, 0xee, 0xd6, 0xd7, 0xe5, 0x02, 0x15, 0xf9, 0x19, 0x93, 0xd8, 0x3c, + 0x36, 0xc5, 0x2c, 0xfe, 0x4a, 0x82, 0x82, 0xaf, 0xa9, 0x38, 0xbb, 0xb3, 0x0a, 0xd9, 0xe7, 0x3d, + 0x6c, 0x1b, 0xaf, 0xd1, 0x99, 0xc0, 0x19, 0x89, 0x23, 0xfa, 0x02, 0x72, 0x21, 0x3d, 0x24, 0xbf, + 0x9a, 0x1e, 0xb2, 0x47, 0xbe, 0x0a, 0x4a, 0xff, 0x52, 0x02, 0x44, 0x1b, 0x5f, 0x67, 0xeb, 0xf8, + 0xdf, 0x14, 0x4b, 0xb9, 0x05, 0x05, 0x9a, 0xf3, 0xa8, 0x18, 0x7b, 0x4a, 0xc7, 0x70, 0x1c, 0xc3, + 0x6c, 0x71, 0x53, 0xc9, 0x53, 0x7a, 0x7d, 0x6f, 0x8b, 0x51, 0x79, 0x27, 0xfe, 0x39, 0x98, 0x0f, + 0x35, 0x23, 0xce, 0x6e, 0xbc, 0x0a, 0xb9, 0x3d, 0xab, 0x67, 0xea, 0x0a, 0x7b, 0xd7, 0xc1, 0x17, + 0xff, 0xb2, 0x94, 0xc6, 0x9e, 0x57, 0xfa, 0xef, 0x09, 0x58, 0x90, 0xb1, 0x63, 0xb5, 0x0f, 0x71, + 0xfc, 0x8a, 0xac, 0x01, 0x7f, 0xcb, 0xa2, 0xbc, 0x96, 0x3e, 0x33, 0x8c, 0x99, 0x4d, 0x69, 0xe1, + 0x75, 0xf4, 0xb7, 0x47, 0xdb, 0xe2, 0xe0, 0xca, 0x39, 0x5f, 0x96, 0x4b, 0x85, 0x96, 0xe5, 0x2c, + 0x98, 0x35, 0x5a, 0xa6, 0x45, 0x7c, 0x96, 0x83, 0x9f, 0x9b, 0xbd, 0x8e, 0xc0, 0x2c, 0x2b, 0xa3, + 0x2a, 0x59, 0x67, 0x2c, 0x0d, 0xfc, 0x7c, 0xbb, 0xd7, 0xa1, 0x91, 0x73, 0xf9, 0x22, 0xa9, 0xef, + 0xcb, 0xd3, 0xa5, 0x7c, 0xe8, 0x9e, 0x23, 0xe7, 0x0d, 0xef, 0x9a, 0x48, 0xe7, 0x5d, 0xfe, 0x3d, + 0xb8, 0xd0, 0xa7, 0xf2, 0x38, 0x63, 0x9c, 0x7f, 0x91, 0x84, 0xcb, 0x61, 0xf1, 0x71, 0x23, 0x91, + 0x6f, 0x7a, 0xb7, 0xd6, 0x60, 0xa6, 0x63, 0x98, 0xaf, 0xb7, 0x10, 0x99, 0xeb, 0x18, 0xa6, 0xbf, + 0x9e, 0x1b, 0x61, 0x20, 0x53, 0xff, 0x0f, 0x0c, 0x44, 0x85, 0xc5, 0xa8, 0x1e, 0x8c, 0xd3, 0x4a, + 0x7e, 0x24, 0x41, 0x2e, 0xee, 0xb5, 0xb5, 0xd7, 0xcb, 0x52, 0xe3, 0x6d, 0x6e, 0xc2, 0xcc, 0xd7, + 0xb0, 0x18, 0xf7, 0x7b, 0x12, 0xa0, 0xa6, 0xdd, 0x33, 0x09, 0xc8, 0x7d, 0x64, 0xb5, 0xe2, 0x6c, + 0xec, 0x02, 0x4c, 0x1a, 0xa6, 0x8e, 0x8f, 0x69, 0x63, 0x53, 0x32, 0xbb, 0x08, 0xbd, 0x40, 0x4c, + 0x8e, 0xf5, 0x02, 0xd1, 0x4f, 0x55, 0x09, 0x55, 0x34, 0x4e, 0x2d, 0xfc, 0x83, 0x04, 0xcc, 0xf3, + 0xe6, 0xc4, 0xbe, 0x18, 0xf9, 0x6d, 0x98, 0x6c, 0x13, 0x99, 0x23, 0xfa, 0x9c, 0x3e, 0x53, 0xf4, + 0x39, 0x2d, 0x8c, 0x7e, 0x15, 0xa0, 0x6b, 0xe3, 0x43, 0x85, 0xb1, 0x26, 0xc7, 0x62, 0xcd, 0x10, + 0x0e, 0x4a, 0x40, 0xdf, 0x85, 0x59, 0x32, 0xc2, 0xbb, 0xb6, 0xd5, 0xb5, 0x1c, 0x12, 0xa4, 0x38, + 0xe3, 0x21, 0x9d, 0xb9, 0x97, 0xa7, 0x4b, 0x33, 0x5b, 0x86, 0xb9, 0xc3, 0x19, 0x9b, 0x0d, 0x99, + 0xb8, 0x0a, 0xef, 0x52, 0x0c, 0xc0, 0x7f, 0x27, 0xc1, 0xc2, 0xd7, 0xb6, 0x7c, 0xfb, 0xff, 0x43, + 0x63, 0xde, 0xcc, 0x53, 0xa0, 0x97, 0x75, 0x73, 0xcf, 0x8a, 0x7f, 0x51, 0xfd, 0x47, 0x12, 0xcc, + 0x05, 0xc4, 0xc7, 0x19, 0xc9, 0xbc, 0x96, 0xce, 0x4a, 0xbf, 0x4e, 0x62, 0x9b, 0xa0, 0xd9, 0xc7, + 0x39, 0xa8, 0xfe, 0x69, 0x02, 0x2e, 0x56, 0xd8, 0xab, 0x65, 0x91, 0x77, 0x11, 0xa7, 0x95, 0x14, + 0x61, 0xfa, 0x10, 0xdb, 0x8e, 0x61, 0xb1, 0x19, 0x76, 0x46, 0x16, 0x97, 0x68, 0x11, 0xd2, 0x8e, + 0xa9, 0x76, 0x9d, 0x7d, 0x4b, 0xbc, 0x8d, 0xf3, 0xae, 0xbd, 0x1c, 0x91, 0xc9, 0xd7, 0xcf, 0x11, + 0x99, 0x1a, 0x9d, 0x23, 0x32, 0xfd, 0x95, 0x73, 0x44, 0xf8, 0xab, 0xaf, 0x3f, 0x92, 0xe0, 0xd2, + 0x80, 0xfe, 0xe2, 0xb4, 0x99, 0x1f, 0x42, 0x56, 0xe3, 0x82, 0x89, 0x37, 0x66, 0x6f, 0xf7, 0xea, + 0xa4, 0xd8, 0x6b, 0x02, 0x90, 0x97, 0xa7, 0x4b, 0x20, 0xaa, 0x5a, 0x5f, 0xe7, 0x2a, 0x22, 0xff, + 0xf5, 0xd2, 0xbf, 0xcf, 0xc1, 0x6c, 0xf5, 0x98, 0xad, 0x5d, 0x37, 0x58, 0x3c, 0x80, 0x1e, 0x40, + 0xba, 0x6b, 0x5b, 0x87, 0x86, 0x68, 0x46, 0x3e, 0x94, 0x1a, 0x20, 0x9a, 0xd1, 0xc7, 0xb5, 0xc3, + 0x39, 0x64, 0x8f, 0x17, 0x35, 0x21, 0xf3, 0xc8, 0xd2, 0xd4, 0xf6, 0x03, 0xa3, 0x2d, 0xec, 0xff, + 0xfd, 0xb3, 0x05, 0xad, 0x78, 0x3c, 0x3b, 0xaa, 0xbb, 0x2f, 0xba, 0xc2, 0x23, 0xa2, 0x3a, 0xa4, + 0x6b, 0xae, 0xdb, 0x25, 0x37, 0xb9, 0x37, 0xb9, 0x39, 0x86, 0x50, 0xc2, 0x22, 0xb2, 0x4d, 0x05, + 0x3b, 0x6a, 0xc2, 0xdc, 0x43, 0xcb, 0x6a, 0xb5, 0x71, 0xa5, 0x6d, 0xf5, 0xf4, 0x8a, 0x65, 0xee, + 0x19, 0x2d, 0xee, 0x8f, 0x6f, 0x8c, 0x21, 0xf3, 0x61, 0xa5, 0x21, 0x0f, 0x0a, 0x40, 0x6b, 0x90, + 0x6e, 0xdc, 0xe3, 0xc2, 0x58, 0x00, 0x77, 0x7d, 0x0c, 0x61, 0x8d, 0x7b, 0xb2, 0xc7, 0x86, 0x36, + 0x20, 0xbb, 0xf6, 0xa2, 0x67, 0x63, 0x2e, 0x65, 0x6a, 0x68, 0x5e, 0x42, 0xbf, 0x14, 0xca, 0x25, + 0x07, 0x99, 0x51, 0x03, 0xf2, 0x9f, 0x59, 0xf6, 0x41, 0xdb, 0x52, 0x45, 0x0b, 0xa7, 0xa9, 0xb8, + 0x6f, 0x8d, 0x21, 0x4e, 0x30, 0xca, 0x7d, 0x22, 0xd0, 0xf7, 0x60, 0x96, 0x74, 0x46, 0x53, 0x7d, + 0xd6, 0x16, 0x95, 0x4c, 0x53, 0xa9, 0xef, 0x8e, 0x21, 0xd5, 0xe3, 0x14, 0x2f, 0x4f, 0xfa, 0x44, + 0x2d, 0x7e, 0x17, 0x66, 0x42, 0x46, 0x80, 0x10, 0xa4, 0xba, 0xa4, 0xbf, 0x25, 0x9a, 0x3f, 0x44, + 0xff, 0xa3, 0xf7, 0x60, 0xda, 0xb4, 0x74, 0x2c, 0x46, 0xc8, 0x4c, 0x79, 0xe1, 0xe5, 0xe9, 0xd2, + 0xd4, 0xb6, 0xa5, 0xb3, 0x70, 0x85, 0xff, 0x93, 0xa7, 0x48, 0x21, 0x11, 0xac, 0x2c, 0xde, 0x80, + 0x14, 0xe9, 0x7d, 0xe2, 0xa4, 0x9e, 0xa9, 0x0e, 0xde, 0xb5, 0x0d, 0x2e, 0x53, 0x5c, 0xf2, 0x72, + 0x3f, 0x97, 0x20, 0xd1, 0xb8, 0x47, 0x02, 0xf5, 0x67, 0x3d, 0xed, 0x00, 0xbb, 0xbc, 0x14, 0xbf, + 0xa2, 0x01, 0xbc, 0x8d, 0xf7, 0x0c, 0x16, 0x43, 0x65, 0x64, 0x7e, 0x85, 0xde, 0x02, 0x50, 0x35, + 0x0d, 0x3b, 0x8e, 0x22, 0xf6, 0xdd, 0x65, 0xe4, 0x0c, 0xa3, 0x6c, 0xe2, 0x13, 0xc2, 0xe6, 0x60, + 0xcd, 0xc6, 0xae, 0x48, 0x84, 0x62, 0x57, 0x84, 0xcd, 0xc5, 0x9d, 0xae, 0xe2, 0x5a, 0x07, 0xd8, + 0xa4, 0x36, 0x93, 0x21, 0xce, 0xa7, 0xd3, 0x6d, 0x12, 0x02, 0xf1, 0x9b, 0xd8, 0xd4, 0x7d, 0x27, + 0x97, 0x91, 0xbd, 0x6b, 0x22, 0xd2, 0xc6, 0x2d, 0x83, 0x6f, 0x1d, 0xcb, 0xc8, 0xfc, 0x8a, 0x68, + 0x4c, 0xed, 0xb9, 0xfb, 0xb4, 0x57, 0x32, 0x32, 0xfd, 0xcf, 0x9b, 0xf6, 0xb7, 0x25, 0x48, 0x3e, + 0xac, 0x34, 0xce, 0xdd, 0x36, 0x21, 0x31, 0xe9, 0x4b, 0xa4, 0xf9, 0x87, 0x46, 0xbb, 0x6d, 0x98, + 0x2d, 0x12, 0xd2, 0xfc, 0x10, 0x6b, 0xa2, 0x65, 0x79, 0x4e, 0xde, 0x61, 0x54, 0xb4, 0x0c, 0x59, + 0xcd, 0xc6, 0x3a, 0x36, 0x5d, 0x43, 0x6d, 0x3b, 0xbc, 0x89, 0x41, 0x12, 0xaf, 0xdc, 0x6f, 0x4a, + 0x30, 0x49, 0x8d, 0x17, 0xbd, 0x09, 0x19, 0xcd, 0x32, 0x5d, 0xd5, 0x30, 0xb9, 0x17, 0xca, 0xc8, + 0x3e, 0x61, 0x68, 0x25, 0xaf, 0x42, 0x4e, 0xd5, 0x34, 0xab, 0x67, 0xba, 0x8a, 0xa9, 0x76, 0x30, + 0xaf, 0x6c, 0x96, 0xd3, 0xb6, 0xd5, 0x0e, 0x46, 0x4b, 0x20, 0x2e, 0xbd, 0xdd, 0x8f, 0x19, 0x19, + 0x38, 0x69, 0x13, 0x9f, 0xf0, 0x9a, 0xfc, 0x91, 0x04, 0x69, 0x61, 0xf4, 0xa4, 0x32, 0x2d, 0x6c, + 0x62, 0x5b, 0x75, 0x2d, 0xaf, 0x32, 0x1e, 0xa1, 0x7f, 0xc6, 0xcb, 0xf8, 0x33, 0xde, 0x02, 0x4c, + 0xba, 0xc4, 0xae, 0x79, 0x3d, 0xd8, 0x05, 0x5d, 0x6b, 0x6e, 0xab, 0x2d, 0xb6, 0xbc, 0x96, 0x91, + 0xd9, 0x05, 0x69, 0x12, 0xcf, 0xa1, 0x65, 0xda, 0xe1, 0x57, 0xa4, 0xbe, 0x2c, 0xc7, 0xf3, 0x19, + 0x6e, 0x19, 0x26, 0x35, 0x80, 0xa4, 0x0c, 0x94, 0x54, 0x26, 0x14, 0xf4, 0x06, 0x64, 0x58, 0x01, + 0x6c, 0xea, 0xd4, 0x0a, 0x92, 0x72, 0x9a, 0x12, 0xaa, 0x62, 0x7b, 0xd7, 0xe2, 0x01, 0x64, 0xbc, + 0x31, 0x46, 0x3a, 0xb2, 0xe7, 0x78, 0x4a, 0xa5, 0xff, 0xd1, 0xfb, 0xb0, 0xf0, 0xbc, 0xa7, 0xb6, + 0x8d, 0x3d, 0xba, 0x72, 0x46, 0x8a, 0x31, 0xfd, 0xb1, 0xf6, 0x20, 0xef, 0x1e, 0x95, 0x40, 0xd5, + 0x28, 0x86, 0x64, 0xd2, 0x1f, 0x92, 0xc1, 0x57, 0x21, 0xa5, 0x9f, 0x48, 0x30, 0xc7, 0xd2, 0x80, + 0x58, 0x26, 0x6a, 0x7c, 0x01, 0xc6, 0xc7, 0x90, 0xd1, 0x55, 0x57, 0x65, 0x3b, 0x3c, 0x13, 0x23, + 0x77, 0x78, 0x7a, 0xfb, 0x0b, 0x54, 0x57, 0xa5, 0xbb, 0x3c, 0x11, 0xa4, 0xc8, 0x7f, 0xb6, 0x25, + 0x56, 0xa6, 0xff, 0xfd, 0xc4, 0x8a, 0x60, 0x75, 0xe3, 0x0c, 0xb8, 0x56, 0xe1, 0x02, 0xd1, 0x7e, + 0xd5, 0xd4, 0xec, 0x93, 0xae, 0x6b, 0x58, 0xe6, 0x63, 0xfa, 0xeb, 0xa0, 0x42, 0xe0, 0xc5, 0x14, + 0x7d, 0x1f, 0xc5, 0xeb, 0xf2, 0x87, 0x53, 0x30, 0x53, 0x3d, 0xee, 0x5a, 0x76, 0xac, 0x8b, 0x5a, + 0x65, 0x98, 0xe6, 0x88, 0x7f, 0xc4, 0xab, 0xe2, 0x3e, 0x5f, 0x2d, 0xde, 0xc2, 0x72, 0x46, 0x54, + 0x06, 0x60, 0x39, 0xa3, 0x34, 0x97, 0x28, 0x79, 0x8e, 0x17, 0x66, 0x94, 0x8d, 0x50, 0xd1, 0x36, + 0x64, 0x3b, 0x87, 0x9a, 0xa6, 0xec, 0x19, 0x6d, 0x97, 0x27, 0xdd, 0x45, 0x67, 0x8c, 0x6f, 0x3d, + 0xad, 0x54, 0x1e, 0xd0, 0x42, 0x2c, 0xff, 0xcd, 0xbf, 0x96, 0x81, 0x48, 0x60, 0xff, 0xd1, 0xbb, + 0xc0, 0x77, 0xde, 0x28, 0x8e, 0xd8, 0x64, 0x57, 0x9e, 0x79, 0x79, 0xba, 0x94, 0x91, 0x29, 0xb5, + 0xd1, 0x68, 0xca, 0x19, 0x56, 0xa0, 0xe1, 0xb8, 0xe8, 0x1a, 0xcc, 0x58, 0x1d, 0xc3, 0x55, 0x44, + 0x0c, 0xc4, 0xc3, 0xc6, 0x1c, 0x21, 0x8a, 0x18, 0x09, 0x35, 0xe1, 0x26, 0x36, 0xe9, 0x28, 0x20, + 0xed, 0x54, 0x9e, 0xb1, 0xb5, 0x48, 0x97, 0x8d, 0x77, 0xc5, 0xea, 0xba, 0x46, 0xc7, 0x78, 0x41, + 0x5f, 0x56, 0xf3, 0xf7, 0x45, 0xd7, 0x58, 0x71, 0xd2, 0xbe, 0x32, 0x5d, 0xa4, 0xe4, 0x65, 0x1f, + 0x07, 0x8a, 0xa2, 0xdf, 0x94, 0xe0, 0x22, 0x57, 0xa4, 0xf2, 0x8c, 0xa6, 0xbc, 0xab, 0x6d, 0xc3, + 0x3d, 0x51, 0x0e, 0x0e, 0x8b, 0x69, 0x1a, 0x9c, 0xfe, 0x4a, 0x64, 0x87, 0x04, 0xec, 0x60, 0x45, + 0x74, 0xcb, 0xc9, 0x23, 0xce, 0xbc, 0x79, 0x58, 0x35, 0x5d, 0xfb, 0xa4, 0x7c, 0xe9, 0xe5, 0xe9, + 0xd2, 0xfc, 0xe0, 0xdd, 0xa7, 0xf2, 0xbc, 0x33, 0xc8, 0x82, 0x6a, 0x00, 0xd8, 0xb3, 0x46, 0x9a, + 0xf2, 0x17, 0x1d, 0x5e, 0x44, 0x9a, 0xad, 0x1c, 0xe0, 0x45, 0xb7, 0xa0, 0xc0, 0x37, 0xbd, 0xec, + 0x19, 0x6d, 0xac, 0x38, 0xc6, 0x0b, 0x5c, 0x04, 0xea, 0x83, 0xf2, 0x8c, 0x4e, 0x44, 0x34, 0x8c, + 0x17, 0x78, 0xf1, 0x87, 0x50, 0x1c, 0x56, 0xfb, 0xe0, 0x40, 0xc8, 0xb0, 0x17, 0xb3, 0x1f, 0x85, + 0x57, 0x64, 0xc6, 0x30, 0x55, 0xb1, 0x2a, 0x93, 0xf8, 0x48, 0xb8, 0xa0, 0xdf, 0x4f, 0xc0, 0x4c, + 0xb9, 0xd7, 0x3e, 0x78, 0xdc, 0x6d, 0xf4, 0x3a, 0x1d, 0xd5, 0x3e, 0x21, 0xae, 0x92, 0xb9, 0x0e, + 0x52, 0x4d, 0x89, 0xb9, 0x4a, 0xea, 0x1b, 0x8c, 0x17, 0x98, 0x4c, 0x66, 0xc1, 0x6d, 0xde, 0x2c, + 0xa5, 0x9f, 0xb6, 0x24, 0xb0, 0x77, 0xdb, 0x3a, 0x72, 0xd0, 0x47, 0x50, 0x0c, 0x14, 0xa4, 0xcb, + 0x27, 0x0a, 0x36, 0x5d, 0xdb, 0xc0, 0x6c, 0x39, 0x30, 0x29, 0x07, 0xd2, 0x69, 0xea, 0xe4, 0x76, + 0x95, 0xdd, 0x45, 0x4d, 0xc8, 0x91, 0x82, 0x27, 0x0a, 0x9d, 0x6c, 0xc4, 0xa2, 0xed, 0x9d, 0x88, + 0xc6, 0x85, 0xea, 0xbd, 0x42, 0xb5, 0x54, 0xa1, 0x3c, 0xf4, 0xaf, 0x9c, 0xc5, 0x3e, 0x65, 0xf1, + 0x53, 0x28, 0xf4, 0x17, 0x08, 0x6a, 0x34, 0xc5, 0x34, 0xba, 0x10, 0xd4, 0x68, 0x32, 0xa0, 0xad, + 0x8d, 0x54, 0x3a, 0x55, 0x98, 0x2c, 0xfd, 0x69, 0x12, 0xf2, 0xc2, 0xd8, 0xe2, 0x44, 0x33, 0x65, + 0x98, 0x24, 0xa6, 0x21, 0x92, 0x3f, 0x6e, 0x8c, 0xb0, 0x71, 0x9e, 0x3e, 0x4e, 0x4c, 0x46, 0xe0, + 0x61, 0xca, 0x1a, 0x87, 0xdb, 0x59, 0xfc, 0xf3, 0x09, 0x48, 0x51, 0x00, 0x71, 0x07, 0x52, 0x74, + 0xea, 0x90, 0xc6, 0x99, 0x3a, 0x68, 0x51, 0x6f, 0xb2, 0x4b, 0x04, 0xe2, 0x4f, 0x12, 0xcc, 0xed, + 0xab, 0x1f, 0xdc, 0xb9, 0x4b, 0x5d, 0x4e, 0x4e, 0xe6, 0x57, 0xa8, 0x4c, 0xb3, 0x92, 0x2c, 0xdb, + 0xc5, 0x3a, 0x0f, 0xdc, 0x97, 0xcf, 0xea, 0x5f, 0x31, 0x4d, 0x09, 0x3e, 0x74, 0x19, 0x92, 0xc4, + 0x97, 0x4d, 0xb3, 0x8c, 0x85, 0x97, 0xa7, 0x4b, 0x49, 0xe2, 0xc5, 0x08, 0x0d, 0xad, 0x42, 0x36, + 0xec, 0x38, 0xa4, 0x5b, 0x19, 0xe6, 0x1e, 0x03, 0x83, 0x1e, 0xda, 0xde, 0x00, 0x63, 0xa0, 0x95, + 0xf7, 0xf1, 0x6f, 0x4c, 0xc2, 0x4c, 0xbd, 0x13, 0xf7, 0xc4, 0xb2, 0x16, 0xee, 0xe1, 0x28, 0xb4, + 0x13, 0x7a, 0x68, 0x44, 0x07, 0x87, 0xe6, 0xf4, 0xe4, 0xf9, 0xe6, 0xf4, 0x3a, 0x09, 0x81, 0xf9, + 0xb9, 0x0d, 0xc9, 0x21, 0xc0, 0x26, 0xfc, 0x7c, 0x1a, 0xc5, 0xc8, 0x84, 0xc7, 0xdf, 0x50, 0x41, + 0xb3, 0x4e, 0x3e, 0xa5, 0x91, 0x36, 0xb3, 0xb2, 0xa9, 0xf1, 0xad, 0x6c, 0x1a, 0x9b, 0x3a, 0x9d, + 0xda, 0xc2, 0x7e, 0x75, 0xfa, 0xf5, 0xfd, 0xea, 0xe2, 0x0b, 0x6e, 0xac, 0x1f, 0x43, 0x52, 0x37, + 0x44, 0xe7, 0x8c, 0x3f, 0x61, 0x13, 0xa6, 0x33, 0xac, 0x36, 0x15, 0xb4, 0xda, 0xe0, 0x02, 0xc7, + 0xe2, 0x63, 0x00, 0x5f, 0x43, 0x68, 0x19, 0xa6, 0xac, 0xb6, 0x2e, 0xf6, 0x95, 0xcc, 0x94, 0x33, + 0x2f, 0x4f, 0x97, 0x26, 0x1f, 0xb7, 0xf5, 0xfa, 0xba, 0x3c, 0x69, 0xb5, 0xf5, 0xba, 0x4e, 0x8f, + 0xce, 0xc0, 0x47, 0x8a, 0x97, 0x84, 0x96, 0x93, 0xa7, 0x4d, 0x7c, 0xb4, 0x8e, 0x1d, 0xad, 0x2f, + 0x39, 0x86, 0x98, 0xe0, 0x8f, 0x25, 0xc8, 0x8b, 0xde, 0x88, 0xd7, 0xcd, 0xa4, 0x8d, 0x0e, 0x1f, + 0x76, 0xc9, 0xf3, 0x0d, 0x3b, 0xc1, 0xc7, 0xf7, 0xe5, 0xfe, 0x96, 0xc4, 0x13, 0x90, 0x1b, 0x9a, + 0xea, 0x92, 0x60, 0x23, 0xc6, 0xa1, 0xf2, 0x0e, 0x14, 0x6c, 0xd5, 0xd4, 0xad, 0x8e, 0xf1, 0x02, + 0xb3, 0x15, 0x51, 0x87, 0xbf, 0xdc, 0x9c, 0xf5, 0xe8, 0x74, 0xc9, 0x4f, 0x2c, 0xe8, 0xfe, 0x61, + 0x82, 0x27, 0x2b, 0x7b, 0x95, 0x89, 0x53, 0x69, 0x3f, 0x80, 0xb9, 0xfe, 0x93, 0x4d, 0xc4, 0x28, + 0x7e, 0x2f, 0x42, 0x5e, 0x54, 0x45, 0x58, 0x72, 0xa1, 0xc8, 0x86, 0xef, 0x3b, 0xe5, 0xc4, 0x41, + 0x15, 0xc8, 0x06, 0x0f, 0x4c, 0x49, 0x8e, 0x7d, 0x60, 0x0a, 0xd8, 0xde, 0x31, 0x29, 0x8b, 0xbf, + 0x06, 0x93, 0xf4, 0xf6, 0x6b, 0xb8, 0x6e, 0xde, 0xa7, 0xff, 0x39, 0x01, 0x6f, 0xd3, 0xda, 0x3f, + 0xc5, 0xb6, 0xb1, 0x77, 0xb2, 0x63, 0x5b, 0x2e, 0xd6, 0x5c, 0xac, 0xfb, 0x1b, 0x44, 0x62, 0xf5, + 0x87, 0x99, 0xae, 0x78, 0xc0, 0xb9, 0x92, 0xca, 0x3c, 0x2e, 0xb4, 0x09, 0xb3, 0xec, 0xe0, 0x1f, + 0x45, 0x6d, 0x1b, 0x87, 0x58, 0x51, 0xdd, 0xf3, 0xcc, 0x7a, 0x33, 0x8c, 0x77, 0x8d, 0xb0, 0xae, + 0xb9, 0x48, 0x87, 0x0c, 0x17, 0x66, 0xe8, 0xfc, 0xb4, 0x9f, 0x87, 0x5f, 0x6d, 0x35, 0x31, 0x2d, + 0x53, 0x79, 0xf5, 0x75, 0x39, 0xcd, 0x24, 0x7b, 0x6f, 0x83, 0xfe, 0x44, 0x82, 0xeb, 0x67, 0x28, + 0x3a, 0x4e, 0x03, 0x5e, 0x84, 0xf4, 0x21, 0x79, 0x90, 0xc1, 0x35, 0x9d, 0x96, 0xbd, 0x6b, 0xb4, + 0x05, 0x33, 0x7b, 0xaa, 0xd1, 0xf6, 0x0d, 0x7b, 0x78, 0x26, 0x62, 0x74, 0x82, 0x6c, 0x8e, 0xb1, + 0x33, 0x4b, 0x2e, 0xfd, 0x38, 0x01, 0x73, 0x6b, 0xba, 0xde, 0x68, 0x70, 0xdf, 0x18, 0x9f, 0xbd, + 0x08, 0x50, 0x9a, 0xf0, 0x41, 0x29, 0x7a, 0x0f, 0x90, 0x6e, 0x38, 0xec, 0x24, 0x11, 0x67, 0x5f, + 0xd5, 0xad, 0x23, 0x3f, 0x1f, 0x63, 0x4e, 0xdc, 0x69, 0x88, 0x1b, 0xa8, 0x01, 0x14, 0x11, 0x29, + 0x8e, 0xab, 0x7a, 0xaf, 0x94, 0xae, 0x8f, 0xb5, 0x9f, 0x8b, 0x41, 0x25, 0xef, 0x52, 0xce, 0x10, + 0x39, 0xf4, 0x2f, 0x89, 0xed, 0x0d, 0xd2, 0x74, 0x57, 0x51, 0x1d, 0xb1, 0xf9, 0x87, 0x9d, 0x61, + 0x92, 0x67, 0xf4, 0x35, 0x27, 0xb8, 0xa7, 0x87, 0xed, 0x4d, 0xf0, 0x15, 0x14, 0x27, 0x84, 0xfe, + 0xfb, 0x12, 0xe4, 0x65, 0xbc, 0x67, 0x63, 0x27, 0xd6, 0xa5, 0x84, 0x07, 0x90, 0xb3, 0x99, 0x54, + 0x65, 0xcf, 0xb6, 0x3a, 0xe7, 0x19, 0x63, 0x59, 0xce, 0xf8, 0xc0, 0xb6, 0x3a, 0xa1, 0x63, 0x1d, + 0x9e, 0xc2, 0xac, 0x57, 0xd3, 0x38, 0x55, 0xf0, 0x13, 0xba, 0x87, 0x99, 0x09, 0x8e, 0x3b, 0x31, + 0xe2, 0xeb, 0xd0, 0x03, 0x7d, 0x87, 0x15, 0xac, 0x6e, 0x9c, 0xca, 0xf8, 0xaf, 0x12, 0xe4, 0x1b, + 0xbd, 0x67, 0xec, 0x20, 0xab, 0xf8, 0xf4, 0x50, 0x85, 0x4c, 0x1b, 0xef, 0xb9, 0xca, 0x6b, 0xe5, + 0xd3, 0xa7, 0x09, 0x2b, 0xdd, 0x53, 0xf0, 0x10, 0xc0, 0xa6, 0x3b, 0xe6, 0xa8, 0x9c, 0xe4, 0x39, + 0xe5, 0x64, 0x28, 0xaf, 0x1f, 0x3e, 0x95, 0x7e, 0x92, 0x80, 0x59, 0xaf, 0xb1, 0x71, 0x7a, 0xcf, + 0xcf, 0x42, 0x5e, 0x23, 0x79, 0x1e, 0xaf, 0x31, 0xc7, 0xf3, 0x42, 0xa2, 0x3d, 0xc7, 0x0a, 0xcc, + 0xd3, 0xe0, 0x46, 0x51, 0xbb, 0xdd, 0xb6, 0x21, 0x40, 0x32, 0xf5, 0x4b, 0x29, 0x79, 0x8e, 0xde, + 0x5a, 0x63, 0x77, 0x28, 0x3c, 0x26, 0xf6, 0xb7, 0x67, 0x63, 0xfc, 0x02, 0x2b, 0x14, 0xaf, 0x9d, + 0x27, 0xef, 0x25, 0xcb, 0x18, 0x1b, 0x84, 0x8f, 0x5b, 0xde, 0xf7, 0x61, 0x8e, 0x6a, 0x36, 0xee, + 0x5d, 0xbb, 0xbc, 0x3b, 0x7e, 0x27, 0x01, 0x28, 0x28, 0xff, 0xeb, 0xeb, 0x91, 0x44, 0x7c, 0x3d, + 0xf2, 0x2e, 0x20, 0x96, 0xdf, 0xe8, 0x28, 0x5d, 0x6c, 0x2b, 0x0e, 0xd6, 0x2c, 0x7e, 0xbc, 0x92, + 0x24, 0x17, 0xf8, 0x9d, 0x1d, 0x6c, 0x37, 0x28, 0x1d, 0xdd, 0x07, 0xf0, 0xa3, 0x36, 0x3e, 0x9d, + 0x8c, 0x0c, 0xda, 0xe4, 0x8c, 0x17, 0xae, 0x95, 0x7e, 0xb4, 0x08, 0x39, 0xae, 0xc9, 0x5d, 0xd3, + 0xb0, 0x4c, 0x74, 0x07, 0x92, 0x2d, 0xfe, 0x9a, 0x21, 0x1b, 0xb9, 0xd0, 0xe7, 0x9f, 0x28, 0x57, + 0x9b, 0x90, 0x49, 0x59, 0xc2, 0xd2, 0xed, 0xb9, 0x11, 0xc1, 0x93, 0x9f, 0xc5, 0x1d, 0x64, 0xe9, + 0xf6, 0x5c, 0xd4, 0x80, 0x59, 0xcd, 0x3f, 0x1f, 0x4b, 0x21, 0xec, 0xc9, 0xa1, 0x00, 0x2c, 0xf2, + 0x5c, 0xb2, 0xda, 0x84, 0x9c, 0xd7, 0x42, 0x37, 0x50, 0x25, 0x78, 0x20, 0x53, 0x6a, 0x20, 0x61, + 0xcc, 0xdf, 0x1e, 0x1c, 0x3e, 0x0c, 0xaa, 0x36, 0x11, 0x38, 0xb7, 0x09, 0x7d, 0x0c, 0x53, 0x3a, + 0x3d, 0xe8, 0x87, 0xdb, 0x75, 0x94, 0xe9, 0x85, 0xce, 0x56, 0xaa, 0x4d, 0xc8, 0x9c, 0x03, 0x6d, + 0x40, 0x8e, 0xfd, 0x63, 0x41, 0x0c, 0x47, 0xa5, 0xd7, 0x87, 0x4b, 0x08, 0x4c, 0x0d, 0xb5, 0x09, + 0x39, 0xab, 0xfb, 0x54, 0xf4, 0x6d, 0x48, 0x39, 0x9a, 0x2a, 0x70, 0xe9, 0x95, 0x21, 0x67, 0x74, + 0xf8, 0xcc, 0xb4, 0x34, 0xba, 0xcf, 0x4e, 0x8a, 0x74, 0x8f, 0xc5, 0x42, 0x61, 0x54, 0xf5, 0x43, + 0x3b, 0xbf, 0x49, 0xf5, 0x31, 0x25, 0xa0, 0x87, 0x90, 0x55, 0x49, 0x34, 0xa8, 0xd0, 0x9d, 0x96, + 0x74, 0x65, 0x30, 0xfa, 0x1d, 0xfc, 0xc0, 0x2e, 0xd9, 0x1a, 0xdd, 0x5e, 0x2e, 0x88, 0xbe, 0xa0, + 0x0e, 0xb6, 0x5b, 0xb8, 0x98, 0x1d, 0x2d, 0x28, 0x98, 0x20, 0xe6, 0x09, 0xa2, 0x44, 0x12, 0x15, + 0xee, 0x8b, 0x5d, 0x34, 0xb4, 0x51, 0xb9, 0xa1, 0xef, 0x7b, 0x23, 0x76, 0x01, 0xd5, 0x26, 0xe4, + 0xdc, 0x7e, 0x80, 0x8c, 0x56, 0x20, 0xd1, 0xd2, 0x8a, 0x33, 0x43, 0x47, 0x88, 0xb7, 0xc7, 0xa5, + 0x36, 0x21, 0x27, 0x5a, 0x1a, 0xfa, 0x14, 0xd2, 0x6c, 0x93, 0xc2, 0xb1, 0x59, 0xcc, 0x0f, 0xf5, + 0x13, 0xe1, 0xad, 0x1e, 0xb5, 0x09, 0x99, 0xee, 0x8b, 0x20, 0xcf, 0xdb, 0x81, 0xbc, 0xcd, 0x32, + 0xec, 0x44, 0x6e, 0x6c, 0x61, 0xe8, 0x3b, 0xf0, 0xa8, 0xf4, 0xd8, 0x1a, 0x45, 0x07, 0x01, 0x3a, + 0xfa, 0x01, 0x2c, 0x84, 0x25, 0x72, 0x4b, 0x9b, 0x1b, 0xfa, 0x3e, 0x77, 0x68, 0x92, 0x66, 0x6d, + 0x42, 0x46, 0xf6, 0xc0, 0x4d, 0xf4, 0x21, 0x4c, 0xb2, 0x5e, 0x43, 0x54, 0x64, 0x54, 0x72, 0x47, + 0x5f, 0x87, 0xb1, 0xf2, 0xc4, 0xf8, 0x5d, 0x9e, 0x5a, 0xa6, 0xb4, 0xad, 0x56, 0x71, 0x7e, 0xa8, + 0xf1, 0x0f, 0xa6, 0xca, 0x11, 0xe3, 0x77, 0x7d, 0x2a, 0xe9, 0x77, 0x9b, 0xdd, 0xe1, 0x99, 0x48, + 0x0b, 0x43, 0xfb, 0x3d, 0x22, 0xe3, 0xac, 0x46, 0x93, 0xfd, 0x7d, 0x32, 0xa9, 0x9a, 0xcd, 0x0e, + 0x94, 0x51, 0xe8, 0x98, 0xba, 0x30, 0xb4, 0x6a, 0x83, 0xe7, 0xee, 0xd4, 0x68, 0xd4, 0xe4, 0x51, + 0xd1, 0x53, 0x28, 0xf0, 0xa3, 0x1e, 0xfc, 0xb7, 0x12, 0x17, 0xa9, 0xbc, 0x77, 0x22, 0x5d, 0x57, + 0x54, 0xea, 0x4e, 0x6d, 0x42, 0x9e, 0xd5, 0xc2, 0x77, 0xd0, 0xe7, 0x30, 0x47, 0xe5, 0x29, 0x9a, + 0x7f, 0x46, 0x47, 0xb1, 0x38, 0x70, 0xd6, 0xc3, 0xf0, 0xe3, 0x3c, 0x84, 0xe4, 0x82, 0xd6, 0x77, + 0x8b, 0x98, 0xb1, 0x61, 0x1a, 0x2e, 0xf5, 0xb2, 0x8b, 0x43, 0xcd, 0x38, 0x7c, 0x9e, 0x20, 0x31, + 0x63, 0x83, 0x51, 0x88, 0x19, 0xbb, 0x3c, 0x4d, 0x8d, 0x77, 0xc7, 0x9b, 0x43, 0xcd, 0x38, 0x2a, + 0x9f, 0x8d, 0x98, 0xb1, 0x1b, 0xa4, 0x13, 0x33, 0x66, 0x0e, 0xa2, 0x4f, 0xee, 0x5b, 0x43, 0xcd, + 0x78, 0xe8, 0x5e, 0x67, 0x62, 0xc6, 0xea, 0xc0, 0x4d, 0xb4, 0x0e, 0xc0, 0x82, 0x1a, 0x3a, 0x29, + 0x5e, 0x19, 0x3a, 0x19, 0xf4, 0x27, 0xaa, 0x91, 0xc9, 0xa0, 0x2d, 0x68, 0xc4, 0x91, 0x51, 0x28, + 0xa5, 0xd0, 0x57, 0xb4, 0xc5, 0xa5, 0xa1, 0x8e, 0x6c, 0xe0, 0xe5, 0x29, 0x71, 0x64, 0x47, 0x1e, + 0x91, 0xcc, 0x2a, 0x6c, 0xbd, 0xb8, 0xb8, 0x3c, 0xdc, 0x2d, 0x07, 0x5f, 0x1e, 0x51, 0xb7, 0x4c, + 0x09, 0x68, 0x0d, 0x32, 0x64, 0xce, 0x3f, 0xa1, 0x6e, 0xe8, 0xea, 0xd0, 0xf8, 0xb4, 0x6f, 0x37, + 0x4b, 0x6d, 0x42, 0x4e, 0x3f, 0xe7, 0x24, 0xf2, 0x78, 0xb6, 0x6e, 0x56, 0x2c, 0x0d, 0x7d, 0x7c, + 0x68, 0xd5, 0x95, 0x3c, 0x9e, 0x71, 0x20, 0x0d, 0x2e, 0xb0, 0xbe, 0xe2, 0x5b, 0x8d, 0x6d, 0xbe, + 0x2f, 0xb6, 0x78, 0x8d, 0x8a, 0x1a, 0xba, 0xf4, 0x14, 0xb9, 0x03, 0xba, 0x36, 0x21, 0xcf, 0xab, + 0x83, 0x77, 0xc9, 0x80, 0xe7, 0x53, 0x0f, 0x5b, 0xb0, 0x2a, 0xbe, 0x3d, 0x74, 0xc0, 0x47, 0xac, + 0xf6, 0x91, 0x01, 0xaf, 0x06, 0xc8, 0x6c, 0x02, 0xd2, 0x15, 0xc7, 0x61, 0x2f, 0xf4, 0xaf, 0x8f, + 0x98, 0x80, 0xfa, 0xd6, 0x08, 0xd8, 0x04, 0xa4, 0x37, 0x18, 0x27, 0x11, 0xa4, 0xb5, 0xb1, 0x6a, + 0x73, 0x37, 0x7b, 0x63, 0xa8, 0xa0, 0x81, 0x23, 0xfa, 0x88, 0x20, 0xcd, 0x23, 0x92, 0x80, 0xc7, + 0x16, 0x67, 0xc4, 0xf0, 0x80, 0xf1, 0xe6, 0xd0, 0x80, 0x27, 0xf2, 0x28, 0x1b, 0x12, 0xf0, 0xd8, + 0xa1, 0x1b, 0xe8, 0x57, 0x61, 0x9a, 0x03, 0xba, 0xe2, 0xad, 0x11, 0x61, 0x6c, 0x10, 0x89, 0x93, + 0x71, 0xcd, 0x79, 0x98, 0x97, 0x65, 0x40, 0x92, 0x35, 0xef, 0x9d, 0x11, 0x5e, 0x76, 0x00, 0xcb, + 0x32, 0x2f, 0xeb, 0x93, 0x89, 0x97, 0x65, 0x76, 0xca, 0xe7, 0xba, 0xdb, 0x43, 0xbd, 0xec, 0xe0, + 0x8e, 0x1a, 0xe2, 0x65, 0x9f, 0xfb, 0x54, 0xd2, 0x32, 0x87, 0x81, 0xa8, 0xe2, 0xb7, 0x86, 0xb6, + 0x2c, 0x8c, 0x29, 0x49, 0xcb, 0x38, 0x0f, 0xe9, 0x36, 0x16, 0x12, 0x33, 0x4d, 0xbf, 0x3b, 0x7c, + 0x57, 0x7f, 0x3f, 0xf4, 0xa8, 0x89, 0xc5, 0x4c, 0xa6, 0x61, 0xcf, 0x51, 0xd9, 0x7c, 0x0f, 0x33, + 0xd7, 0xd4, 0x7b, 0xa3, 0x1d, 0x55, 0xd4, 0xf6, 0x6c, 0xcf, 0x51, 0x85, 0x6e, 0xd2, 0xaa, 0xb2, + 0x8d, 0x69, 0x74, 0x7c, 0xaf, 0x8c, 0x38, 0x80, 0xa0, 0x6f, 0x93, 0x20, 0xad, 0xaa, 0x47, 0xf4, + 0x87, 0x50, 0x8f, 0x9d, 0x94, 0x51, 0x5c, 0x1d, 0x3d, 0x84, 0xc2, 0x27, 0x76, 0x78, 0x43, 0x88, + 0x93, 0xbd, 0x39, 0x53, 0x44, 0x18, 0xef, 0x8f, 0x9e, 0x33, 0xfb, 0x43, 0x0b, 0x36, 0x67, 0xf2, + 0x98, 0xe2, 0x2f, 0x48, 0xb0, 0xcc, 0xea, 0x46, 0xd7, 0xfb, 0x4e, 0x14, 0x6f, 0xed, 0x34, 0xb0, + 0x7d, 0xe2, 0x0e, 0x7d, 0xc0, 0x87, 0xc3, 0xaa, 0x7b, 0xc6, 0x5a, 0x70, 0x6d, 0x42, 0x7e, 0x4b, + 0x1d, 0x55, 0xae, 0x3c, 0xcd, 0x5f, 0xa9, 0x7a, 0x7b, 0x43, 0x67, 0x0b, 0x85, 0x8d, 0x54, 0xfa, + 0x52, 0xa1, 0xb8, 0x91, 0x4a, 0x5f, 0x2e, 0x2c, 0x6e, 0xa4, 0xd2, 0x6f, 0x14, 0xde, 0x2c, 0xfd, + 0xb7, 0xcb, 0x30, 0x23, 0x90, 0x1f, 0x43, 0x44, 0x77, 0x83, 0x88, 0xe8, 0xca, 0x30, 0x44, 0xc4, + 0xb1, 0x22, 0x87, 0x44, 0x77, 0x83, 0x90, 0xe8, 0xca, 0x30, 0x48, 0xe4, 0xf3, 0x10, 0x4c, 0xd4, + 0x1c, 0x86, 0x89, 0xde, 0x19, 0x03, 0x13, 0x79, 0xa2, 0xfa, 0x41, 0xd1, 0xfa, 0x20, 0x28, 0x7a, + 0x7b, 0x34, 0x28, 0xf2, 0x44, 0x05, 0x50, 0xd1, 0xfd, 0x3e, 0x54, 0x74, 0x75, 0x04, 0x2a, 0xf2, + 0xf8, 0x05, 0x2c, 0xda, 0x8c, 0x84, 0x45, 0x37, 0xce, 0x82, 0x45, 0x9e, 0x9c, 0x10, 0x2e, 0xfa, + 0x20, 0x84, 0x8b, 0x96, 0x86, 0xe2, 0x22, 0x8f, 0x9b, 0x01, 0xa3, 0x4f, 0xfa, 0x81, 0xd1, 0xd5, + 0x11, 0xc0, 0xc8, 0x6f, 0x01, 0x47, 0x46, 0xb5, 0x28, 0x64, 0x74, 0xfd, 0x0c, 0x64, 0xe4, 0x49, + 0x09, 0x42, 0xa3, 0x5a, 0x14, 0x34, 0xba, 0x7e, 0x06, 0x34, 0xea, 0x93, 0xc4, 0xb0, 0xd1, 0x76, + 0x34, 0x36, 0xba, 0x79, 0x26, 0x36, 0xf2, 0xa4, 0x85, 0xc1, 0xd1, 0x6a, 0x00, 0x1c, 0xbd, 0x35, + 0x04, 0x1c, 0x79, 0xac, 0x04, 0x1d, 0x7d, 0x67, 0x00, 0x1d, 0x95, 0x46, 0xa1, 0x23, 0x8f, 0xd7, + 0x83, 0x47, 0x4f, 0x86, 0xc0, 0xa3, 0x5b, 0x67, 0xc3, 0x23, 0x4f, 0x58, 0x1f, 0x3e, 0x52, 0x47, + 0xe2, 0xa3, 0xf7, 0xc6, 0xc4, 0x47, 0x9e, 0xf4, 0x28, 0x80, 0xf4, 0x51, 0x18, 0x20, 0x2d, 0x0f, + 0x07, 0x48, 0x9e, 0x18, 0x8e, 0x90, 0x36, 0x23, 0x11, 0xd2, 0x8d, 0xb3, 0x10, 0x92, 0x3f, 0x0e, + 0x82, 0x10, 0x69, 0x3b, 0x1a, 0x22, 0xdd, 0x3c, 0x13, 0x22, 0xf9, 0xdd, 0x1f, 0xc2, 0x48, 0x9b, + 0x91, 0x18, 0xe9, 0xc6, 0x59, 0x18, 0xc9, 0xaf, 0x5c, 0x10, 0x24, 0x7d, 0x36, 0x14, 0x24, 0xdd, + 0x1e, 0x07, 0x24, 0x79, 0x42, 0x07, 0x50, 0xd2, 0x17, 0xc3, 0x51, 0xd2, 0xb7, 0xce, 0x71, 0xe8, + 0x61, 0x24, 0x4c, 0xfa, 0xce, 0x00, 0x4c, 0x2a, 0x8d, 0x82, 0x49, 0xbe, 0x3d, 0x0b, 0x9c, 0xa4, + 0x8e, 0x44, 0x35, 0xef, 0x8d, 0x89, 0x6a, 0x7c, 0xe3, 0x8b, 0x80, 0x35, 0xd5, 0x08, 0x58, 0xf3, + 0xf6, 0x68, 0x58, 0xe3, 0xbb, 0x73, 0x1f, 0xd7, 0xd4, 0xa2, 0x70, 0xcd, 0xf5, 0x33, 0x70, 0x8d, + 0xef, 0x85, 0x02, 0xc0, 0xe6, 0x7e, 0x1f, 0xb0, 0xb9, 0x7a, 0x66, 0xc6, 0x50, 0x00, 0xd9, 0x94, + 0x07, 0x91, 0xcd, 0xb5, 0x91, 0xc8, 0xc6, 0x93, 0xe0, 0x43, 0x9b, 0xfb, 0x7d, 0xd0, 0xe6, 0xea, + 0x08, 0x68, 0xe3, 0x57, 0x80, 0x63, 0x1b, 0x7d, 0x34, 0xb6, 0x59, 0x19, 0x17, 0xdb, 0x78, 0x82, + 0x23, 0xc1, 0xcd, 0x76, 0x34, 0xb8, 0xb9, 0x39, 0xe6, 0x4b, 0xfb, 0x01, 0x74, 0x53, 0x8b, 0x42, + 0x37, 0xd7, 0xcf, 0x40, 0x37, 0xc1, 0x39, 0xc4, 0x83, 0x37, 0xb5, 0x28, 0x78, 0x73, 0xfd, 0x0c, + 0x78, 0xe3, 0x4b, 0x0a, 0xe0, 0x9b, 0xe6, 0x30, 0x7c, 0xf3, 0xce, 0x18, 0xf8, 0xc6, 0x0f, 0x5e, + 0xfa, 0x00, 0xce, 0xa7, 0xfd, 0x00, 0xa7, 0x34, 0x0a, 0xe0, 0xf8, 0x23, 0x52, 0x20, 0x9c, 0xed, + 0x68, 0x84, 0x73, 0xf3, 0x4c, 0x84, 0x13, 0x74, 0x92, 0x01, 0x88, 0xb3, 0x19, 0x09, 0x71, 0x6e, + 0x9c, 0x05, 0x71, 0x7c, 0x27, 0x19, 0xc4, 0x38, 0x9f, 0xf6, 0x63, 0x9c, 0xd2, 0x28, 0x8c, 0xe3, + 0x37, 0x4e, 0x80, 0x9c, 0x5a, 0x14, 0xc8, 0xb9, 0x7e, 0x06, 0xc8, 0xf1, 0x3b, 0x2f, 0x80, 0x72, + 0xd4, 0x91, 0x28, 0xe7, 0xbd, 0x31, 0x51, 0x4e, 0x9f, 0xe3, 0x0a, 0xc3, 0x9c, 0x5a, 0x14, 0xcc, + 0xb9, 0x7e, 0x06, 0xcc, 0x09, 0x54, 0xd6, 0xc7, 0x39, 0xdb, 0xd1, 0x38, 0xe7, 0xe6, 0x99, 0x38, + 0xa7, 0x6f, 0x34, 0x09, 0xa0, 0xb3, 0x19, 0x09, 0x74, 0x6e, 0x9c, 0x05, 0x74, 0xfa, 0x26, 0x3e, + 0x1e, 0x1c, 0xfc, 0xc5, 0xf1, 0x91, 0xce, 0x47, 0xe7, 0x47, 0x3a, 0xde, 0x33, 0x63, 0x81, 0x3a, + 0x1b, 0xa9, 0xf4, 0x9b, 0x85, 0xb7, 0x4a, 0x7f, 0x65, 0x1a, 0xa6, 0x6a, 0x5e, 0x2e, 0x8c, 0x5f, + 0x4b, 0xe9, 0x75, 0x0e, 0x58, 0x42, 0xeb, 0x64, 0xc4, 0x52, 0xbf, 0x77, 0xf6, 0x59, 0x7a, 0x83, + 0xe7, 0xbc, 0x71, 0xd6, 0xd7, 0xd8, 0xdf, 0x8c, 0x3e, 0x80, 0x99, 0x9e, 0x83, 0x6d, 0xa5, 0x6b, + 0x1b, 0x96, 0x6d, 0xb8, 0x6c, 0xaf, 0x88, 0x54, 0x2e, 0xbc, 0x3a, 0x5d, 0xca, 0xed, 0x3a, 0xd8, + 0xde, 0xe1, 0x74, 0x39, 0xd7, 0x0b, 0x5c, 0x89, 0xaf, 0x56, 0x4d, 0x8e, 0xff, 0xd5, 0xaa, 0x27, + 0x50, 0xb0, 0xb1, 0xaa, 0x87, 0x22, 0x10, 0x76, 0x80, 0x51, 0xb4, 0xcd, 0xd0, 0x6d, 0x58, 0xa2, + 0x24, 0x3d, 0xc8, 0x68, 0xd6, 0x0e, 0x13, 0xd1, 0x1d, 0xb8, 0xd0, 0x51, 0x8f, 0x69, 0x3e, 0xa5, + 0x22, 0x82, 0x3a, 0x9a, 0x23, 0xc9, 0x3e, 0x08, 0x85, 0x3a, 0xea, 0x31, 0xfd, 0x04, 0x16, 0xbb, + 0x45, 0xbf, 0x59, 0x71, 0x1d, 0xf2, 0xba, 0xe1, 0xb8, 0x86, 0xa9, 0xb9, 0xfc, 0xe8, 0x5a, 0x76, + 0x16, 0xec, 0x8c, 0xa0, 0xb2, 0xf3, 0x69, 0x6f, 0xc3, 0x1c, 0x4f, 0xb7, 0x0f, 0xbc, 0x22, 0x04, + 0x9e, 0xc3, 0x46, 0x6f, 0x78, 0x6f, 0x05, 0x51, 0x05, 0x66, 0x5b, 0xaa, 0x8b, 0x8f, 0xd4, 0x13, + 0x45, 0xec, 0xd5, 0xca, 0xd2, 0x93, 0x1f, 0xdf, 0x78, 0x79, 0xba, 0x34, 0xf3, 0x90, 0xdd, 0x1a, + 0xd8, 0xb2, 0x35, 0xd3, 0x0a, 0xdc, 0xd0, 0xd1, 0x4d, 0x98, 0x55, 0x9d, 0x13, 0x53, 0xa3, 0xea, + 0xc1, 0xa6, 0xd3, 0x73, 0x28, 0xa4, 0x48, 0xcb, 0x79, 0x4a, 0xae, 0x08, 0x2a, 0xba, 0x0a, 0x39, + 0x9e, 0x8b, 0xce, 0xbe, 0xa3, 0x33, 0x4b, 0x9b, 0xca, 0x3f, 0xca, 0x40, 0x3f, 0xa5, 0x83, 0xee, + 0xc3, 0x22, 0x3f, 0xac, 0xfe, 0x48, 0xb5, 0x75, 0x85, 0x6a, 0xdd, 0xb7, 0xcf, 0x02, 0x15, 0x7b, + 0x89, 0x1d, 0x4e, 0x4f, 0x0a, 0x10, 0x55, 0xfb, 0x87, 0x2a, 0x6c, 0xc3, 0x9c, 0xd6, 0x36, 0x3c, + 0x04, 0xc0, 0x5a, 0x3e, 0x37, 0xd4, 0xcf, 0x56, 0x68, 0x59, 0xff, 0x15, 0xe9, 0xac, 0x16, 0x26, + 0xa0, 0x06, 0xd0, 0x83, 0x61, 0x94, 0xae, 0xd5, 0x36, 0xb4, 0x13, 0x1a, 0xfc, 0x87, 0x0f, 0xda, + 0x1e, 0x79, 0xf4, 0xfd, 0x67, 0xaa, 0xe1, 0xee, 0x50, 0x4e, 0x19, 0x8e, 0xbc, 0xff, 0xec, 0x60, + 0xdd, 0x8d, 0x54, 0x3a, 0x57, 0x98, 0xd9, 0x48, 0xa5, 0xf3, 0x85, 0xd9, 0xd2, 0xdf, 0x90, 0x60, + 0xb6, 0xaf, 0x2e, 0xa8, 0x06, 0x17, 0x74, 0x6f, 0xa8, 0x28, 0x7c, 0x2b, 0x93, 0x61, 0x99, 0xfc, + 0xec, 0xf0, 0xf9, 0x57, 0xa7, 0x4b, 0xb3, 0xb4, 0xf4, 0x43, 0xef, 0x96, 0xbc, 0xe0, 0x73, 0xf8, + 0x54, 0xf4, 0x11, 0xe4, 0x59, 0xf8, 0xe8, 0x7d, 0x2c, 0x8e, 0xe6, 0x97, 0x97, 0xe7, 0x5e, 0x9d, + 0x2e, 0xcd, 0xd0, 0x98, 0x51, 0x9c, 0x0a, 0x2c, 0xcf, 0xb4, 0x83, 0x97, 0xa5, 0xbf, 0x2e, 0x41, + 0x2e, 0xb4, 0x39, 0xe8, 0x7e, 0xdf, 0x1b, 0xf4, 0xcb, 0xd1, 0xb8, 0x73, 0x58, 0xd2, 0x5d, 0x9a, + 0xdb, 0xb9, 0xc8, 0x60, 0x5c, 0x1a, 0x8e, 0x5b, 0xe8, 0x2a, 0x8c, 0x48, 0xdb, 0x10, 0x6c, 0x1f, + 0xa7, 0xfe, 0xd6, 0x97, 0x4b, 0x13, 0xa5, 0x9f, 0xa4, 0x60, 0x26, 0xbc, 0x09, 0xa8, 0xde, 0x57, + 0xaf, 0xa8, 0x79, 0x21, 0xc4, 0xb1, 0x32, 0xe2, 0x2c, 0xc4, 0x8c, 0x7f, 0x54, 0x3f, 0xab, 0xe6, + 0xf2, 0x88, 0x3c, 0x81, 0x60, 0x3d, 0x7d, 0xc6, 0xc5, 0xbf, 0x94, 0xf4, 0xfc, 0xeb, 0x0a, 0x4c, + 0xd2, 0xd3, 0x79, 0x78, 0xd5, 0xa2, 0xf6, 0x97, 0x57, 0xc9, 0x7d, 0x99, 0x15, 0x23, 0xfe, 0xb8, + 0xf9, 0x5a, 0x07, 0xde, 0xf9, 0xc3, 0xe0, 0xfc, 0x5f, 0xe5, 0xe3, 0xc7, 0x1e, 0x4e, 0x9e, 0xef, + 0xd8, 0x43, 0xf6, 0x46, 0xbf, 0xdd, 0x66, 0x73, 0x1d, 0xf3, 0x48, 0x53, 0x03, 0x9b, 0xb8, 0xa9, + 0x08, 0xfe, 0xb1, 0xc4, 0x15, 0x99, 0x7f, 0x2c, 0x31, 0x90, 0x05, 0x9a, 0xf7, 0x44, 0x30, 0xf7, + 0xd5, 0x97, 0x90, 0x3a, 0xfd, 0x3a, 0x09, 0xa9, 0x2c, 0x95, 0x99, 0xdb, 0xcb, 0xbf, 0x91, 0x78, + 0x3a, 0xc8, 0x23, 0xcb, 0x3a, 0xe8, 0x79, 0x89, 0xa4, 0x8b, 0xc1, 0x43, 0x07, 0xd3, 0xaf, 0x4e, + 0x97, 0x52, 0xb2, 0x77, 0xea, 0x60, 0x94, 0xbf, 0x4f, 0x7c, 0x35, 0x7f, 0x7f, 0x15, 0x72, 0x5d, + 0x1b, 0xef, 0x61, 0x57, 0xdb, 0x57, 0xcc, 0x5e, 0x87, 0xef, 0x43, 0xc9, 0x0a, 0xda, 0x76, 0xaf, + 0x83, 0xde, 0x81, 0x82, 0x57, 0x84, 0x23, 0x6b, 0xbe, 0x0d, 0x7f, 0x56, 0xd0, 0x39, 0x0e, 0x2f, + 0xfd, 0x0f, 0x09, 0xe6, 0x43, 0x6d, 0xe2, 0x23, 0x61, 0x03, 0xb2, 0xbe, 0x13, 0x70, 0x8a, 0xd2, + 0x39, 0x13, 0x2a, 0x83, 0xcc, 0x48, 0x81, 0x8b, 0xe2, 0xb1, 0xf4, 0x20, 0x7a, 0x5f, 0x6c, 0xe2, + 0x9c, 0x62, 0x2f, 0xf8, 0x72, 0xd6, 0x03, 0x0f, 0xf0, 0x86, 0x46, 0x72, 0xac, 0xa1, 0x51, 0xfa, + 0xb1, 0x04, 0x05, 0xfa, 0x80, 0x07, 0x18, 0xeb, 0xb1, 0xf8, 0x24, 0x91, 0xae, 0x9c, 0x18, 0x7f, + 0xa7, 0x49, 0xe8, 0x43, 0x1a, 0xc9, 0xf0, 0x87, 0x34, 0x4a, 0x5f, 0x4a, 0x90, 0xf7, 0x6a, 0xc8, + 0x3e, 0x42, 0x37, 0xe2, 0x6c, 0xcb, 0xd7, 0xfb, 0xf4, 0x9a, 0x38, 0xae, 0x63, 0xac, 0xef, 0xe2, + 0x05, 0x8f, 0xeb, 0x60, 0x9f, 0x09, 0xfb, 0x3b, 0xc2, 0x72, 0x48, 0x15, 0x2b, 0xfe, 0x51, 0x0c, + 0xaf, 0xb1, 0xe9, 0x46, 0xa6, 0xdf, 0xf2, 0xb4, 0xda, 0x87, 0xec, 0x9c, 0x94, 0xb1, 0x9c, 0x15, + 0xe2, 0x49, 0x50, 0xc0, 0xd7, 0xe0, 0xf4, 0x66, 0x83, 0x7e, 0xe5, 0x93, 0xfd, 0x77, 0x4a, 0x0f, + 0x02, 0x0a, 0xa4, 0x9d, 0x4f, 0xb4, 0x34, 0x96, 0x03, 0x15, 0x5a, 0x62, 0xb6, 0xf2, 0xc7, 0xc1, + 0x9e, 0xa8, 0x1e, 0x12, 0xec, 0x75, 0x0f, 0x92, 0x87, 0x6a, 0x7b, 0x54, 0xf2, 0x57, 0xa8, 0xe7, + 0x64, 0x52, 0x1a, 0x3d, 0x08, 0x9d, 0x60, 0x91, 0x18, 0x8e, 0x13, 0x06, 0x55, 0x1a, 0x3a, 0xe9, + 0xe2, 0xc3, 0xb0, 0xad, 0x8f, 0x7c, 0x7c, 0xd0, 0xe8, 0x3f, 0x4e, 0xfd, 0xf4, 0xcb, 0x25, 0xa9, + 0xf4, 0x21, 0x5c, 0x7e, 0x68, 0x39, 0x8e, 0xd1, 0x25, 0xd8, 0x90, 0x0e, 0x20, 0xe2, 0xbb, 0x3d, + 0x4f, 0x96, 0xee, 0xd2, 0x55, 0x02, 0x93, 0x8d, 0xf8, 0x8c, 0xec, 0x5d, 0x97, 0xfe, 0x99, 0x04, + 0x97, 0x06, 0x39, 0x99, 0x42, 0xa2, 0x36, 0xf5, 0x4d, 0x6b, 0x96, 0x7f, 0xa2, 0xdb, 0xd9, 0x86, + 0x25, 0x8a, 0x93, 0x18, 0x90, 0x3f, 0x53, 0xe9, 0xa8, 0x74, 0xa4, 0xf3, 0x8d, 0xc7, 0x79, 0x4e, + 0xde, 0x62, 0x54, 0x7f, 0xd0, 0xa7, 0xc6, 0x1b, 0xf4, 0x2a, 0xcc, 0x6e, 0x58, 0x86, 0x49, 0x42, + 0x4d, 0xd1, 0xde, 0x6d, 0xb8, 0x40, 0x57, 0x56, 0x7a, 0x5d, 0xb6, 0x2d, 0x44, 0x11, 0x9b, 0xbb, + 0x59, 0xd7, 0x2e, 0x46, 0xd5, 0x99, 0x95, 0x90, 0xe7, 0x3b, 0x86, 0xd9, 0x10, 0x7c, 0x9c, 0x58, + 0xc2, 0x50, 0xf0, 0x1f, 0xc1, 0x1d, 0xe9, 0xbb, 0x00, 0x5a, 0xbb, 0xe7, 0xb8, 0xd8, 0x16, 0x1b, + 0x6b, 0x72, 0x2c, 0x11, 0xbb, 0xc2, 0xa8, 0xf5, 0x75, 0x39, 0xc3, 0x0b, 0xd4, 0x75, 0x74, 0x2d, + 0x7c, 0xd4, 0xc1, 0x64, 0x19, 0x5e, 0x0e, 0x1c, 0x70, 0x70, 0xbb, 0x01, 0xf3, 0x11, 0x33, 0x05, + 0xca, 0x03, 0x04, 0x3e, 0x91, 0xc2, 0x3f, 0xee, 0xba, 0xb6, 0xae, 0xec, 0x6e, 0x57, 0x1e, 0x6f, + 0x6d, 0xd5, 0x9b, 0xcd, 0xea, 0x7a, 0x41, 0x42, 0x05, 0xc8, 0x85, 0x3e, 0xb0, 0x92, 0x60, 0x9f, + 0x7b, 0xbd, 0xfd, 0x67, 0x00, 0xfc, 0xef, 0x36, 0x11, 0x59, 0x9b, 0xd5, 0xcf, 0x95, 0xa7, 0x6b, + 0x8f, 0x76, 0xab, 0x8d, 0xc2, 0x04, 0x42, 0x90, 0x2f, 0xaf, 0x35, 0x2b, 0x35, 0x45, 0xae, 0x36, + 0x76, 0x1e, 0x6f, 0x37, 0xaa, 0xe2, 0x33, 0xb1, 0xb7, 0xd7, 0x21, 0x17, 0x3c, 0xaf, 0x05, 0xcd, + 0xc3, 0x6c, 0xa5, 0x56, 0xad, 0x6c, 0x2a, 0x4f, 0xeb, 0x6b, 0xca, 0x93, 0xdd, 0xea, 0x6e, 0xb5, + 0x30, 0x41, 0xab, 0x46, 0x89, 0x0f, 0x76, 0x1f, 0x3d, 0x2a, 0x48, 0x68, 0x16, 0xb2, 0xec, 0x9a, + 0x7e, 0x8c, 0xa5, 0x90, 0xb8, 0xbd, 0x05, 0xd9, 0xc0, 0x69, 0xad, 0xe4, 0x71, 0x3b, 0xbb, 0x8d, + 0x9a, 0xd2, 0xac, 0x6f, 0x55, 0x1b, 0xcd, 0xb5, 0xad, 0x1d, 0x26, 0x83, 0xd2, 0xd6, 0xca, 0x8f, + 0xe5, 0x66, 0x41, 0xf2, 0xae, 0x9b, 0x8f, 0x77, 0x2b, 0x35, 0xd1, 0x8c, 0x52, 0x2a, 0x9d, 0x2c, + 0x24, 0x6f, 0xff, 0x86, 0x04, 0x97, 0x86, 0x9c, 0x5a, 0x82, 0xb2, 0x30, 0xbd, 0x6b, 0xd2, 0xe3, + 0x2a, 0x0b, 0x13, 0x68, 0x26, 0x70, 0x70, 0x49, 0x41, 0x42, 0x69, 0x76, 0x68, 0x44, 0x21, 0x81, + 0xa6, 0x20, 0xd1, 0xb8, 0x57, 0x48, 0x92, 0x9a, 0x06, 0xce, 0xfd, 0x28, 0xa4, 0x50, 0x86, 0x1f, + 0x5b, 0x50, 0x98, 0x44, 0x39, 0xff, 0xdc, 0x80, 0xc2, 0x14, 0x11, 0xe5, 0xed, 0xbc, 0x2f, 0x4c, + 0xdf, 0xbe, 0x0a, 0x81, 0x5d, 0xcc, 0x08, 0x60, 0xea, 0x91, 0xea, 0x62, 0xc7, 0x2d, 0x4c, 0xa0, + 0x69, 0x48, 0xae, 0xb5, 0xdb, 0x05, 0xe9, 0xee, 0xcf, 0x93, 0x90, 0x16, 0x9f, 0x1b, 0x41, 0x8f, + 0x60, 0x92, 0x2d, 0x8a, 0x2e, 0x0d, 0x8f, 0x39, 0xa9, 0xd5, 0x2e, 0x2e, 0x9f, 0x15, 0x94, 0x96, + 0x26, 0xd0, 0x9f, 0x85, 0x6c, 0x60, 0x56, 0x47, 0x43, 0x17, 0x76, 0x42, 0x91, 0xcc, 0xe2, 0x8d, + 0xb3, 0x8a, 0x79, 0xf2, 0x3f, 0x83, 0x8c, 0xe7, 0x65, 0xd0, 0xb5, 0x51, 0x3e, 0x48, 0xc8, 0x1e, + 0xed, 0xa8, 0x88, 0x1b, 0x29, 0x4d, 0xbc, 0x2f, 0x21, 0x1b, 0xd0, 0xa0, 0x97, 0x41, 0x51, 0xef, + 0xca, 0x87, 0xba, 0xb1, 0xc5, 0xdb, 0x63, 0x95, 0xf6, 0x9f, 0xf9, 0x04, 0x52, 0x64, 0xd8, 0xa2, + 0xa8, 0x38, 0xa4, 0xcf, 0x65, 0x2c, 0x5e, 0x1b, 0x59, 0x46, 0xe8, 0xa7, 0xfc, 0xce, 0x4f, 0xff, + 0xf4, 0xca, 0xc4, 0x4f, 0x5f, 0x5e, 0x91, 0x7e, 0xf6, 0xf2, 0x8a, 0xf4, 0xf3, 0x97, 0x57, 0xa4, + 0xff, 0xf4, 0xf2, 0x8a, 0xf4, 0xd7, 0x7e, 0x71, 0x65, 0xe2, 0x67, 0xbf, 0xb8, 0x32, 0xf1, 0xf3, + 0x5f, 0x5c, 0x99, 0xf8, 0x62, 0x9a, 0x73, 0x3f, 0x9b, 0xa2, 0xdf, 0xf4, 0xbe, 0xf7, 0x7f, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x8f, 0xdb, 0x26, 0x99, 0xf6, 0x7c, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index f9e29232c418..100c290efa9d 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -2196,10 +2196,37 @@ message GossipSubscriptionEvent { Error error = 4; } +// JoinNodeRequest is used to specify to the server node what the client's +// MinimumSupportedVersion is. If it's not compatible with the rest of the +// cluster, the join attempt is refused. +message JoinNodeRequest { + // TODO(irfansharif): Actually make use of this min supported version. + roachpb.Version min_supported_version = 1; +} + +// JoinNodeResponse informs the joining node what the cluster id is and what +// node id was allocated to it. +// +// TODO(irfansharif): Think about the semantics for how store IDs get allocated. +// When letting a node join, we could return back at most (least?) one store ID, +// and entrust the node itself to allocate IDs for the remaining stores. +// +// TODO(irfansharif): We should use this RPC to tell us the right cluster +// version to use (instead of using the minimum possible version and relying on +// gossip to bump to for us). +message JoinNodeResponse { + bytes cluster_id = 1 [(gogoproto.customname) = "ClusterID"]; + int32 node_id = 2 [(gogoproto.customname) = "NodeID"]; +} + // Batch and RangeFeed service implemeted by nodes for KV API requests. service Internal { rpc Batch (BatchRequest) returns (BatchResponse) {} rpc RangeLookup (RangeLookupRequest) returns (RangeLookupResponse) {} rpc RangeFeed (RangeFeedRequest) returns (stream RangeFeedEvent) {} rpc GossipSubscription (GossipSubscriptionRequest) returns (stream GossipSubscriptionEvent) {} + + // Join a bootstrapped cluster. If the target node is itself not part of a + // bootstrapped cluster, an appropriate error is returned. + rpc Join(JoinNodeRequest) returns (JoinNodeResponse) { } } diff --git a/pkg/rpc/context.go b/pkg/rpc/context.go index 7f292f858f3c..9ccc2a569890 100644 --- a/pkg/rpc/context.go +++ b/pkg/rpc/context.go @@ -504,6 +504,13 @@ func (a internalClientAdapter) RangeLookup( return a.InternalServer.RangeLookup(ctx, rl) } +// Join implements the roachpb.InternalClient interface. +func (a internalClientAdapter) Join( + ctx context.Context, req *roachpb.JoinNodeRequest, _ ...grpc.CallOption, +) (*roachpb.JoinNodeResponse, error) { + return a.InternalServer.Join(ctx, req) +} + type respStreamClientAdapter struct { ctx context.Context respC chan interface{} diff --git a/pkg/rpc/context_test.go b/pkg/rpc/context_test.go index f90d68cb81da..9c93120de8d5 100644 --- a/pkg/rpc/context_test.go +++ b/pkg/rpc/context_test.go @@ -162,6 +162,8 @@ func TestHeartbeatCB(t *testing.T) { }) } +var _ roachpb.InternalServer = &internalServer{} + type internalServer struct{} func (*internalServer) Batch( @@ -188,6 +190,12 @@ func (*internalServer) GossipSubscription( panic("unimplemented") } +func (*internalServer) Join( + context.Context, *roachpb.JoinNodeRequest, +) (*roachpb.JoinNodeResponse, error) { + panic("unimplemented") +} + // TestInternalServerAddress verifies that RPCContext uses AdvertiseAddr, not Addr, to // determine whether to apply the local server optimization. // diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go index 0a36ac12024c..136b8063f720 100644 --- a/pkg/server/grpc_server.go +++ b/pkg/server/grpc_server.go @@ -67,7 +67,6 @@ var rpcsAllowedWhileBootstrapping = map[string]struct{}{ "/cockroach.rpc.Heartbeat/Ping": {}, "/cockroach.gossip.Gossip/Gossip": {}, "/cockroach.server.serverpb.Init/Bootstrap": {}, - "/cockroach.server.serverpb.Init/Join": {}, "/cockroach.server.serverpb.Admin/Health": {}, } diff --git a/pkg/server/init.go b/pkg/server/init.go index cab5ec653644..b7d38499b6d1 100644 --- a/pkg/server/init.go +++ b/pkg/server/init.go @@ -13,17 +13,15 @@ package server import ( "context" "fmt" - "strings" + "sync" "time" "github.com/cockroachdb/cockroach/pkg/clusterversion" "github.com/cockroachdb/cockroach/pkg/config/zonepb" "github.com/cockroachdb/cockroach/pkg/gossip" "github.com/cockroachdb/cockroach/pkg/gossip/resolver" - "github.com/cockroachdb/cockroach/pkg/kv" "github.com/cockroachdb/cockroach/pkg/kv/kvserver" "github.com/cockroachdb/cockroach/pkg/roachpb" - "github.com/cockroachdb/cockroach/pkg/rpc" "github.com/cockroachdb/cockroach/pkg/server/serverpb" "github.com/cockroachdb/cockroach/pkg/settings" "github.com/cockroachdb/cockroach/pkg/storage" @@ -42,16 +40,12 @@ import ( // a node that is already part of an initialized cluster. var ErrClusterInitialized = fmt.Errorf("cluster has already been initialized") -// ErrNodeUninitialized is reported when the Join RPC is run against -// a node that itself is uninitialized. -var ErrNodeUninitialized = fmt.Errorf("node has not been initialized") - // ErrJoinRPCUnimplemented is reported when the Join RPC is run against // a node that does not know about the join RPC (i.e. it is running 20.1 or // below). // // TODO(irfansharif): Remove this in 21.1. -var ErrJoinRPCUnimplemented = fmt.Errorf("node does not implement join rpc") +var ErrJoinRPCUnimplemented = fmt.Errorf("node does not implement the Join RPC") // initServer handles the bootstrapping process. It is instantiated early in the // server startup sequence to determine whether a NodeID and ClusterID are @@ -64,9 +58,8 @@ var ErrJoinRPCUnimplemented = fmt.Errorf("node does not implement join rpc") // the Node/ClusterIDs are known. type initServer struct { log.AmbientContext - // rpcContext embeds the fields needed by the RPC subsystem (the init server - // sends out Join RPCs during bootstrap). - rpcContext *rpc.Context + // dialOpts holds onto the dial options used when sending out Join RPCs. + dialOpts []grpc.DialOption // config houses a few configuration options needed by the init server. config initServerCfg @@ -76,61 +69,39 @@ type initServer struct { // bootstrap attempts (and attempts to read whether or not his node has // been bootstrapped). syncutil.Mutex + + // The state of the engines. This tells us whether the node is already + // bootstrapped. The goal of the initServer is to stub this out by the time + // ServeAndWait returns. + inspectState *initDiskState + // If we encounter an unrecognized error during bootstrap, we use this // field to block out future bootstrap attempts. rejectErr error } - // The state of the engines. This tells us whether the node is already - // bootstrapped. The goal of the initServer is to stub this out by the time - // ServeAndWait returns. - // - // TODO(irfansharif): The ownership/access of this is a bit all over the - // place, and can be sanitized. - inspectState *initDiskState - // If this CRDB node was `cockroach init`-ialized, the resulting init state // will be passed through to this channel. bootstrapReqCh chan *initState // If this CRDB node was able to join a bootstrapped cluster, the resulting // init state will be passed through to this channel. joinCh chan *initState - - // We hold onto a *kv.DB object to assign node IDs through the Join RPC. - db *kv.DB - - // resolvers is a list of node addresses that is used to form a connected - // graph/network of CRDB servers. Once a connected graph is constructed, it - // suffices for any node in the network to be initialized (which then - // propagates the cluster ID to the rest of the nodes). - // - // TODO(irfansharif): This last sentence is not yet true. Update this list - // is continually to maintain bidirectional network links. We want it so - // that it suffices to bootstrap n2 after having n2 point to n1 and n1 point - // to itself. n1 can learn about n2's address and attempt to connect back to - // it. We'll need to make sure that each server loops through its join list - // at least once so that the "links" are setup. We don't want get - // insta-bootstrapped and never set up those links. - resolvers []resolver.Resolver } func newInitServer( actx log.AmbientContext, - rpcContext *rpc.Context, + dialOpts []grpc.DialOption, inspectState *initDiskState, - db *kv.DB, config initServerCfg, ) (*initServer, error) { s := &initServer{ AmbientContext: actx, bootstrapReqCh: make(chan *initState, 1), - inspectState: inspectState, joinCh: make(chan *initState, 1), - rpcContext: rpcContext, + dialOpts: dialOpts, config: config, - db: db, - resolvers: config.resolvers(), } + s.mu.inspectState = inspectState return s, nil } @@ -176,11 +147,21 @@ type initState struct { bootstrapped bool } -// NeedsInit returns true if (and only if) none if the engines are initialized. -// In this case, server startup is blocked until either an initialized node -// is reached via Gossip, or this node itself is bootstrapped. +// NeedsInit is like NeedsInitLocked, except it acquires the necessary locks. func (s *initServer) NeedsInit() bool { - return len(s.inspectState.initializedEngines) == 0 + s.mu.Lock() + defer s.mu.Unlock() + + return s.NeedsInitLocked() +} + +// NeedsInitLocked returns true if (and only if) none if the engines are +// initialized. In this case, server startup is blocked until either an +// initialized node is reached via the Join RPC (or Gossip if operating in mixed +// version clusters running v20.1, see ErrJoinUnimplemented), or this node +// itself is bootstrapped. +func (s *initServer) NeedsInitLocked() bool { + return len(s.mu.inspectState.initializedEngines) == 0 } // ServeAndWait waits until the server is ready to bootstrap. In the common case @@ -202,25 +183,27 @@ func (s *initServer) NeedsInit() bool { // necessarily all. This is fine, since initializing additional stores later is // easy. // -// TODO(tbg): give this a KV client and thus initialize at least one store in -// all cases. -// // [1]: In mixed version clusters it waits until Gossip connects (but this is // slated to be removed in 21.1). // [2]: This is not technically true for mixed version clusters where we leave // the node ID unassigned until later, but this too is part of the deprecated // init server behavior that is slated for removal in 21.1. func (s *initServer) ServeAndWait( - ctx context.Context, stopper *stop.Stopper, sv *settings.Values, gossip *gossip.Gossip, + ctx context.Context, stopper *stop.Stopper, sv *settings.Values, g *gossip.Gossip, ) (*initState, error) { // If already bootstrapped, return early. - if !s.NeedsInit() { + s.mu.Lock() + if !s.NeedsInitLocked() { + diskState := *s.mu.inspectState + s.mu.Unlock() + return &initState{ - initDiskState: *s.inspectState, + initDiskState: diskState, joined: false, bootstrapped: false, }, nil } + s.mu.Unlock() log.Info(ctx, "no stores bootstrapped") log.Info(ctx, "awaiting `cockroach init` or join with an already initialized node") @@ -228,9 +211,17 @@ func (s *initServer) ServeAndWait( joinCtx, cancelJoin := context.WithCancel(ctx) defer cancelJoin() + var wg sync.WaitGroup + wg.Add(1) + errCh := make(chan error, 1) if err := stopper.RunTask(joinCtx, "init server: join loop", func(joinCtx context.Context) { stopper.RunWorker(joinCtx, func(joinCtx context.Context) { + defer wg.Done() + + if len(s.config.resolvers) == 0 { + return + } errCh <- s.startJoinLoop(joinCtx, stopper) }) }); err != nil { @@ -246,6 +237,11 @@ func (s *initServer) ServeAndWait( for { select { case state := <-s.bootstrapReqCh: + // Ensure we're draining out the join attempt. We're not going to + // need it anymore. + cancelJoin() + wg.Wait() + // Bootstrap() did its job. At this point, we know that the cluster // version will be the bootstrap version (aka the binary version[1]), // but the version setting does not know yet (it was initialized as @@ -263,19 +259,21 @@ func (s *initServer) ServeAndWait( } log.Infof(ctx, "**** cluster %s has been created", state.clusterID) - log.Infof(ctx, "**** allocated node id %d for self", state.nodeID) + log.Infof(ctx, "allocated node ID: n%d (for self)", state.nodeID) - s.inspectState.clusterID = state.clusterID - s.inspectState.initializedEngines = state.initializedEngines + s.mu.Lock() + s.mu.inspectState.clusterID = state.clusterID + s.mu.inspectState.initializedEngines = state.initializedEngines + s.mu.Unlock() - // Ensure we're draining out join attempt. - cancelJoin() + return state, nil + case state := <-s.joinCh: + // Ensure we're draining out the join attempt. + wg.Wait() if err := <-errCh; err != nil { - log.Errorf(ctx, "**** error draining join thread: %v", err) + log.Fatalf(ctx, "programming error: found non-nil error %v despite successful join attempt", err) } - return state, nil - case state := <-s.joinCh: // TODO(irfansharif): Right now this doesn't actually do anything. // We should have the Join RPC funnel in the right version to use. if err := clusterversion.Initialize(ctx, state.clusterVersion.Version, sv); err != nil { @@ -283,17 +281,17 @@ func (s *initServer) ServeAndWait( } log.Infof(ctx, "**** joined cluster %s through join rpc", state.clusterID) - log.Infof(ctx, "**** received node id %d for self", state.nodeID) + log.Infof(ctx, "received node ID %d", state.nodeID) - s.inspectState.clusterID = state.clusterID - // Ensure we're draining out join attempt. - cancelJoin() - if err := <-errCh; err != nil { - log.Errorf(ctx, "**** error draining join thread: %v", err) - } + s.mu.Lock() + s.mu.inspectState.clusterID = state.clusterID + s.mu.Unlock() return state, nil case <-gossipConnectedCh: + // Ensure we're draining out the join attempt. + wg.Wait() + // We're in a mixed-version cluster, so we retain the legacy // behavior of retrieving the cluster ID and deferring node ID // allocation (happens in (*Node).start). @@ -305,28 +303,38 @@ func (s *initServer) ServeAndWait( // don't have a NodeID yet (and the cluster version is the minimum we // support). Commence startup; the Node will realize it's short a // NodeID and will request one. - clusterID, err := gossip.GetClusterID() + clusterID, err := g.GetClusterID() if err != nil { return nil, err } - s.inspectState.clusterID = clusterID + s.mu.Lock() + s.mu.inspectState.clusterID = clusterID + diskState := *s.mu.inspectState + s.mu.Unlock() + state := &initState{ - initDiskState: *s.inspectState, + initDiskState: diskState, joined: true, bootstrapped: false, } log.Infof(ctx, "**** joined cluster %s through gossip (legacy behavior)", state.clusterID) return state, nil case err := <-errCh: + // Ensure we're draining out the join attempt. + wg.Wait() + if errors.Is(err, ErrJoinRPCUnimplemented) { // We're in a mixed-version cluster, we're going to wire up the // gossip connectivity mechanism to discover the cluster ID. - gossipConnectedCh = gossip.Connected + gossipConnectedCh = g.Connected continue } - log.Errorf(ctx, "error in attempting to join: %v", err) - return nil, err + if err != nil { + log.Errorf(ctx, "error attempting to join: %v", err) + return nil, err + } + return nil, nil case <-stopper.ShouldQuiesce(): return nil, stop.ErrUnavailable } @@ -353,7 +361,7 @@ func (s *initServer) Bootstrap( s.mu.Lock() defer s.mu.Unlock() - if !s.NeedsInit() { + if !s.NeedsInitLocked() { return nil, ErrClusterInitialized } @@ -361,7 +369,7 @@ func (s *initServer) Bootstrap( return nil, s.mu.rejectErr } - state, err := s.tryBootstrap(ctx) + state, err := s.tryBootstrapLocked(ctx) if err != nil { log.Errorf(ctx, "bootstrap: %v", err) s.mu.rejectErr = errInternalBootstrapError @@ -372,48 +380,10 @@ func (s *initServer) Bootstrap( return &serverpb.BootstrapResponse{}, nil } -// Join implements the serverpb.Init service. This is the "connectivity" API; -// individual CRDB servers are passed in a --join list and the join targets are -// addressed through this API. -// -// TODO(irfansharif): Perhaps we could opportunistically create a liveness -// record here so as to no longer have to worry about the liveness record not -// existing for a given node. -func (s *initServer) Join( - ctx context.Context, _ *serverpb.JoinNodeRequest, -) (*serverpb.JoinNodeResponse, error) { - s.mu.Lock() - defer s.mu.Unlock() - - if s.NeedsInit() { - // Server has not been bootstrapped yet - return nil, ErrNodeUninitialized - } - - ctxWithSpan, span := s.AnnotateCtxWithSpan(ctx, "alloc-node-id") - defer span.Finish() - - nodeID, err := allocateNodeID(ctxWithSpan, s.db) - if err != nil { - return nil, err - } - - log.Infof(ctxWithSpan, "**** allocated new node id %d", nodeID) - return &serverpb.JoinNodeResponse{ - ClusterID: s.inspectState.clusterID.GetBytes(), - NodeID: int32(nodeID), - }, nil -} - func (s *initServer) startJoinLoop(ctx context.Context, stopper *stop.Stopper) error { - dialOpts, err := s.rpcContext.GRPCDialOptions() - if err != nil { - return err - } - var conns []*grpc.ClientConn - for _, r := range s.resolvers { - conn, err := grpc.DialContext(ctx, r.Addr(), dialOpts...) + for _, r := range s.config.resolvers { + conn, err := grpc.DialContext(ctx, r.Addr(), s.dialOpts...) if err != nil { return err } @@ -438,13 +408,20 @@ func (s *initServer) startJoinLoop(ctx context.Context, stopper *stop.Stopper) e for idx := 0; ; idx = (idx + 1) % len(conns) { select { case <-tickChan: - success, err := s.attemptJoin(ctx, s.resolvers[idx].Addr(), conns[idx]) + err := s.attemptJoin(ctx, s.config.resolvers[idx].Addr(), conns[idx]) if err != nil { + if grpcutil.ConnectionRefusedRe.MatchString(err.Error()) { + log.Warningf(ctx, "unable to connect to %s, will retry", s.config.resolvers[idx].Addr()) + continue + } + + if IsWaitingForInit(err) { + log.Warningf(ctx, "%s is itself waiting for init, will retry", s.config.resolvers[idx].Addr()) + continue + } + return err } - if !success { - continue - } return nil case <-ctx.Done(): return nil @@ -454,105 +431,104 @@ func (s *initServer) startJoinLoop(ctx context.Context, stopper *stop.Stopper) e } } -func (s *initServer) attemptJoin( - ctx context.Context, addr string, conn *grpc.ClientConn, -) (success bool, err error) { - initClient := serverpb.NewInitClient(conn) - req := &serverpb.JoinNodeRequest{ - MinSupportedVersion: &clusterversion.TestingBinaryMinSupportedVersion, - Addr: s.config.advertiseAddr(), +func (s *initServer) attemptJoin(ctx context.Context, addr string, conn *grpc.ClientConn) error { + minSupportedVersion := s.config.binaryMinSupportedVersion + req := &roachpb.JoinNodeRequest{ + MinSupportedVersion: &minSupportedVersion, } + + initClient := roachpb.NewInternalClient(conn) resp, err := initClient.Join(ctx, req) if err != nil { - if strings.Contains(err.Error(), ErrNodeUninitialized.Error()) { - log.Warningf(ctx, "node running on %s is itself uninitialized, retrying..", addr) - return false, nil - } - - if grpcutil.ConnectionRefusedRe.MatchString(err.Error()) { - log.Warningf(ctx, "unable to connect to %s, retrying..", addr) - return false, nil - } - - // If the target node does not implement the join RPC, we're in a + // If the target node does not implement the Join RPC, we're in a // mixed-version cluster and are talking to a v20.1 node. We error out // so the init server knows to fall back on the gossip-based discovery // mechanism for the clusterID. - if code := status.Code(errors.Cause(err)); code == codes.Unimplemented && - strings.Contains(err.Error(), `unknown method Join`) { + if code := status.Code(errors.Cause(err)); code == codes.Unimplemented { log.Warningf(ctx, "%s running an older version", addr) - return false, ErrJoinRPCUnimplemented + return ErrJoinRPCUnimplemented } - return false, err + return err } clusterID, err := uuid.FromBytes(resp.ClusterID) if err != nil { - return false, err + return err } - s.inspectState.clusterID = clusterID - s.inspectState.nodeID = roachpb.NodeID(resp.NodeID) + s.mu.Lock() + s.mu.inspectState.clusterID = clusterID + s.mu.inspectState.nodeID = roachpb.NodeID(resp.NodeID) + diskState := *s.mu.inspectState + s.mu.Unlock() + state := &initState{ - initDiskState: *s.inspectState, + initDiskState: diskState, joined: true, bootstrapped: false, } s.joinCh <- state - return true, nil + return nil } -func (s *initServer) tryBootstrap(ctx context.Context) (*initState, error) { - cv := clusterversion.ClusterVersion{Version: s.config.bootstrapVersion()} - if err := kvserver.WriteClusterVersionToEngines(ctx, s.inspectState.newEngines, cv); err != nil { +func (s *initServer) tryBootstrapLocked(ctx context.Context) (*initState, error) { + cv := clusterversion.ClusterVersion{Version: s.config.bootstrapVersion} + if err := kvserver.WriteClusterVersionToEngines(ctx, s.mu.inspectState.newEngines, cv); err != nil { return nil, err } return bootstrapCluster( - ctx, s.inspectState.newEngines, s.config.defaultZoneConfig(), s.config.defaultSystemZoneConfig(), + ctx, s.mu.inspectState.newEngines, &s.config.defaultZoneConfig, &s.config.defaultSystemZoneConfig, ) } // DiskClusterVersion returns the cluster version synthesized from disk. This // is always non-zero since it falls back to the BinaryMinSupportedVersion. func (s *initServer) DiskClusterVersion() clusterversion.ClusterVersion { - return s.inspectState.clusterVersion + s.mu.Lock() + defer s.mu.Unlock() + + return s.mu.inspectState.clusterVersion } // initServerCfg is a thin wrapper around the server Config object, exposing // only the fields needed by the init server. type initServerCfg struct { - wrapped Config + advertiseAddr string + binaryMinSupportedVersion roachpb.Version + bootstrapVersion roachpb.Version + defaultSystemZoneConfig zonepb.ZoneConfig + defaultZoneConfig zonepb.ZoneConfig + + // resolvers is a list of node addresses (populated using --join addresses) + // that is used to form a connected graph/network of CRDB servers. Once a + // strongly connected graph is constructed, it suffices for any node in the + // network to be initialized (which would then then propagates the cluster + // ID to the rest of the nodes). + // + // NB: Not that this does not work for weakly connected graphs. Let's + // consider a network where n3 points only to n2 (and not vice versa). If + // n2 is `cockroach init`-ialized, n3 will learn about it. The reverse will + // not be true. + resolvers []resolver.Resolver } -// bootstrapVersion returns the version at which to bootstrap the cluster in -// Bootstrap(). -func (c *initServerCfg) bootstrapVersion() roachpb.Version { - bootstrapVersion := c.wrapped.Settings.Version.BinaryVersion() - if knobs := c.wrapped.TestingKnobs.Server; knobs != nil { +func newInitServerConfig(cfg Config) initServerCfg { + bootstrapVersion := cfg.Settings.Version.BinaryVersion() + if knobs := cfg.TestingKnobs.Server; knobs != nil { if ov := knobs.(*TestingKnobs).BootstrapVersionOverride; ov != (roachpb.Version{}) { bootstrapVersion = ov } } - return bootstrapVersion -} - -// defaultZoneConfig returns the zone config to bootstrap with. -func (c *initServerCfg) defaultZoneConfig() *zonepb.ZoneConfig { - return &c.wrapped.DefaultZoneConfig -} - -// defaultSystemZoneConfig returns the zone config to bootstrap system ranges -// with. -func (c *initServerCfg) defaultSystemZoneConfig() *zonepb.ZoneConfig { - return &c.wrapped.DefaultSystemZoneConfig -} - -func (c *initServerCfg) resolvers() []resolver.Resolver { - return c.wrapped.FilterGossipBootstrapResolvers(context.Background()) -} - -func (c *initServerCfg) advertiseAddr() string { - return c.wrapped.AdvertiseAddr + binaryMinSupportedVersion := cfg.Settings.Version.BinaryMinSupportedVersion() + resolvers := cfg.FilterGossipBootstrapResolvers(context.Background()) + return initServerCfg{ + advertiseAddr: cfg.AdvertiseAddr, + binaryMinSupportedVersion: binaryMinSupportedVersion, + bootstrapVersion: bootstrapVersion, + defaultSystemZoneConfig: cfg.DefaultSystemZoneConfig, + defaultZoneConfig: cfg.DefaultZoneConfig, + resolvers: resolvers, + } } diff --git a/pkg/server/node.go b/pkg/server/node.go index bbfb0037c0f1..f339c2b6b04c 100644 --- a/pkg/server/node.go +++ b/pkg/server/node.go @@ -163,6 +163,8 @@ type Node struct { perReplicaServer kvserver.Server } +var _ roachpb.InternalServer = &Node{} + // allocateNodeID increments the node id generator key to allocate // a new, unique node id. func allocateNodeID(ctx context.Context, db *kv.DB) (roachpb.NodeID, error) { @@ -1097,3 +1099,28 @@ func (n *Node) GossipSubscription( } } } + +// Join implements the roachpb.InternalServer service. This is the +// "connectivity" API; individual CRDB servers are passed in a --join list and +// the join targets are addressed through this API. +// +// TODO(irfansharif): Perhaps we could opportunistically create a liveness +// record here so as to no longer have to worry about the liveness record not +// existing for a given node. +func (n *Node) Join( + ctx context.Context, _ *roachpb.JoinNodeRequest, +) (*roachpb.JoinNodeResponse, error) { + ctxWithSpan, span := n.AnnotateCtxWithSpan(ctx, "alloc-node-id") + defer span.Finish() + + nodeID, err := allocateNodeID(ctxWithSpan, n.storeCfg.DB) + if err != nil { + return nil, err + } + + log.Infof(ctxWithSpan, "allocated node ID: n%d", nodeID) + return &roachpb.JoinNodeResponse{ + ClusterID: n.clusterID.Get().GetBytes(), + NodeID: int32(nodeID), + }, nil +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 5d972b6897c1..2f81304e6162 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -1068,7 +1068,7 @@ func (s *Server) Start(ctx context.Context) error { // Set up the init server. We have to do this relatively early because we // can't call RegisterInitServer() after `grpc.Serve`, which is called in // startRPCServer (and for the loopback grpc-gw connection). - initConfig := initServerCfg{wrapped: s.cfg} + initConfig := newInitServerConfig(s.cfg) inspectState, err := inspectEngines( ctx, s.engines, @@ -1079,7 +1079,14 @@ func (s *Server) Start(ctx context.Context) error { return err } - initServer, err := newInitServer(s.cfg.AmbientCtx, s.rpcContext, inspectState, s.db, initConfig) + // Eschew `(*rpc.Context).GRPCDial` to avoid unnecessary moving parts on the + // uniquely in-process connection. + dialOpts, err := s.rpcContext.GRPCDialOptions() + if err != nil { + return err + } + + initServer, err := newInitServer(s.cfg.AmbientCtx, dialOpts, inspectState, initConfig) if err != nil { return err } @@ -1216,12 +1223,6 @@ func (s *Server) Start(ctx context.Context) error { netutil.FatalIfUnexpected(s.grpc.Serve(loopback)) }) - // Eschew `(*rpc.Context).GRPCDial` to avoid unnecessary moving parts on the - // uniquely in-process connection. - dialOpts, err := s.rpcContext.GRPCDialOptions() - if err != nil { - return err - } conn, err := grpc.DialContext(ctx, s.cfg.AdvertiseAddr, append( dialOpts, grpc.WithContextDialer(func(ctx context.Context, _ string) (net.Conn, error) { @@ -1279,6 +1280,15 @@ func (s *Server) Start(ctx context.Context) error { advSQLAddrU := util.NewUnresolvedAddr("tcp", s.cfg.SQLAdvertiseAddr) advTenantAddrU := util.NewUnresolvedAddr("tcp", s.cfg.TenantAdvertiseAddr) + // TODO(irfansharif): As of 21.1, we will no longer need gossip to start + // before the init server. We need it in 20.2 for backwards compatibility + // with 20.1 servers that use gossip connectivity to distribute the cluster + // ID. In 20.2 we introduced a dedicated Join RPC to do exactly this, and so + // we can defer gossip start to after bootstrap/initialization. + // + // TODO(irfansharif): Can this be gated behind a version flag? So we only + // actually start gossip pre-init server when we find out that we need to? + s.gossip.Start(advAddrU, filtered) log.Event(ctx, "started gossip") @@ -1361,7 +1371,7 @@ func (s *Server) Start(ctx context.Context) error { // demonstrate that we're not doing anything functional here (and to // prevent bugs during further refactors). if s.rpcContext.ClusterID.Get() == uuid.Nil { - return errors.New("programming error: expected cluster id to be populated in rpc context") + return errors.AssertionFailedf("expected cluster ID to be populated in rpc context") } unregister := s.gossip.RegisterCallback(gossip.KeyClusterID, func(string, roachpb.Value) { clusterID, err := s.gossip.GetClusterID() @@ -1380,7 +1390,7 @@ func (s *Server) Start(ctx context.Context) error { // but this gossip only happens once the first range has a leaseholder, i.e. // when a quorum of nodes has gone fully operational. _ = s.stopper.RunAsyncTask(ctx, "connect-gossip", func(ctx context.Context) { - log.Infof(ctx, "connecting to gossip network to verify cluster id %q", state.clusterID) + log.Infof(ctx, "connecting to gossip network to verify cluster ID %q", state.clusterID) select { case <-s.gossip.Connected: log.Infof(ctx, "node connected via gossip") diff --git a/pkg/server/serverpb/init.pb.go b/pkg/server/serverpb/init.pb.go index fbc41f4dd300..88c4f7e3fe62 100644 --- a/pkg/server/serverpb/init.pb.go +++ b/pkg/server/serverpb/init.pb.go @@ -6,7 +6,6 @@ package serverpb import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import roachpb "github.com/cockroachdb/cockroach/pkg/roachpb" import ( context "context" @@ -33,7 +32,7 @@ func (m *BootstrapRequest) Reset() { *m = BootstrapRequest{} } func (m *BootstrapRequest) String() string { return proto.CompactTextString(m) } func (*BootstrapRequest) ProtoMessage() {} func (*BootstrapRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_init_5ab0d48daa4548e1, []int{0} + return fileDescriptor_init_2eff848c5ed5566a, []int{0} } func (m *BootstrapRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -65,7 +64,7 @@ func (m *BootstrapResponse) Reset() { *m = BootstrapResponse{} } func (m *BootstrapResponse) String() string { return proto.CompactTextString(m) } func (*BootstrapResponse) ProtoMessage() {} func (*BootstrapResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_init_5ab0d48daa4548e1, []int{1} + return fileDescriptor_init_2eff848c5ed5566a, []int{1} } func (m *BootstrapResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -90,93 +89,9 @@ func (m *BootstrapResponse) XXX_DiscardUnknown() { var xxx_messageInfo_BootstrapResponse proto.InternalMessageInfo -// JoinNodeRequest is used to specify to the server node what the client's -// MinimumSupportedVersion is. If it's not compatible with the rest of the -// cluster, the join attempt is refused. -type JoinNodeRequest struct { - MinSupportedVersion *roachpb.Version `protobuf:"bytes,1,opt,name=min_supported_version,json=minSupportedVersion,proto3" json:"min_supported_version,omitempty"` - // TODO(irfansharif): Use this field to provide the client's address so that - // the server is able to reach back to it, setting up bidirectional network - // links. - Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` -} - -func (m *JoinNodeRequest) Reset() { *m = JoinNodeRequest{} } -func (m *JoinNodeRequest) String() string { return proto.CompactTextString(m) } -func (*JoinNodeRequest) ProtoMessage() {} -func (*JoinNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_init_5ab0d48daa4548e1, []int{2} -} -func (m *JoinNodeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JoinNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (dst *JoinNodeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinNodeRequest.Merge(dst, src) -} -func (m *JoinNodeRequest) XXX_Size() int { - return m.Size() -} -func (m *JoinNodeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_JoinNodeRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_JoinNodeRequest proto.InternalMessageInfo - -// JoinNodeResponse informs the joining node what the cluster id is, and what -// node id was allocated to it. -// -// TODO(irfansharif): We should use this RPC to tell us the right cluster -// version to use (instead of using the minimum possible version and relying on -// gossip to bump to for us). -// TODO(irfansharif): We should use this RPC to also generate store IDs, instead -// of having each node do it for itself after being handed out a node ID. -type JoinNodeResponse struct { - ClusterID []byte `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` - NodeID int32 `protobuf:"varint,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` -} - -func (m *JoinNodeResponse) Reset() { *m = JoinNodeResponse{} } -func (m *JoinNodeResponse) String() string { return proto.CompactTextString(m) } -func (*JoinNodeResponse) ProtoMessage() {} -func (*JoinNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_init_5ab0d48daa4548e1, []int{3} -} -func (m *JoinNodeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JoinNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (dst *JoinNodeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinNodeResponse.Merge(dst, src) -} -func (m *JoinNodeResponse) XXX_Size() int { - return m.Size() -} -func (m *JoinNodeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_JoinNodeResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_JoinNodeResponse proto.InternalMessageInfo - func init() { proto.RegisterType((*BootstrapRequest)(nil), "cockroach.server.serverpb.BootstrapRequest") proto.RegisterType((*BootstrapResponse)(nil), "cockroach.server.serverpb.BootstrapResponse") - proto.RegisterType((*JoinNodeRequest)(nil), "cockroach.server.serverpb.JoinNodeRequest") - proto.RegisterType((*JoinNodeResponse)(nil), "cockroach.server.serverpb.JoinNodeResponse") } // Reference imports to suppress errors if they are not otherwise used. @@ -191,12 +106,11 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type InitClient interface { - // Bootstrap an uninitialized cluster (inter-node links set up through the - // --join flags). + // Bootstrap bootstraps an uninitialized cluster. This is primarily driven by + // `cockroach init`, and ends up creating a cluster ID, generates for the + // target node a node ID of 1, and spins up machinery that would subsequently + // let other connected nodes to acquire node IDs of their own. Bootstrap(ctx context.Context, in *BootstrapRequest, opts ...grpc.CallOption) (*BootstrapResponse, error) - // Join a bootstrapped cluster. If the target node is itself not part of a - // bootstrapped cluster, an appropriate error is returned. - Join(ctx context.Context, in *JoinNodeRequest, opts ...grpc.CallOption) (*JoinNodeResponse, error) } type initClient struct { @@ -216,23 +130,13 @@ func (c *initClient) Bootstrap(ctx context.Context, in *BootstrapRequest, opts . return out, nil } -func (c *initClient) Join(ctx context.Context, in *JoinNodeRequest, opts ...grpc.CallOption) (*JoinNodeResponse, error) { - out := new(JoinNodeResponse) - err := c.cc.Invoke(ctx, "/cockroach.server.serverpb.Init/Join", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // InitServer is the server API for Init service. type InitServer interface { - // Bootstrap an uninitialized cluster (inter-node links set up through the - // --join flags). + // Bootstrap bootstraps an uninitialized cluster. This is primarily driven by + // `cockroach init`, and ends up creating a cluster ID, generates for the + // target node a node ID of 1, and spins up machinery that would subsequently + // let other connected nodes to acquire node IDs of their own. Bootstrap(context.Context, *BootstrapRequest) (*BootstrapResponse, error) - // Join a bootstrapped cluster. If the target node is itself not part of a - // bootstrapped cluster, an appropriate error is returned. - Join(context.Context, *JoinNodeRequest) (*JoinNodeResponse, error) } func RegisterInitServer(s *grpc.Server, srv InitServer) { @@ -257,24 +161,6 @@ func _Init_Bootstrap_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } -func _Init_Join_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(JoinNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(InitServer).Join(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cockroach.server.serverpb.Init/Join", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(InitServer).Join(ctx, req.(*JoinNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - var _Init_serviceDesc = grpc.ServiceDesc{ ServiceName: "cockroach.server.serverpb.Init", HandlerType: (*InitServer)(nil), @@ -283,10 +169,6 @@ var _Init_serviceDesc = grpc.ServiceDesc{ MethodName: "Bootstrap", Handler: _Init_Bootstrap_Handler, }, - { - MethodName: "Join", - Handler: _Init_Join_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "server/serverpb/init.proto", @@ -328,69 +210,6 @@ func (m *BootstrapResponse) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *JoinNodeRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *JoinNodeRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MinSupportedVersion != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintInit(dAtA, i, uint64(m.MinSupportedVersion.Size())) - n1, err := m.MinSupportedVersion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.Addr) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintInit(dAtA, i, uint64(len(m.Addr))) - i += copy(dAtA[i:], m.Addr) - } - return i, nil -} - -func (m *JoinNodeResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *JoinNodeResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterID) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintInit(dAtA, i, uint64(len(m.ClusterID))) - i += copy(dAtA[i:], m.ClusterID) - } - if m.NodeID != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintInit(dAtA, i, uint64(m.NodeID)) - } - return i, nil -} - func encodeVarintInit(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -418,39 +237,6 @@ func (m *BootstrapResponse) Size() (n int) { return n } -func (m *JoinNodeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.MinSupportedVersion != nil { - l = m.MinSupportedVersion.Size() - n += 1 + l + sovInit(uint64(l)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovInit(uint64(l)) - } - return n -} - -func (m *JoinNodeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterID) - if l > 0 { - n += 1 + l + sovInit(uint64(l)) - } - if m.NodeID != 0 { - n += 1 + sovInit(uint64(m.NodeID)) - } - return n -} - func sovInit(x uint64) (n int) { for { n++ @@ -564,218 +350,6 @@ func (m *BootstrapResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *JoinNodeRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: JoinNodeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JoinNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinSupportedVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthInit - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MinSupportedVersion == nil { - m.MinSupportedVersion = &roachpb.Version{} - } - if err := m.MinSupportedVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthInit - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipInit(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthInit - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JoinNodeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: JoinNodeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JoinNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthInit - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterID = append(m.ClusterID[:0], dAtA[iNdEx:postIndex]...) - if m.ClusterID == nil { - m.ClusterID = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - m.NodeID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NodeID |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipInit(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthInit - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipInit(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -881,31 +455,20 @@ var ( ErrIntOverflowInit = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("server/serverpb/init.proto", fileDescriptor_init_5ab0d48daa4548e1) } - -var fileDescriptor_init_5ab0d48daa4548e1 = []byte{ - // 366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x6e, 0xe2, 0x30, - 0x18, 0xc5, 0xe3, 0x11, 0xc3, 0x4c, 0x3c, 0x33, 0x1a, 0x6a, 0xda, 0x8a, 0x66, 0x61, 0x50, 0xba, - 0x41, 0x80, 0x12, 0x89, 0xde, 0x20, 0x65, 0x93, 0x2e, 0x58, 0xa4, 0x52, 0x17, 0xdd, 0xa0, 0x10, - 0x5b, 0x60, 0xb5, 0xd8, 0xa9, 0xed, 0x70, 0x8e, 0x1e, 0x8b, 0x25, 0x52, 0x37, 0xac, 0x50, 0x1b, - 0x2e, 0x52, 0xe5, 0x5f, 0xa9, 0x90, 0x5a, 0xb1, 0x8a, 0xf5, 0xfc, 0x7b, 0x7e, 0xdf, 0xf7, 0x14, - 0x68, 0x29, 0x2a, 0x97, 0x54, 0xba, 0xc5, 0x27, 0x9e, 0xba, 0x8c, 0x33, 0xed, 0xc4, 0x52, 0x68, - 0x81, 0x2e, 0x22, 0x11, 0x3d, 0x48, 0x11, 0x46, 0x73, 0xa7, 0xb8, 0x76, 0x2a, 0xca, 0x3a, 0x9d, - 0x89, 0x99, 0xc8, 0x29, 0x37, 0x3b, 0x15, 0x06, 0xeb, 0x3c, 0x87, 0xe3, 0xa9, 0xbb, 0xa0, 0x3a, - 0x24, 0xa1, 0x0e, 0x0b, 0xdd, 0x46, 0xb0, 0xe1, 0x09, 0xa1, 0x95, 0x96, 0x61, 0x1c, 0xd0, 0xa7, - 0x84, 0x2a, 0x6d, 0x37, 0xe1, 0xc9, 0x27, 0x4d, 0xc5, 0x82, 0x2b, 0x6a, 0x27, 0xf0, 0xff, 0x8d, - 0x60, 0x7c, 0x2c, 0x08, 0x2d, 0x39, 0x34, 0x86, 0x67, 0x0b, 0xc6, 0x27, 0x2a, 0x89, 0x63, 0x21, - 0x35, 0x25, 0x93, 0x25, 0x95, 0x8a, 0x09, 0xde, 0x02, 0x1d, 0xd0, 0xfd, 0x33, 0xb4, 0x9c, 0xfd, - 0x90, 0x65, 0xba, 0x73, 0x57, 0x10, 0x41, 0x73, 0xc1, 0xf8, 0x6d, 0xe5, 0x2b, 0x45, 0x84, 0x60, - 0x2d, 0x24, 0x44, 0xb6, 0x7e, 0x74, 0x40, 0xd7, 0x0c, 0xf2, 0xb3, 0x4d, 0x61, 0x63, 0x1f, 0x5b, - 0x8c, 0x82, 0x06, 0x10, 0x46, 0x8f, 0x89, 0xd2, 0x54, 0x4e, 0x18, 0xc9, 0xc3, 0xfe, 0x7a, 0xff, - 0xd2, 0x6d, 0xdb, 0xbc, 0x2e, 0x54, 0x7f, 0x14, 0x98, 0x25, 0xe0, 0x13, 0x74, 0x09, 0x7f, 0x71, - 0x41, 0x68, 0x86, 0x66, 0x0f, 0xff, 0xf4, 0x60, 0xba, 0x6d, 0xd7, 0xb3, 0x07, 0xfd, 0x51, 0x50, - 0xcf, 0xae, 0x7c, 0x32, 0x7c, 0x01, 0xb0, 0xe6, 0x73, 0xa6, 0xd1, 0x1c, 0x9a, 0x1f, 0xbb, 0xa3, - 0xbe, 0xf3, 0x65, 0xcd, 0xce, 0x61, 0x6b, 0xd6, 0xe0, 0x38, 0xb8, 0xac, 0xd3, 0x40, 0x21, 0xac, - 0x65, 0x9b, 0xa1, 0xde, 0x37, 0xbe, 0x83, 0xc6, 0xad, 0xfe, 0x51, 0x6c, 0x15, 0xe1, 0xf5, 0x56, - 0x6f, 0xd8, 0x58, 0xa5, 0x18, 0xac, 0x53, 0x0c, 0x36, 0x29, 0x06, 0xaf, 0x29, 0x06, 0xcf, 0x3b, - 0x6c, 0xac, 0x77, 0xd8, 0xd8, 0xec, 0xb0, 0x71, 0xff, 0xbb, 0xb2, 0x4f, 0xeb, 0xf9, 0xff, 0x70, - 0xf5, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x53, 0x52, 0x9e, 0x7f, 0x76, 0x02, 0x00, 0x00, +func init() { proto.RegisterFile("server/serverpb/init.proto", fileDescriptor_init_2eff848c5ed5566a) } + +var fileDescriptor_init_2eff848c5ed5566a = []byte{ + // 186 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2a, 0x4e, 0x2d, 0x2a, + 0x4b, 0x2d, 0xd2, 0x87, 0x50, 0x05, 0x49, 0xfa, 0x99, 0x79, 0x99, 0x25, 0x7a, 0x05, 0x45, 0xf9, + 0x25, 0xf9, 0x42, 0x92, 0xc9, 0xf9, 0xc9, 0xd9, 0x45, 0xf9, 0x89, 0xc9, 0x19, 0x7a, 0x10, 0x69, + 0x3d, 0x98, 0x2a, 0x29, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, 0xb0, 0x2a, 0x7d, 0x10, 0x0b, 0xa2, 0x41, + 0x49, 0x88, 0x4b, 0xc0, 0x29, 0x3f, 0xbf, 0xa4, 0xb8, 0xa4, 0x28, 0xb1, 0x20, 0x28, 0xb5, 0xb0, + 0x34, 0xb5, 0xb8, 0x44, 0x49, 0x98, 0x4b, 0x10, 0x49, 0xac, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0xd5, + 0xa8, 0x80, 0x8b, 0xc5, 0x33, 0x2f, 0xb3, 0x44, 0x28, 0x83, 0x8b, 0x13, 0x2e, 0x29, 0xa4, 0xad, + 0x87, 0xd3, 0x3e, 0x3d, 0x74, 0x63, 0xa5, 0x74, 0x88, 0x53, 0x0c, 0xb1, 0x4f, 0x89, 0xc1, 0x49, + 0xeb, 0xc4, 0x43, 0x39, 0x86, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0xbc, 0xf1, 0x48, + 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, + 0x58, 0x8e, 0x21, 0x8a, 0x03, 0xa6, 0x3f, 0x89, 0x0d, 0xec, 0x1b, 0x63, 0x40, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xf0, 0x1c, 0x8a, 0xe8, 0x1c, 0x01, 0x00, 0x00, } diff --git a/pkg/server/serverpb/init.proto b/pkg/server/serverpb/init.proto index c963f9b5cfe1..2fcff09057df 100644 --- a/pkg/server/serverpb/init.proto +++ b/pkg/server/serverpb/init.proto @@ -13,42 +13,14 @@ package cockroach.server.serverpb; option go_package = "serverpb"; import "gogoproto/gogo.proto"; -import "roachpb/metadata.proto"; message BootstrapRequest { } message BootstrapResponse { } -// JoinNodeRequest is used to specify to the server node what the client's -// MinimumSupportedVersion is. If it's not compatible with the rest of the -// cluster, the join attempt is refused. -message JoinNodeRequest { - roachpb.Version min_supported_version = 1; - - // TODO(irfansharif): Use this field to provide the client's address so that - // the server is able to reach back to it, setting up bidirectional network - // links. - string addr = 2; -} - -// JoinNodeResponse informs the joining node what the cluster id is, and what -// node id was allocated to it. -// -// TODO(irfansharif): We should use this RPC to tell us the right cluster -// version to use (instead of using the minimum possible version and relying on -// gossip to bump to for us). -// TODO(irfansharif): We should use this RPC to also generate store IDs, instead -// of having each node do it for itself after being handed out a node ID. -message JoinNodeResponse { - bytes cluster_id = 1 [(gogoproto.customname) = "ClusterID"]; - int32 node_id = 2 [(gogoproto.customname) = "NodeID"]; -} - service Init { - // Bootstrap an uninitialized cluster (inter-node links set up through the - // --join flags). + // Bootstrap bootstraps an uninitialized cluster. This is primarily driven by + // `cockroach init`, and ends up creating a cluster ID, generates for the + // target node a node ID of 1, and spins up machinery that would subsequently + // let other connected nodes to acquire node IDs of their own. rpc Bootstrap(BootstrapRequest) returns (BootstrapResponse) { } - - // Join a bootstrapped cluster. If the target node is itself not part of a - // bootstrapped cluster, an appropriate error is returned. - rpc Join(JoinNodeRequest) returns (JoinNodeResponse) { } } diff --git a/pkg/server/status.go b/pkg/server/status.go index 346890e9dfa6..2c5bb74ab86b 100644 --- a/pkg/server/status.go +++ b/pkg/server/status.go @@ -223,7 +223,7 @@ func (s *statusServer) parseNodeID(nodeIDParam string) (roachpb.NodeID, bool, er id, err := strconv.ParseInt(nodeIDParam, 0, 32) if err != nil { - return 0, false, errors.Wrap(err, "node id could not be parsed") + return 0, false, errors.Wrap(err, "node ID could not be parsed") } nodeID := roachpb.NodeID(id) return nodeID, nodeID == s.gossip.NodeID.Get(), nil