diff --git a/pkg/cli/debug.go b/pkg/cli/debug.go index f0ee3df8cf3b..5ca3c8027b4e 100644 --- a/pkg/cli/debug.go +++ b/pkg/cli/debug.go @@ -661,7 +661,7 @@ func runDebugCheckStoreDescriptors(ctx context.Context, db *engine.RocksDB) erro if err != nil { return false, err } - ms, err := storage.ComputeStatsForRange(&desc, db, claimedMS.LastUpdateNanos) + ms, err := rditer.ComputeStatsForRange(&desc, db, claimedMS.LastUpdateNanos) if err != nil { return false, err } diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go index c8a2603c4f35..15453a45d8da 100644 --- a/pkg/roachpb/api.go +++ b/pkg/roachpb/api.go @@ -512,6 +512,9 @@ func (*AdminScatterRequest) Method() Method { return AdminScatter } // Method implements the Request interface. func (*AddSSTableRequest) Method() Method { return AddSSTable } +// Method implements the Request interface. +func (*AdjustStatsRequest) Method() Method { return AdjustStats } + // ShallowCopy implements the Request interface. func (gr *GetRequest) ShallowCopy() Request { shallowCopy := *gr @@ -734,6 +737,12 @@ func (r *AddSSTableRequest) ShallowCopy() Request { return &shallowCopy } +// ShallowCopy implements the Request interface. +func (r *AdjustStatsRequest) ShallowCopy() Request { + shallowCopy := *r + return &shallowCopy +} + // NewGet returns a Request initialized to get the value at key. func NewGet(key Key) Request { return &GetRequest{ @@ -954,6 +963,7 @@ func (*TransferLeaseRequest) flags() int { // lease holder. return isWrite | isAlone | skipLeaseCheck } +func (*AdjustStatsRequest) flags() int { return isWrite | isAlone } func (*ComputeChecksumRequest) flags() int { return isWrite | isRange } func (*DeprecatedVerifyChecksumRequest) flags() int { return isWrite } func (*CheckConsistencyRequest) flags() int { return isAdmin | isRange } diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index 7acfd5b8e06d..2a92fcb75382 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -40,6 +40,8 @@ ReverseScanResponse CheckConsistencyRequest CheckConsistencyResponse + AdjustStatsRequest + AdjustStatsResponse BeginTransactionRequest BeginTransactionResponse EndTransactionRequest @@ -764,6 +766,42 @@ func (m *CheckConsistencyResponse) String() string { return proto.Com func (*CheckConsistencyResponse) ProtoMessage() {} func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{24} } +// An AdjustStatsRequest triggers a stats recomputation on the Range addressed by +// the request. +// +// Since this request targets a specific Range, the start key must equal the +// start key of the target Range. +// +// The stats recomputation touches essentially the whole range, but the command +// avoids having to block other commands by taking care to not interleave +// with splits, and by using the commutativity of stats updates. As a result, +// it is safe to invoke at any time, including repeatedly, though it should be +// used conservatively due to performing a full scan of the Range. +type AdjustStatsRequest struct { + Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + ComputationEndKey Key `protobuf:"bytes,2,opt,name=computation_end_key,json=computationEndKey,proto3,casttype=Key" json:"computation_end_key,omitempty"` + // When dry_run is true, the stats delta is computed, but no stats adjustment + // is performed. + DryRun bool `protobuf:"varint,3,opt,name=dry_run,json=dryRun,proto3" json:"dry_run,omitempty"` +} + +func (m *AdjustStatsRequest) Reset() { *m = AdjustStatsRequest{} } +func (m *AdjustStatsRequest) String() string { return proto.CompactTextString(m) } +func (*AdjustStatsRequest) ProtoMessage() {} +func (*AdjustStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{25} } + +// An AdjustStatsResponse is the response to an AdjustStatsRequest. +type AdjustStatsResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // added_delta is the adjustment made to the range's stats, i.e. `new_stats = old_stats + added_delta`. + AddedDelta cockroach_storage_engine_enginepb.MVCCNetworkStats `protobuf:"bytes,2,opt,name=added_delta,json=addedDelta" json:"added_delta"` +} + +func (m *AdjustStatsResponse) Reset() { *m = AdjustStatsResponse{} } +func (m *AdjustStatsResponse) String() string { return proto.CompactTextString(m) } +func (*AdjustStatsResponse) ProtoMessage() {} +func (*AdjustStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{26} } + // A BeginTransactionRequest is the argument to the BeginTransaction() method. type BeginTransactionRequest struct { Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -772,7 +810,7 @@ type BeginTransactionRequest struct { func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} -func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{25} } +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{27} } // A BeginTransactionResponse is the return value from the BeginTransaction() method. type BeginTransactionResponse struct { @@ -782,7 +820,7 @@ type BeginTransactionResponse struct { func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} } func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BeginTransactionResponse) ProtoMessage() {} -func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{26} } +func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{28} } // An EndTransactionRequest is the argument to the EndTransaction() method. It // specifies whether to commit or roll back an extant transaction. @@ -816,7 +854,7 @@ type EndTransactionRequest struct { func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } func (m *EndTransactionRequest) String() string { return proto.CompactTextString(m) } func (*EndTransactionRequest) ProtoMessage() {} -func (*EndTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{27} } +func (*EndTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{29} } // An EndTransactionResponse is the return value from the // EndTransaction() method. The final transaction record is returned @@ -836,7 +874,7 @@ type EndTransactionResponse struct { func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} } func (m *EndTransactionResponse) String() string { return proto.CompactTextString(m) } func (*EndTransactionResponse) ProtoMessage() {} -func (*EndTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{28} } +func (*EndTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{30} } // An AdminSplitRequest is the argument to the AdminSplit() method. The // existing range which contains header.key is split by @@ -866,7 +904,7 @@ type AdminSplitRequest struct { func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminSplitRequest) ProtoMessage() {} -func (*AdminSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{29} } +func (*AdminSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } // An AdminSplitResponse is the return value from the AdminSplit() // method. @@ -877,7 +915,7 @@ type AdminSplitResponse struct { func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminSplitResponse) ProtoMessage() {} -func (*AdminSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{30} } +func (*AdminSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } // An AdminMergeRequest is the argument to the AdminMerge() method. A // merge is performed by calling AdminMerge on the left-hand range of @@ -895,7 +933,7 @@ type AdminMergeRequest struct { func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) } func (*AdminMergeRequest) ProtoMessage() {} -func (*AdminMergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } +func (*AdminMergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } // An AdminMergeResponse is the return value from the AdminMerge() // method. @@ -906,7 +944,7 @@ type AdminMergeResponse struct { func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) } func (*AdminMergeResponse) ProtoMessage() {} -func (*AdminMergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } +func (*AdminMergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } // An AdminTransferLeaseRequest is the argument to the AdminTransferLease() // method. A lease transfer allows an external entity to control the lease @@ -920,7 +958,7 @@ type AdminTransferLeaseRequest struct { func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseRequest{} } func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseRequest) ProtoMessage() {} -func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } +func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } type AdminTransferLeaseResponse struct { ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -929,7 +967,7 @@ type AdminTransferLeaseResponse struct { func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseResponse{} } func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseResponse) ProtoMessage() {} -func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } +func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } // An AdminChangeReplicasRequest is the argument to the AdminChangeReplicas() // method. A change replicas operation allows adding or removing a set of @@ -943,7 +981,7 @@ type AdminChangeReplicasRequest struct { func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasRequest{} } func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasRequest) ProtoMessage() {} -func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } +func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } type AdminChangeReplicasResponse struct { ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -952,7 +990,7 @@ type AdminChangeReplicasResponse struct { func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicasResponse{} } func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasResponse) ProtoMessage() {} -func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } +func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } // A RangeLookupRequest is arguments to the RangeLookup() method. A // forward lookup request returns a range containing the requested @@ -976,7 +1014,7 @@ type RangeLookupRequest struct { func (m *RangeLookupRequest) Reset() { *m = RangeLookupRequest{} } func (m *RangeLookupRequest) String() string { return proto.CompactTextString(m) } func (*RangeLookupRequest) ProtoMessage() {} -func (*RangeLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } +func (*RangeLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } // A RangeLookupResponse is the return value from the RangeLookup() // method. It returns metadata for the range containing the requested @@ -992,7 +1030,7 @@ type RangeLookupResponse struct { func (m *RangeLookupResponse) Reset() { *m = RangeLookupResponse{} } func (m *RangeLookupResponse) String() string { return proto.CompactTextString(m) } func (*RangeLookupResponse) ProtoMessage() {} -func (*RangeLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } +func (*RangeLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } // A HeartbeatTxnRequest is arguments to the HeartbeatTxn() // method. It's sent by transaction coordinators to let the system @@ -1007,7 +1045,7 @@ type HeartbeatTxnRequest struct { func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} } func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnRequest) ProtoMessage() {} -func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } +func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } // A HeartbeatTxnResponse is the return value from the HeartbeatTxn() // method. It returns the transaction info in the response header. The @@ -1020,7 +1058,7 @@ type HeartbeatTxnResponse struct { func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} } func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnResponse) ProtoMessage() {} -func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } +func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } // A GCRequest is arguments to the GC() method. It's sent by range // lease holders after scanning range data to find expired MVCC values. @@ -1037,7 +1075,7 @@ type GCRequest struct { func (m *GCRequest) Reset() { *m = GCRequest{} } func (m *GCRequest) String() string { return proto.CompactTextString(m) } func (*GCRequest) ProtoMessage() {} -func (*GCRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } +func (*GCRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } type GCRequest_GCKey struct { Key Key `protobuf:"bytes,1,opt,name=key,proto3,casttype=Key" json:"key,omitempty"` @@ -1047,7 +1085,7 @@ type GCRequest_GCKey struct { 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 fileDescriptorApi, []int{41, 0} } +func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43, 0} } // A GCResponse is the return value from the GC() method. type GCResponse struct { @@ -1057,7 +1095,7 @@ type GCResponse struct { func (m *GCResponse) Reset() { *m = GCResponse{} } func (m *GCResponse) String() string { return proto.CompactTextString(m) } func (*GCResponse) ProtoMessage() {} -func (*GCResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } +func (*GCResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } // A PushTxnRequest is arguments to the PushTxn() method. It's sent by // readers or writers which have encountered an "intent" laid down by @@ -1107,7 +1145,7 @@ type PushTxnRequest struct { func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} } func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) } func (*PushTxnRequest) ProtoMessage() {} -func (*PushTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } +func (*PushTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } // A PushTxnResponse is the return value from the PushTxn() method. It // returns success and the resulting state of PusheeTxn if the @@ -1126,7 +1164,7 @@ type PushTxnResponse struct { func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} } func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) } func (*PushTxnResponse) ProtoMessage() {} -func (*PushTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } +func (*PushTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } // A QueryTxnResponse is arguments to the QueryTxn() method. It's sent // by transactions which are waiting to push another transaction because @@ -1146,7 +1184,7 @@ type QueryTxnRequest struct { func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} } func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) } func (*QueryTxnRequest) ProtoMessage() {} -func (*QueryTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } +func (*QueryTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } // A QueryTxnResponse is the return value from the QueryTxn() method. type QueryTxnResponse struct { @@ -1161,7 +1199,7 @@ type QueryTxnResponse struct { func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} } func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) } func (*QueryTxnResponse) ProtoMessage() {} -func (*QueryTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } +func (*QueryTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } // A ResolveIntentRequest is arguments to the ResolveIntent() // method. It is sent by transaction coordinators after success @@ -1181,7 +1219,7 @@ type ResolveIntentRequest struct { func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} } func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRequest) ProtoMessage() {} -func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } +func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } // A ResolveIntentResponse is the return value from the // ResolveIntent() method. @@ -1192,7 +1230,7 @@ type ResolveIntentResponse struct { func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} } func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentResponse) ProtoMessage() {} -func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } +func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } // A ResolveIntentRangeRequest is arguments to the ResolveIntentRange() method. // It is sent by transaction coordinators after success calling PushTxn to @@ -1212,7 +1250,7 @@ type ResolveIntentRangeRequest struct { func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeRequest{} } func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeRequest) ProtoMessage() {} -func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } +func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } // A NoopResponse is the return value from a no-op operation. type NoopResponse struct { @@ -1221,7 +1259,7 @@ type NoopResponse struct { func (m *NoopResponse) Reset() { *m = NoopResponse{} } func (m *NoopResponse) String() string { return proto.CompactTextString(m) } func (*NoopResponse) ProtoMessage() {} -func (*NoopResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } +func (*NoopResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } // A NoopRequest is a no-op. type NoopRequest struct { @@ -1230,7 +1268,7 @@ type NoopRequest struct { func (m *NoopRequest) Reset() { *m = NoopRequest{} } func (m *NoopRequest) String() string { return proto.CompactTextString(m) } func (*NoopRequest) ProtoMessage() {} -func (*NoopRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } +func (*NoopRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } // A ResolveIntentRangeResponse is the return value from the // ResolveIntent() method. @@ -1241,7 +1279,7 @@ type ResolveIntentRangeResponse struct { func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeResponse{} } func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeResponse) ProtoMessage() {} -func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } +func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } // A MergeRequest contains arguments to the Merge() method. It // specifies a key and a value which should be merged into the @@ -1254,7 +1292,7 @@ type MergeRequest struct { func (m *MergeRequest) Reset() { *m = MergeRequest{} } func (m *MergeRequest) String() string { return proto.CompactTextString(m) } func (*MergeRequest) ProtoMessage() {} -func (*MergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } +func (*MergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } // MergeResponse is the response to a Merge() operation. type MergeResponse struct { @@ -1264,7 +1302,7 @@ type MergeResponse struct { func (m *MergeResponse) Reset() { *m = MergeResponse{} } func (m *MergeResponse) String() string { return proto.CompactTextString(m) } func (*MergeResponse) ProtoMessage() {} -func (*MergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } +func (*MergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } // TruncateLogRequest is used to remove a prefix of the raft log. While there // is no requirement for correctness that the raft log truncation be synchronized across @@ -1285,7 +1323,7 @@ type TruncateLogRequest struct { func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} } func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) } func (*TruncateLogRequest) ProtoMessage() {} -func (*TruncateLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } +func (*TruncateLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } // TruncateLogResponse is the response to a TruncateLog() operation. type TruncateLogResponse struct { @@ -1295,7 +1333,7 @@ type TruncateLogResponse struct { func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} } func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) } func (*TruncateLogResponse) ProtoMessage() {} -func (*TruncateLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } +func (*TruncateLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } // A RequestLeaseRequest is arguments to the RequestLease() // method. It is sent by the store on behalf of one of its ranges upon receipt @@ -1311,7 +1349,7 @@ type RequestLeaseRequest struct { func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} } func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) } func (*RequestLeaseRequest) ProtoMessage() {} -func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } +func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } // A TransferLeaseRequest represents the arguments to the TransferLease() // method. It is sent by a replica that currently holds the range lease and @@ -1336,7 +1374,7 @@ type TransferLeaseRequest struct { func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} } func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*TransferLeaseRequest) ProtoMessage() {} -func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } +func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } // LeaseInfoRequest is the argument to the LeaseInfo() method, for getting // information about a range's lease. @@ -1349,7 +1387,7 @@ type LeaseInfoRequest struct { func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} } func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) } func (*LeaseInfoRequest) ProtoMessage() {} -func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } +func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } // LeaseInfoResponse is the response to a LeaseInfo() operation. type LeaseInfoResponse struct { @@ -1362,7 +1400,7 @@ type LeaseInfoResponse struct { func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} } func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) } func (*LeaseInfoResponse) ProtoMessage() {} -func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } +func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } // A RequestLeaseResponse is the response to a RequestLease() or TransferLease() // operation. @@ -1373,7 +1411,7 @@ type RequestLeaseResponse struct { func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} } func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) } func (*RequestLeaseResponse) ProtoMessage() {} -func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } +func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } // A ComputeChecksumRequest is arguments to the ComputeChecksum() method, to // start computing the checksum for the specified range at the snapshot for this @@ -1395,7 +1433,7 @@ type ComputeChecksumRequest struct { func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{} } func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumRequest) ProtoMessage() {} -func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } +func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } // A ComputeChecksumResponse is the response to a ComputeChecksum() operation. type ComputeChecksumResponse struct { @@ -1405,7 +1443,7 @@ type ComputeChecksumResponse struct { func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse{} } func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumResponse) ProtoMessage() {} -func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } +func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } type DeprecatedVerifyChecksumRequest struct { Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -1415,7 +1453,7 @@ func (m *DeprecatedVerifyChecksumRequest) Reset() { *m = DeprecatedVerif func (m *DeprecatedVerifyChecksumRequest) String() string { return proto.CompactTextString(m) } func (*DeprecatedVerifyChecksumRequest) ProtoMessage() {} func (*DeprecatedVerifyChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{64} + return fileDescriptorApi, []int{66} } type DeprecatedVerifyChecksumResponse struct { @@ -1426,7 +1464,7 @@ func (m *DeprecatedVerifyChecksumResponse) Reset() { *m = DeprecatedVeri func (m *DeprecatedVerifyChecksumResponse) String() string { return proto.CompactTextString(m) } func (*DeprecatedVerifyChecksumResponse) ProtoMessage() {} func (*DeprecatedVerifyChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{65} + return fileDescriptorApi, []int{67} } type ExportStorage struct { @@ -1441,7 +1479,7 @@ type ExportStorage struct { func (m *ExportStorage) Reset() { *m = ExportStorage{} } func (m *ExportStorage) String() string { return proto.CompactTextString(m) } func (*ExportStorage) ProtoMessage() {} -func (*ExportStorage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } +func (*ExportStorage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } type ExportStorage_LocalFilePath struct { Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` @@ -1451,7 +1489,7 @@ func (m *ExportStorage_LocalFilePath) Reset() { *m = ExportStorage_Local func (m *ExportStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExportStorage_LocalFilePath) ProtoMessage() {} func (*ExportStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{66, 0} + return fileDescriptorApi, []int{68, 0} } type ExportStorage_Http struct { @@ -1461,7 +1499,7 @@ type ExportStorage_Http struct { func (m *ExportStorage_Http) Reset() { *m = ExportStorage_Http{} } func (m *ExportStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Http) ProtoMessage() {} -func (*ExportStorage_Http) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 1} } +func (*ExportStorage_Http) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 1} } type ExportStorage_S3 struct { Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` @@ -1476,7 +1514,7 @@ type ExportStorage_S3 struct { func (m *ExportStorage_S3) Reset() { *m = ExportStorage_S3{} } func (m *ExportStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExportStorage_S3) ProtoMessage() {} -func (*ExportStorage_S3) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 2} } +func (*ExportStorage_S3) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 2} } type ExportStorage_GCS struct { Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` @@ -1487,7 +1525,7 @@ type ExportStorage_GCS struct { func (m *ExportStorage_GCS) Reset() { *m = ExportStorage_GCS{} } func (m *ExportStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExportStorage_GCS) ProtoMessage() {} -func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 3} } +func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 3} } type ExportStorage_Azure struct { Container string `protobuf:"bytes,1,opt,name=container,proto3" json:"container,omitempty"` @@ -1499,7 +1537,7 @@ type ExportStorage_Azure struct { func (m *ExportStorage_Azure) Reset() { *m = ExportStorage_Azure{} } func (m *ExportStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Azure) ProtoMessage() {} -func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 4} } +func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 4} } // WriteBatchRequest is arguments to the WriteBatch() method, to apply the // operations encoded in a BatchRepr. @@ -1515,7 +1553,7 @@ type WriteBatchRequest struct { func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} } func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) } func (*WriteBatchRequest) ProtoMessage() {} -func (*WriteBatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } +func (*WriteBatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } // WriteBatchResponse is the response to a WriteBatch() operation. type WriteBatchResponse struct { @@ -1525,7 +1563,7 @@ type WriteBatchResponse struct { func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} } func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) } func (*WriteBatchResponse) ProtoMessage() {} -func (*WriteBatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } +func (*WriteBatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } // ExportRequest is the argument to the Export() method, to dump a keyrange into // files under a basepath. @@ -1541,7 +1579,7 @@ type ExportRequest struct { func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} -func (*ExportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } +func (*ExportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } type BulkOpSummary struct { DataSize int64 `protobuf:"varint,1,opt,name=data_size,json=dataSize,proto3" json:"data_size,omitempty"` @@ -1553,7 +1591,7 @@ type BulkOpSummary struct { func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} } func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) } func (*BulkOpSummary) ProtoMessage() {} -func (*BulkOpSummary) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } +func (*BulkOpSummary) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } // ExportResponse is the response to an Export() operation. type ExportResponse struct { @@ -1564,7 +1602,7 @@ type ExportResponse struct { func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} -func (*ExportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } +func (*ExportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } // File describes a keyrange that has been dumped to a file at the given // path. @@ -1579,7 +1617,7 @@ type ExportResponse_File struct { 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 fileDescriptorApi, []int{71, 0} } +func (*ExportResponse_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73, 0} } // ImportRequest is the argument to the Import() method, to bulk load key/value // entries. @@ -1605,7 +1643,7 @@ type ImportRequest struct { func (m *ImportRequest) Reset() { *m = ImportRequest{} } func (m *ImportRequest) String() string { return proto.CompactTextString(m) } func (*ImportRequest) ProtoMessage() {} -func (*ImportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } +func (*ImportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } type ImportRequest_File struct { Dir ExportStorage `protobuf:"bytes,1,opt,name=dir" json:"dir"` @@ -1616,7 +1654,7 @@ type ImportRequest_File struct { 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 fileDescriptorApi, []int{72, 0} } +func (*ImportRequest_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74, 0} } type ImportRequest_TableRekey struct { // OldID is the previous ID of `new_desc`. @@ -1628,7 +1666,7 @@ type ImportRequest_TableRekey struct { func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRekey{} } func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) } func (*ImportRequest_TableRekey) ProtoMessage() {} -func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72, 1} } +func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74, 1} } // ImportResponse is the response to a Import() operation. type ImportResponse struct { @@ -1639,7 +1677,7 @@ type ImportResponse struct { func (m *ImportResponse) Reset() { *m = ImportResponse{} } func (m *ImportResponse) String() string { return proto.CompactTextString(m) } func (*ImportResponse) ProtoMessage() {} -func (*ImportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } +func (*ImportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } // AdminScatterRequest is the argument to the AdminScatter() method, which moves // replicas and leaseholders for a selection of ranges. Scatter is best-effort; @@ -1652,7 +1690,7 @@ type AdminScatterRequest struct { func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} } func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) } func (*AdminScatterRequest) ProtoMessage() {} -func (*AdminScatterRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } +func (*AdminScatterRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } // ScatterResponse is the response to a Scatter() operation. type AdminScatterResponse struct { @@ -1663,7 +1701,7 @@ type AdminScatterResponse struct { func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} } func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse) ProtoMessage() {} -func (*AdminScatterResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } +func (*AdminScatterResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } type AdminScatterResponse_Range struct { Span Span `protobuf:"bytes,1,opt,name=span" json:"span"` @@ -1673,7 +1711,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 fileDescriptorApi, []int{75, 0} + return fileDescriptorApi, []int{77, 0} } // AddSSTableRequest is arguments to the AddSSTable() method, to link a file @@ -1686,7 +1724,7 @@ type AddSSTableRequest struct { func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} } func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) } func (*AddSSTableRequest) ProtoMessage() {} -func (*AddSSTableRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } +func (*AddSSTableRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } // AddSSTableResponse is the response to a AddSSTable() operation. type AddSSTableResponse struct { @@ -1696,7 +1734,7 @@ type AddSSTableResponse struct { func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} } func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) } func (*AddSSTableResponse) ProtoMessage() {} -func (*AddSSTableResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } +func (*AddSSTableResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } // A RequestUnion contains exactly one of the requests. // The values added here must match those in ResponseUnion. @@ -1746,12 +1784,13 @@ type RequestUnion struct { QueryTxn *QueryTxnRequest `protobuf:"bytes,33,opt,name=query_txn,json=queryTxn" json:"query_txn,omitempty"` AdminScatter *AdminScatterRequest `protobuf:"bytes,36,opt,name=admin_scatter,json=adminScatter" json:"admin_scatter,omitempty"` AddSstable *AddSSTableRequest `protobuf:"bytes,37,opt,name=add_sstable,json=addSstable" json:"add_sstable,omitempty"` + AdjustStats *AdjustStatsRequest `protobuf:"bytes,39,opt,name=adjust_stats,json=adjustStats" json:"adjust_stats,omitempty"` } func (m *RequestUnion) Reset() { *m = RequestUnion{} } func (m *RequestUnion) String() string { return proto.CompactTextString(m) } func (*RequestUnion) ProtoMessage() {} -func (*RequestUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } +func (*RequestUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } // A ResponseUnion contains exactly one of the responses. // The values added here must match those in RequestUnion. @@ -1797,12 +1836,13 @@ type ResponseUnion struct { QueryTxn *QueryTxnResponse `protobuf:"bytes,33,opt,name=query_txn,json=queryTxn" json:"query_txn,omitempty"` AdminScatter *AdminScatterResponse `protobuf:"bytes,36,opt,name=admin_scatter,json=adminScatter" json:"admin_scatter,omitempty"` AddSstable *AddSSTableResponse `protobuf:"bytes,37,opt,name=add_sstable,json=addSstable" json:"add_sstable,omitempty"` + AdjustStats *AdjustStatsResponse `protobuf:"bytes,39,opt,name=adjust_stats,json=adjustStats" json:"adjust_stats,omitempty"` } func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } func (m *ResponseUnion) String() string { return proto.CompactTextString(m) } func (*ResponseUnion) ProtoMessage() {} -func (*ResponseUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } +func (*ResponseUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } // A Header is attached to a BatchRequest, encapsulating routing and auxiliary // information required for executing it. @@ -1864,7 +1904,7 @@ type Header struct { func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } // A BatchRequest contains one or more requests to be executed in // parallel, or if applicable (based on write-only commands and @@ -1876,7 +1916,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} -func (*BatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } +func (*BatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } // A BatchResponse contains one or more responses, one per request // corresponding to the requests in the matching BatchRequest. The @@ -1889,7 +1929,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} -func (*BatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } +func (*BatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } type BatchResponse_Header struct { // error is non-nil if an error occurred. @@ -1913,7 +1953,7 @@ type BatchResponse_Header struct { 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 fileDescriptorApi, []int{82, 0} } +func (*BatchResponse_Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84, 0} } func init() { proto.RegisterType((*RangeInfo)(nil), "cockroach.roachpb.RangeInfo") @@ -1941,6 +1981,8 @@ func init() { proto.RegisterType((*ReverseScanResponse)(nil), "cockroach.roachpb.ReverseScanResponse") proto.RegisterType((*CheckConsistencyRequest)(nil), "cockroach.roachpb.CheckConsistencyRequest") proto.RegisterType((*CheckConsistencyResponse)(nil), "cockroach.roachpb.CheckConsistencyResponse") + proto.RegisterType((*AdjustStatsRequest)(nil), "cockroach.roachpb.AdjustStatsRequest") + proto.RegisterType((*AdjustStatsResponse)(nil), "cockroach.roachpb.AdjustStatsResponse") proto.RegisterType((*BeginTransactionRequest)(nil), "cockroach.roachpb.BeginTransactionRequest") proto.RegisterType((*BeginTransactionResponse)(nil), "cockroach.roachpb.BeginTransactionResponse") proto.RegisterType((*EndTransactionRequest)(nil), "cockroach.roachpb.EndTransactionRequest") @@ -2424,6 +2466,42 @@ func (this *CheckConsistencyRequest) Equal(that interface{}) bool { } return true } +func (this *AdjustStatsRequest) Equal(that interface{}) bool { + if that == nil { + if this == nil { + return true + } + return false + } + + that1, ok := that.(*AdjustStatsRequest) + if !ok { + that2, ok := that.(AdjustStatsRequest) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + if this == nil { + return true + } + return false + } else if this == nil { + return false + } + if !this.Span.Equal(&that1.Span) { + return false + } + if !bytes.Equal(this.ComputationEndKey, that1.ComputationEndKey) { + return false + } + if this.DryRun != that1.DryRun { + return false + } + return true +} func (this *BeginTransactionRequest) Equal(that interface{}) bool { if that == nil { if this == nil { @@ -4733,7 +4811,7 @@ func (m *CheckConsistencyResponse) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *BeginTransactionRequest) Marshal() (dAtA []byte, err error) { +func (m *AdjustStatsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -4743,7 +4821,7 @@ func (m *BeginTransactionRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *AdjustStatsRequest) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -4756,10 +4834,26 @@ func (m *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { return 0, err } i += n32 + if len(m.ComputationEndKey) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.ComputationEndKey))) + i += copy(dAtA[i:], m.ComputationEndKey) + } + if m.DryRun { + dAtA[i] = 0x18 + i++ + if m.DryRun { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } -func (m *BeginTransactionResponse) Marshal() (dAtA []byte, err error) { +func (m *AdjustStatsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -4769,7 +4863,7 @@ func (m *BeginTransactionResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *AdjustStatsResponse) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -4782,6 +4876,66 @@ func (m *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { return 0, err } i += n33 + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AddedDelta.Size())) + n34, err := m.AddedDelta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + return i, nil +} + +func (m *BeginTransactionRequest) 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 *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) + n35, err := m.Span.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + return i, nil +} + +func (m *BeginTransactionResponse) 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 *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) + n36, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 return i, nil } @@ -4803,11 +4957,11 @@ func (m *EndTransactionRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n34, err := m.Span.MarshalTo(dAtA[i:]) + n37, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n37 if m.Commit { dAtA[i] = 0x10 i++ @@ -4822,21 +4976,21 @@ func (m *EndTransactionRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Deadline.Size())) - n35, err := m.Deadline.MarshalTo(dAtA[i:]) + n38, err := m.Deadline.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n38 } if m.InternalCommitTrigger != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.InternalCommitTrigger.Size())) - n36, err := m.InternalCommitTrigger.MarshalTo(dAtA[i:]) + n39, err := m.InternalCommitTrigger.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n39 } if len(m.IntentSpans) > 0 { for _, msg := range m.IntentSpans { @@ -4881,11 +5035,11 @@ func (m *EndTransactionResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n37, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n40, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n40 if m.OnePhaseCommit { dAtA[i] = 0x20 i++ @@ -4917,11 +5071,11 @@ func (m *AdminSplitRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n38, err := m.Span.MarshalTo(dAtA[i:]) + n41, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n41 if len(m.SplitKey) > 0 { dAtA[i] = 0x12 i++ @@ -4949,11 +5103,11 @@ func (m *AdminSplitResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n39, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n42, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n42 return i, nil } @@ -4975,11 +5129,11 @@ func (m *AdminMergeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n40, err := m.Span.MarshalTo(dAtA[i:]) + n43, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n43 return i, nil } @@ -5001,11 +5155,11 @@ func (m *AdminMergeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n41, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n44, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n44 return i, nil } @@ -5027,11 +5181,11 @@ func (m *AdminTransferLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n42, err := m.Span.MarshalTo(dAtA[i:]) + n45, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n45 if m.Target != 0 { dAtA[i] = 0x10 i++ @@ -5058,11 +5212,11 @@ func (m *AdminTransferLeaseResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n43, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n46, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n46 return i, nil } @@ -5084,11 +5238,11 @@ func (m *AdminChangeReplicasRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n44, err := m.Span.MarshalTo(dAtA[i:]) + n47, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n47 if m.ChangeType != 0 { dAtA[i] = 0x10 i++ @@ -5127,11 +5281,11 @@ func (m *AdminChangeReplicasResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n45, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n48, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n45 + i += n48 return i, nil } @@ -5153,11 +5307,11 @@ func (m *RangeLookupRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n46, err := m.Span.MarshalTo(dAtA[i:]) + n49, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n46 + i += n49 if m.MaxRanges != 0 { dAtA[i] = 0x10 i++ @@ -5194,11 +5348,11 @@ func (m *RangeLookupResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n47, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n50, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n50 if len(m.Ranges) > 0 { for _, msg := range m.Ranges { dAtA[i] = 0x12 @@ -5244,19 +5398,19 @@ func (m *HeartbeatTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n48, err := m.Span.MarshalTo(dAtA[i:]) + n51, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n48 + i += n51 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n49, err := m.Now.MarshalTo(dAtA[i:]) + n52, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n52 return i, nil } @@ -5278,11 +5432,11 @@ func (m *HeartbeatTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n50, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n53, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n53 return i, nil } @@ -5304,11 +5458,11 @@ func (m *GCRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n51, err := m.Span.MarshalTo(dAtA[i:]) + n54, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n54 if len(m.Keys) > 0 { for _, msg := range m.Keys { dAtA[i] = 0x1a @@ -5324,19 +5478,19 @@ func (m *GCRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Threshold.Size())) - n52, err := m.Threshold.MarshalTo(dAtA[i:]) + n55, err := m.Threshold.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n55 dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.TxnSpanGCThreshold.Size())) - n53, err := m.TxnSpanGCThreshold.MarshalTo(dAtA[i:]) + n56, err := m.TxnSpanGCThreshold.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n56 return i, nil } @@ -5364,11 +5518,11 @@ func (m *GCRequest_GCKey) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n54, err := m.Timestamp.MarshalTo(dAtA[i:]) + n57, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n57 return i, nil } @@ -5390,11 +5544,11 @@ func (m *GCResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n55, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n58, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n58 return i, nil } @@ -5416,43 +5570,43 @@ func (m *PushTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n56, err := m.Span.MarshalTo(dAtA[i:]) + n59, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n59 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.PusherTxn.Size())) - n57, err := m.PusherTxn.MarshalTo(dAtA[i:]) + n60, err := m.PusherTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n60 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PusheeTxn.Size())) - n58, err := m.PusheeTxn.MarshalTo(dAtA[i:]) + n61, err := m.PusheeTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n61 dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTo.Size())) - n59, err := m.PushTo.MarshalTo(dAtA[i:]) + n62, err := m.PushTo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n62 dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n60, err := m.Now.MarshalTo(dAtA[i:]) + n63, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n63 if m.PushType != 0 { dAtA[i] = 0x30 i++ @@ -5489,19 +5643,19 @@ func (m *PushTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n61, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n64, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n64 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.PusheeTxn.Size())) - n62, err := m.PusheeTxn.MarshalTo(dAtA[i:]) + n65, err := m.PusheeTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n65 return i, nil } @@ -5523,19 +5677,19 @@ func (m *QueryTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n63, err := m.Span.MarshalTo(dAtA[i:]) + n66, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n66 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n64, err := m.Txn.MarshalTo(dAtA[i:]) + n67, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n67 if m.WaitForUpdate { dAtA[i] = 0x18 i++ @@ -5579,19 +5733,19 @@ func (m *QueryTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n65, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n68, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n68 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueriedTxn.Size())) - n66, err := m.QueriedTxn.MarshalTo(dAtA[i:]) + n69, err := m.QueriedTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n69 if len(m.WaitingTxns) > 0 { for _, msg := range m.WaitingTxns { dAtA[i] = 0x1a @@ -5625,19 +5779,19 @@ func (m *ResolveIntentRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n67, err := m.Span.MarshalTo(dAtA[i:]) + n70, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n67 + i += n70 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.IntentTxn.Size())) - n68, err := m.IntentTxn.MarshalTo(dAtA[i:]) + n71, err := m.IntentTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n68 + i += n71 if m.Status != 0 { dAtA[i] = 0x18 i++ @@ -5674,11 +5828,11 @@ func (m *ResolveIntentResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n69, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n72, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n69 + i += n72 return i, nil } @@ -5700,19 +5854,19 @@ func (m *ResolveIntentRangeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n70, err := m.Span.MarshalTo(dAtA[i:]) + n73, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n70 + i += n73 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.IntentTxn.Size())) - n71, err := m.IntentTxn.MarshalTo(dAtA[i:]) + n74, err := m.IntentTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n71 + i += n74 if m.Status != 0 { dAtA[i] = 0x18 i++ @@ -5785,11 +5939,11 @@ func (m *ResolveIntentRangeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n72, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n75, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n72 + i += n75 return i, nil } @@ -5811,19 +5965,19 @@ func (m *MergeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n73, err := m.Span.MarshalTo(dAtA[i:]) + n76, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n73 + i += n76 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Value.Size())) - n74, err := m.Value.MarshalTo(dAtA[i:]) + n77, err := m.Value.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n74 + i += n77 return i, nil } @@ -5845,11 +5999,11 @@ func (m *MergeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n75, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n78, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n75 + i += n78 return i, nil } @@ -5871,11 +6025,11 @@ func (m *TruncateLogRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n76, err := m.Span.MarshalTo(dAtA[i:]) + n79, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n76 + i += n79 if m.Index != 0 { dAtA[i] = 0x10 i++ @@ -5907,11 +6061,11 @@ func (m *TruncateLogResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n77, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n80, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n77 + i += n80 return i, nil } @@ -5933,27 +6087,27 @@ func (m *RequestLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n78, err := m.Span.MarshalTo(dAtA[i:]) + n81, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n78 + i += n81 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n79, err := m.Lease.MarshalTo(dAtA[i:]) + n82, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n79 + i += n82 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PrevLease.Size())) - n80, err := m.PrevLease.MarshalTo(dAtA[i:]) + n83, err := m.PrevLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n80 + i += n83 return i, nil } @@ -5975,27 +6129,27 @@ func (m *TransferLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n81, err := m.Span.MarshalTo(dAtA[i:]) + n84, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n81 + i += n84 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n82, err := m.Lease.MarshalTo(dAtA[i:]) + n85, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n82 + i += n85 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PrevLease.Size())) - n83, err := m.PrevLease.MarshalTo(dAtA[i:]) + n86, err := m.PrevLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n83 + i += n86 return i, nil } @@ -6017,11 +6171,11 @@ func (m *LeaseInfoRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n84, err := m.Span.MarshalTo(dAtA[i:]) + n87, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n84 + i += n87 return i, nil } @@ -6043,19 +6197,19 @@ func (m *LeaseInfoResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n85, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n88, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n85 + i += n88 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n86, err := m.Lease.MarshalTo(dAtA[i:]) + n89, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n86 + i += n89 return i, nil } @@ -6077,11 +6231,11 @@ func (m *RequestLeaseResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n87, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n90, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n87 + i += n90 return i, nil } @@ -6103,11 +6257,11 @@ func (m *ComputeChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n88, err := m.Span.MarshalTo(dAtA[i:]) + n91, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n88 + i += n91 if m.Version != 0 { dAtA[i] = 0x10 i++ @@ -6116,11 +6270,11 @@ func (m *ComputeChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ChecksumID.Size())) - n89, err := m.ChecksumID.MarshalTo(dAtA[i:]) + n92, err := m.ChecksumID.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n89 + i += n92 if m.Snapshot { dAtA[i] = 0x20 i++ @@ -6152,11 +6306,11 @@ func (m *ComputeChecksumResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n90, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n93, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n90 + i += n93 return i, nil } @@ -6178,11 +6332,11 @@ func (m *DeprecatedVerifyChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n91, err := m.Span.MarshalTo(dAtA[i:]) + n94, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n91 + i += n94 return i, nil } @@ -6204,11 +6358,11 @@ func (m *DeprecatedVerifyChecksumResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n92, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n95, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n92 + i += n95 return i, nil } @@ -6235,48 +6389,48 @@ func (m *ExportStorage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.LocalFile.Size())) - n93, err := m.LocalFile.MarshalTo(dAtA[i:]) + n96, err := m.LocalFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n93 + i += n96 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.HttpPath.Size())) - n94, err := m.HttpPath.MarshalTo(dAtA[i:]) + n97, err := m.HttpPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n94 + i += n97 if m.GoogleCloudConfig != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.GoogleCloudConfig.Size())) - n95, err := m.GoogleCloudConfig.MarshalTo(dAtA[i:]) + n98, err := m.GoogleCloudConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n95 + i += n98 } if m.S3Config != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.S3Config.Size())) - n96, err := m.S3Config.MarshalTo(dAtA[i:]) + n99, err := m.S3Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n96 + i += n99 } if m.AzureConfig != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.AzureConfig.Size())) - n97, err := m.AzureConfig.MarshalTo(dAtA[i:]) + n100, err := m.AzureConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n97 + i += n100 } return i, nil } @@ -6485,19 +6639,19 @@ func (m *WriteBatchRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n98, err := m.Span.MarshalTo(dAtA[i:]) + n101, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n98 + i += n101 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.DataSpan.Size())) - n99, err := m.DataSpan.MarshalTo(dAtA[i:]) + n102, err := m.DataSpan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n99 + i += n102 if len(m.Data) > 0 { dAtA[i] = 0x1a i++ @@ -6525,11 +6679,11 @@ func (m *WriteBatchResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n100, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n103, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n100 + i += n103 return i, nil } @@ -6551,27 +6705,27 @@ func (m *ExportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n101, err := m.Span.MarshalTo(dAtA[i:]) + n104, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n101 + i += n104 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Storage.Size())) - n102, err := m.Storage.MarshalTo(dAtA[i:]) + n105, err := m.Storage.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n102 + i += n105 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.StartTime.Size())) - n103, err := m.StartTime.MarshalTo(dAtA[i:]) + n106, err := m.StartTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n103 + i += n106 if m.MVCCFilter != 0 { dAtA[i] = 0x20 i++ @@ -6646,11 +6800,11 @@ func (m *ExportResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n104, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n107, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n104 + i += n107 if len(m.Files) > 0 { for _, msg := range m.Files { dAtA[i] = 0x12 @@ -6684,11 +6838,11 @@ func (m *ExportResponse_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n105, err := m.Span.MarshalTo(dAtA[i:]) + n108, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n105 + i += n108 if len(m.Path) > 0 { dAtA[i] = 0x12 i++ @@ -6704,11 +6858,11 @@ func (m *ExportResponse_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.Exported.Size())) - n106, err := m.Exported.MarshalTo(dAtA[i:]) + n109, err := m.Exported.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n106 + i += n109 if len(m.SST) > 0 { dAtA[i] = 0x3a i++ @@ -6736,11 +6890,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n107, err := m.Span.MarshalTo(dAtA[i:]) + n110, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n107 + i += n110 if len(m.Files) > 0 { for _, msg := range m.Files { dAtA[i] = 0x12 @@ -6756,11 +6910,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.DataSpan.Size())) - n108, err := m.DataSpan.MarshalTo(dAtA[i:]) + n111, err := m.DataSpan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n108 + i += n111 if len(m.Rekeys) > 0 { for _, msg := range m.Rekeys { dAtA[i] = 0x2a @@ -6776,11 +6930,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTime.Size())) - n109, err := m.EndTime.MarshalTo(dAtA[i:]) + n112, err := m.EndTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n109 + i += n112 return i, nil } @@ -6802,11 +6956,11 @@ func (m *ImportRequest_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Dir.Size())) - n110, err := m.Dir.MarshalTo(dAtA[i:]) + n113, err := m.Dir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n110 + i += n113 if len(m.Path) > 0 { dAtA[i] = 0x12 i++ @@ -6869,19 +7023,19 @@ func (m *ImportResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n111, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n114, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n111 + i += n114 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Imported.Size())) - n112, err := m.Imported.MarshalTo(dAtA[i:]) + n115, err := m.Imported.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n112 + i += n115 return i, nil } @@ -6903,11 +7057,11 @@ func (m *AdminScatterRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n113, err := m.Span.MarshalTo(dAtA[i:]) + n116, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n113 + i += n116 return i, nil } @@ -6929,11 +7083,11 @@ func (m *AdminScatterResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n114, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n117, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n114 + i += n117 if len(m.Ranges) > 0 { for _, msg := range m.Ranges { dAtA[i] = 0x12 @@ -6967,11 +7121,11 @@ func (m *AdminScatterResponse_Range) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n115, err := m.Span.MarshalTo(dAtA[i:]) + n118, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n115 + i += n118 return i, nil } @@ -6993,11 +7147,11 @@ func (m *AddSSTableRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n116, err := m.Span.MarshalTo(dAtA[i:]) + n119, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n116 + i += n119 if len(m.Data) > 0 { dAtA[i] = 0x12 i++ @@ -7025,11 +7179,11 @@ func (m *AddSSTableResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n117, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n120, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n117 + i += n120 return i, nil } @@ -7052,151 +7206,151 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Get.Size())) - n118, err := m.Get.MarshalTo(dAtA[i:]) + n121, err := m.Get.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n118 + i += n121 } if m.Put != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Put.Size())) - n119, err := m.Put.MarshalTo(dAtA[i:]) + n122, err := m.Put.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n119 + i += n122 } if m.ConditionalPut != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size())) - n120, err := m.ConditionalPut.MarshalTo(dAtA[i:]) + n123, err := m.ConditionalPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n120 + i += n123 } if m.Increment != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size())) - n121, err := m.Increment.MarshalTo(dAtA[i:]) + n124, err := m.Increment.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n121 + i += n124 } if m.Delete != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size())) - n122, err := m.Delete.MarshalTo(dAtA[i:]) + n125, err := m.Delete.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n122 + i += n125 } if m.DeleteRange != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size())) - n123, err := m.DeleteRange.MarshalTo(dAtA[i:]) + n126, err := m.DeleteRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n123 + i += n126 } if m.Scan != nil { dAtA[i] = 0x3a i++ i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size())) - n124, err := m.Scan.MarshalTo(dAtA[i:]) + n127, err := m.Scan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n124 + i += n127 } if m.BeginTransaction != nil { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.BeginTransaction.Size())) - n125, err := m.BeginTransaction.MarshalTo(dAtA[i:]) + n128, err := m.BeginTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n125 + i += n128 } if m.EndTransaction != nil { dAtA[i] = 0x4a i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTransaction.Size())) - n126, err := m.EndTransaction.MarshalTo(dAtA[i:]) + n129, err := m.EndTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n126 + i += n129 } if m.AdminSplit != nil { dAtA[i] = 0x52 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size())) - n127, err := m.AdminSplit.MarshalTo(dAtA[i:]) + n130, err := m.AdminSplit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n127 + i += n130 } if m.AdminMerge != nil { dAtA[i] = 0x5a i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size())) - n128, err := m.AdminMerge.MarshalTo(dAtA[i:]) + n131, err := m.AdminMerge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n128 + i += n131 } if m.HeartbeatTxn != nil { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size())) - n129, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) + n132, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n129 + i += n132 } if m.Gc != nil { dAtA[i] = 0x6a i++ i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size())) - n130, err := m.Gc.MarshalTo(dAtA[i:]) + n133, err := m.Gc.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n130 + i += n133 } if m.PushTxn != nil { dAtA[i] = 0x72 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size())) - n131, err := m.PushTxn.MarshalTo(dAtA[i:]) + n134, err := m.PushTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n131 + i += n134 } if m.RangeLookup != nil { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.RangeLookup.Size())) - n132, err := m.RangeLookup.MarshalTo(dAtA[i:]) + n135, err := m.RangeLookup.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n132 + i += n135 } if m.ResolveIntent != nil { dAtA[i] = 0x82 @@ -7204,11 +7358,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size())) - n133, err := m.ResolveIntent.MarshalTo(dAtA[i:]) + n136, err := m.ResolveIntent.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n133 + i += n136 } if m.ResolveIntentRange != nil { dAtA[i] = 0x8a @@ -7216,11 +7370,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size())) - n134, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) + n137, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n134 + i += n137 } if m.Merge != nil { dAtA[i] = 0x92 @@ -7228,11 +7382,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size())) - n135, err := m.Merge.MarshalTo(dAtA[i:]) + n138, err := m.Merge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n135 + i += n138 } if m.TruncateLog != nil { dAtA[i] = 0x9a @@ -7240,11 +7394,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size())) - n136, err := m.TruncateLog.MarshalTo(dAtA[i:]) + n139, err := m.TruncateLog.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n136 + i += n139 } if m.RequestLease != nil { dAtA[i] = 0xa2 @@ -7252,11 +7406,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size())) - n137, err := m.RequestLease.MarshalTo(dAtA[i:]) + n140, err := m.RequestLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n137 + i += n140 } if m.ReverseScan != nil { dAtA[i] = 0xaa @@ -7264,11 +7418,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size())) - n138, err := m.ReverseScan.MarshalTo(dAtA[i:]) + n141, err := m.ReverseScan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n138 + i += n141 } if m.ComputeChecksum != nil { dAtA[i] = 0xb2 @@ -7276,11 +7430,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size())) - n139, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) + n142, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n139 + i += n142 } if m.DeprecatedVerifyChecksum != nil { dAtA[i] = 0xba @@ -7288,11 +7442,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeprecatedVerifyChecksum.Size())) - n140, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) + n143, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n140 + i += n143 } if m.CheckConsistency != nil { dAtA[i] = 0xc2 @@ -7300,11 +7454,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size())) - n141, err := m.CheckConsistency.MarshalTo(dAtA[i:]) + n144, err := m.CheckConsistency.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n141 + i += n144 } if m.Noop != nil { dAtA[i] = 0xca @@ -7312,11 +7466,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Noop.Size())) - n142, err := m.Noop.MarshalTo(dAtA[i:]) + n145, err := m.Noop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n142 + i += n145 } if m.InitPut != nil { dAtA[i] = 0xd2 @@ -7324,11 +7478,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size())) - n143, err := m.InitPut.MarshalTo(dAtA[i:]) + n146, err := m.InitPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n143 + i += n146 } if m.TransferLease != nil { dAtA[i] = 0xe2 @@ -7336,11 +7490,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TransferLease.Size())) - n144, err := m.TransferLease.MarshalTo(dAtA[i:]) + n147, err := m.TransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n144 + i += n147 } if m.AdminTransferLease != nil { dAtA[i] = 0xea @@ -7348,11 +7502,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size())) - n145, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) + n148, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n145 + i += n148 } if m.LeaseInfo != nil { dAtA[i] = 0xf2 @@ -7360,11 +7514,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size())) - n146, err := m.LeaseInfo.MarshalTo(dAtA[i:]) + n149, err := m.LeaseInfo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n146 + i += n149 } if m.WriteBatch != nil { dAtA[i] = 0xfa @@ -7372,11 +7526,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size())) - n147, err := m.WriteBatch.MarshalTo(dAtA[i:]) + n150, err := m.WriteBatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n147 + i += n150 } if m.Export != nil { dAtA[i] = 0x82 @@ -7384,11 +7538,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Export.Size())) - n148, err := m.Export.MarshalTo(dAtA[i:]) + n151, err := m.Export.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n148 + i += n151 } if m.QueryTxn != nil { dAtA[i] = 0x8a @@ -7396,11 +7550,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size())) - n149, err := m.QueryTxn.MarshalTo(dAtA[i:]) + n152, err := m.QueryTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n149 + i += n152 } if m.Import != nil { dAtA[i] = 0x92 @@ -7408,11 +7562,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Import.Size())) - n150, err := m.Import.MarshalTo(dAtA[i:]) + n153, err := m.Import.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n150 + i += n153 } if m.AdminChangeReplicas != nil { dAtA[i] = 0x9a @@ -7420,11 +7574,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size())) - n151, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) + n154, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n151 + i += n154 } if m.AdminScatter != nil { dAtA[i] = 0xa2 @@ -7432,11 +7586,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size())) - n152, err := m.AdminScatter.MarshalTo(dAtA[i:]) + n155, err := m.AdminScatter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n152 + i += n155 } if m.AddSstable != nil { dAtA[i] = 0xaa @@ -7444,11 +7598,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size())) - n153, err := m.AddSstable.MarshalTo(dAtA[i:]) + n156, err := m.AddSstable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n153 + i += n156 } if m.ClearRange != nil { dAtA[i] = 0xb2 @@ -7456,11 +7610,23 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size())) - n154, err := m.ClearRange.MarshalTo(dAtA[i:]) + n157, err := m.ClearRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n154 + i += n157 + } + if m.AdjustStats != nil { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AdjustStats.Size())) + n158, err := m.AdjustStats.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n158 } return i, nil } @@ -7484,151 +7650,151 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Get.Size())) - n155, err := m.Get.MarshalTo(dAtA[i:]) + n159, err := m.Get.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n155 + i += n159 } if m.Put != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Put.Size())) - n156, err := m.Put.MarshalTo(dAtA[i:]) + n160, err := m.Put.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n156 + i += n160 } if m.ConditionalPut != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size())) - n157, err := m.ConditionalPut.MarshalTo(dAtA[i:]) + n161, err := m.ConditionalPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n161 } if m.Increment != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size())) - n158, err := m.Increment.MarshalTo(dAtA[i:]) + n162, err := m.Increment.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n158 + i += n162 } if m.Delete != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size())) - n159, err := m.Delete.MarshalTo(dAtA[i:]) + n163, err := m.Delete.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n159 + i += n163 } if m.DeleteRange != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size())) - n160, err := m.DeleteRange.MarshalTo(dAtA[i:]) + n164, err := m.DeleteRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n160 + i += n164 } if m.Scan != nil { dAtA[i] = 0x3a i++ i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size())) - n161, err := m.Scan.MarshalTo(dAtA[i:]) + n165, err := m.Scan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n161 + i += n165 } if m.BeginTransaction != nil { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.BeginTransaction.Size())) - n162, err := m.BeginTransaction.MarshalTo(dAtA[i:]) + n166, err := m.BeginTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n166 } if m.EndTransaction != nil { dAtA[i] = 0x4a i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTransaction.Size())) - n163, err := m.EndTransaction.MarshalTo(dAtA[i:]) + n167, err := m.EndTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n167 } if m.AdminSplit != nil { dAtA[i] = 0x52 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size())) - n164, err := m.AdminSplit.MarshalTo(dAtA[i:]) + n168, err := m.AdminSplit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n168 } if m.AdminMerge != nil { dAtA[i] = 0x5a i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size())) - n165, err := m.AdminMerge.MarshalTo(dAtA[i:]) + n169, err := m.AdminMerge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n169 } if m.HeartbeatTxn != nil { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size())) - n166, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) + n170, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n170 } if m.Gc != nil { dAtA[i] = 0x6a i++ i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size())) - n167, err := m.Gc.MarshalTo(dAtA[i:]) + n171, err := m.Gc.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n167 + i += n171 } if m.PushTxn != nil { dAtA[i] = 0x72 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size())) - n168, err := m.PushTxn.MarshalTo(dAtA[i:]) + n172, err := m.PushTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n168 + i += n172 } if m.RangeLookup != nil { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.RangeLookup.Size())) - n169, err := m.RangeLookup.MarshalTo(dAtA[i:]) + n173, err := m.RangeLookup.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n169 + i += n173 } if m.ResolveIntent != nil { dAtA[i] = 0x82 @@ -7636,11 +7802,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size())) - n170, err := m.ResolveIntent.MarshalTo(dAtA[i:]) + n174, err := m.ResolveIntent.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n174 } if m.ResolveIntentRange != nil { dAtA[i] = 0x8a @@ -7648,11 +7814,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size())) - n171, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) + n175, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n175 } if m.Merge != nil { dAtA[i] = 0x92 @@ -7660,11 +7826,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size())) - n172, err := m.Merge.MarshalTo(dAtA[i:]) + n176, err := m.Merge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n176 } if m.TruncateLog != nil { dAtA[i] = 0x9a @@ -7672,11 +7838,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size())) - n173, err := m.TruncateLog.MarshalTo(dAtA[i:]) + n177, err := m.TruncateLog.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n177 } if m.RequestLease != nil { dAtA[i] = 0xa2 @@ -7684,11 +7850,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size())) - n174, err := m.RequestLease.MarshalTo(dAtA[i:]) + n178, err := m.RequestLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n174 + i += n178 } if m.ReverseScan != nil { dAtA[i] = 0xaa @@ -7696,11 +7862,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size())) - n175, err := m.ReverseScan.MarshalTo(dAtA[i:]) + n179, err := m.ReverseScan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n175 + i += n179 } if m.ComputeChecksum != nil { dAtA[i] = 0xb2 @@ -7708,11 +7874,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size())) - n176, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) + n180, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n176 + i += n180 } if m.DeprecatedVerifyChecksum != nil { dAtA[i] = 0xba @@ -7720,11 +7886,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeprecatedVerifyChecksum.Size())) - n177, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) + n181, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n177 + i += n181 } if m.CheckConsistency != nil { dAtA[i] = 0xc2 @@ -7732,11 +7898,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size())) - n178, err := m.CheckConsistency.MarshalTo(dAtA[i:]) + n182, err := m.CheckConsistency.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n178 + i += n182 } if m.Noop != nil { dAtA[i] = 0xca @@ -7744,11 +7910,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Noop.Size())) - n179, err := m.Noop.MarshalTo(dAtA[i:]) + n183, err := m.Noop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n183 } if m.InitPut != nil { dAtA[i] = 0xd2 @@ -7756,11 +7922,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size())) - n180, err := m.InitPut.MarshalTo(dAtA[i:]) + n184, err := m.InitPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n184 } if m.AdminTransferLease != nil { dAtA[i] = 0xea @@ -7768,11 +7934,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size())) - n181, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) + n185, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n185 } if m.LeaseInfo != nil { dAtA[i] = 0xf2 @@ -7780,11 +7946,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size())) - n182, err := m.LeaseInfo.MarshalTo(dAtA[i:]) + n186, err := m.LeaseInfo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n186 } if m.WriteBatch != nil { dAtA[i] = 0xfa @@ -7792,11 +7958,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size())) - n183, err := m.WriteBatch.MarshalTo(dAtA[i:]) + n187, err := m.WriteBatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n187 } if m.Export != nil { dAtA[i] = 0x82 @@ -7804,11 +7970,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Export.Size())) - n184, err := m.Export.MarshalTo(dAtA[i:]) + n188, err := m.Export.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n188 } if m.QueryTxn != nil { dAtA[i] = 0x8a @@ -7816,11 +7982,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size())) - n185, err := m.QueryTxn.MarshalTo(dAtA[i:]) + n189, err := m.QueryTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n189 } if m.Import != nil { dAtA[i] = 0x92 @@ -7828,11 +7994,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Import.Size())) - n186, err := m.Import.MarshalTo(dAtA[i:]) + n190, err := m.Import.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n190 } if m.AdminChangeReplicas != nil { dAtA[i] = 0x9a @@ -7840,11 +8006,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size())) - n187, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) + n191, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n191 } if m.AdminScatter != nil { dAtA[i] = 0xa2 @@ -7852,11 +8018,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size())) - n188, err := m.AdminScatter.MarshalTo(dAtA[i:]) + n192, err := m.AdminScatter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n192 } if m.AddSstable != nil { dAtA[i] = 0xaa @@ -7864,11 +8030,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size())) - n189, err := m.AddSstable.MarshalTo(dAtA[i:]) + n193, err := m.AddSstable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n189 + i += n193 } if m.ClearRange != nil { dAtA[i] = 0xb2 @@ -7876,11 +8042,23 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size())) - n190, err := m.ClearRange.MarshalTo(dAtA[i:]) + n194, err := m.ClearRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n194 + } + if m.AdjustStats != nil { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AdjustStats.Size())) + n195, err := m.AdjustStats.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n195 } return i, nil } @@ -7903,19 +8081,19 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n191, err := m.Timestamp.MarshalTo(dAtA[i:]) + n196, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n196 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Replica.Size())) - n192, err := m.Replica.MarshalTo(dAtA[i:]) + n197, err := m.Replica.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n197 if m.RangeID != 0 { dAtA[i] = 0x18 i++ @@ -7931,11 +8109,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n193, err := m.Txn.MarshalTo(dAtA[i:]) + n198, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n198 } if m.ReadConsistency != 0 { dAtA[i] = 0x30 @@ -7976,11 +8154,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.ScanOptions.Size())) - n194, err := m.ScanOptions.MarshalTo(dAtA[i:]) + n199, err := m.ScanOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n194 + i += n199 } return i, nil } @@ -8003,11 +8181,11 @@ func (m *BatchRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Header.Size())) - n195, err := m.Header.MarshalTo(dAtA[i:]) + n200, err := m.Header.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n195 + i += n200 if len(m.Requests) > 0 { for _, msg := range m.Requests { dAtA[i] = 0x12 @@ -8041,11 +8219,11 @@ func (m *BatchResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.BatchResponse_Header.Size())) - n196, err := m.BatchResponse_Header.MarshalTo(dAtA[i:]) + n201, err := m.BatchResponse_Header.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n196 + i += n201 if len(m.Responses) > 0 { for _, msg := range m.Responses { dAtA[i] = 0x12 @@ -8080,38 +8258,38 @@ func (m *BatchResponse_Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Error.Size())) - n197, err := m.Error.MarshalTo(dAtA[i:]) + n202, err := m.Error.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n197 + i += n202 } dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n198, err := m.Timestamp.MarshalTo(dAtA[i:]) + n203, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n198 + i += n203 if m.Txn != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n199, err := m.Txn.MarshalTo(dAtA[i:]) + n204, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n199 + i += n204 } dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n200, err := m.Now.MarshalTo(dAtA[i:]) + n205, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n200 + i += n205 if len(m.CollectedSpans) > 0 { for _, msg := range m.CollectedSpans { dAtA[i] = 0x32 @@ -8440,6 +8618,31 @@ func (m *CheckConsistencyResponse) Size() (n int) { return n } +func (m *AdjustStatsRequest) Size() (n int) { + var l int + _ = l + l = m.Span.Size() + n += 1 + l + sovApi(uint64(l)) + l = len(m.ComputationEndKey) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.DryRun { + n += 2 + } + return n +} + +func (m *AdjustStatsResponse) Size() (n int) { + var l int + _ = l + l = m.ResponseHeader.Size() + n += 1 + l + sovApi(uint64(l)) + l = m.AddedDelta.Size() + n += 1 + l + sovApi(uint64(l)) + return n +} + func (m *BeginTransactionRequest) Size() (n int) { var l int _ = l @@ -9399,6 +9602,10 @@ func (m *RequestUnion) Size() (n int) { l = m.ClearRange.Size() n += 2 + l + sovApi(uint64(l)) } + if m.AdjustStats != nil { + l = m.AdjustStats.Size() + n += 2 + l + sovApi(uint64(l)) + } return n } @@ -9549,6 +9756,10 @@ func (m *ResponseUnion) Size() (n int) { l = m.ClearRange.Size() n += 2 + l + sovApi(uint64(l)) } + if m.AdjustStats != nil { + l = m.AdjustStats.Size() + n += 2 + l + sovApi(uint64(l)) + } return n } @@ -9768,6 +9979,9 @@ func (this *RequestUnion) GetValue() interface{} { if this.ClearRange != nil { return this.ClearRange } + if this.AdjustStats != nil { + return this.AdjustStats + } return nil } @@ -9847,6 +10061,8 @@ func (this *RequestUnion) SetValue(value interface{}) bool { this.AddSstable = vt case *ClearRangeRequest: this.ClearRange = vt + case *AdjustStatsRequest: + this.AdjustStats = vt default: return false } @@ -9961,6 +10177,9 @@ func (this *ResponseUnion) GetValue() interface{} { if this.ClearRange != nil { return this.ClearRange } + if this.AdjustStats != nil { + return this.AdjustStats + } return nil } @@ -10038,6 +10257,8 @@ func (this *ResponseUnion) SetValue(value interface{}) bool { this.AddSstable = vt case *ClearRangeResponse: this.ClearRange = vt + case *AdjustStatsResponse: + this.AdjustStats = vt default: return false } @@ -12014,7 +12235,226 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field StopAtRangeBoundary", wireType) } - var v int + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StopAtRangeBoundary = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinResults", wireType) + } + m.MinResults = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinResults |= (int64(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 (m *ScanRequest) 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: ScanRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Span", 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 err := m.Span.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReturnIntents", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReturnIntents = bool(v != 0) + 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 *ScanResponse) 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: ScanResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", 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 err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rows", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -12024,17 +12464,28 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - m.StopAtRangeBoundary = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinResults", wireType) + if msglen < 0 { + return ErrInvalidLengthApi } - m.MinResults = 0 + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rows = append(m.Rows, KeyValue{}) + if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IntentRows", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -12044,11 +12495,23 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.MinResults |= (int64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IntentRows = append(m.IntentRows, KeyValue{}) + if err := m.IntentRows[len(m.IntentRows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12070,7 +12533,7 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *ScanRequest) Unmarshal(dAtA []byte) error { +func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12093,10 +12556,10 @@ func (m *ScanRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ScanRequest: wiretype end group for non-group") + return fmt.Errorf("proto: ReverseScanRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ReverseScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12170,7 +12633,7 @@ func (m *ScanRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ScanResponse) Unmarshal(dAtA []byte) error { +func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12193,10 +12656,10 @@ func (m *ScanResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ScanResponse: wiretype end group for non-group") + return fmt.Errorf("proto: ReverseScanResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ReverseScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12312,7 +12775,7 @@ func (m *ScanResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { +func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12335,10 +12798,10 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ReverseScanRequest: wiretype end group for non-group") + return fmt.Errorf("proto: CheckConsistencyRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ReverseScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CheckConsistencyRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12371,9 +12834,9 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReturnIntents", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WithDiff", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -12390,7 +12853,7 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { break } } - m.ReturnIntents = bool(v != 0) + m.WithDiff = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12412,7 +12875,7 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { +func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12435,10 +12898,10 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ReverseScanResponse: wiretype end group for non-group") + return fmt.Errorf("proto: CheckConsistencyResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ReverseScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CheckConsistencyResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12471,68 +12934,6 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rows", 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 - } - m.Rows = append(m.Rows, KeyValue{}) - if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IntentRows", 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 - } - m.IntentRows = append(m.IntentRows, KeyValue{}) - if err := m.IntentRows[len(m.IntentRows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12554,7 +12955,7 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { +func (m *AdjustStatsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12577,10 +12978,10 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CheckConsistencyRequest: wiretype end group for non-group") + return fmt.Errorf("proto: AdjustStatsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CheckConsistencyRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AdjustStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12614,8 +13015,39 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ComputationEndKey", 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.ComputationEndKey = append(m.ComputationEndKey[:0], dAtA[iNdEx:postIndex]...) + if m.ComputationEndKey == nil { + m.ComputationEndKey = []byte{} + } + iNdEx = postIndex + case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WithDiff", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -12632,7 +13064,7 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { break } } - m.WithDiff = bool(v != 0) + m.DryRun = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12654,7 +13086,7 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { +func (m *AdjustStatsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12677,10 +13109,10 @@ func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CheckConsistencyResponse: wiretype end group for non-group") + return fmt.Errorf("proto: AdjustStatsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CheckConsistencyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AdjustStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12713,6 +13145,36 @@ func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AddedDelta", 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 err := m.AddedDelta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -21346,6 +21808,39 @@ func (m *RequestUnion) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 39: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdjustStats", 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.AdjustStats == nil { + m.AdjustStats = &AdjustStatsRequest{} + } + if err := m.AdjustStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -22584,6 +23079,39 @@ func (m *ResponseUnion) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 39: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdjustStats", 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.AdjustStats == nil { + m.AdjustStats = &AdjustStatsResponse{} + } + if err := m.AdjustStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -23445,321 +23973,329 @@ var ( func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 5043 bytes of a gzipped FileDescriptorProto + // 5180 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5c, 0x4d, 0x6c, 0x1b, 0x49, - 0x76, 0x76, 0x8b, 0xa4, 0x44, 0x3e, 0xfe, 0x98, 0x2a, 0xcb, 0x36, 0x2d, 0xdb, 0xa2, 0x4c, 0x5b, - 0x1e, 0x8f, 0x77, 0x46, 0x1a, 0x5b, 0x71, 0x32, 0x33, 0x3b, 0x93, 0x1d, 0x91, 0x92, 0x6d, 0x8e, - 0x65, 0xc9, 0x53, 0xa4, 0xe6, 0x6f, 0x93, 0xed, 0xb4, 0xba, 0x4b, 0x64, 0xc7, 0x64, 0x37, 0xdd, - 0x5d, 0xb4, 0xa4, 0xc9, 0x21, 0x7f, 0x08, 0x92, 0xc3, 0x26, 0x58, 0x20, 0x73, 0x08, 0x10, 0x20, - 0x59, 0x20, 0x09, 0x10, 0x20, 0xa7, 0x1c, 0x72, 0xce, 0x25, 0x87, 0x09, 0xb2, 0x08, 0xe6, 0x90, - 0x00, 0x41, 0x02, 0x08, 0x89, 0x72, 0x59, 0x6c, 0x72, 0xcb, 0x6d, 0x02, 0x04, 0x41, 0xfd, 0x34, - 0xd9, 0x24, 0xbb, 0x49, 0x49, 0xd3, 0x8b, 0x41, 0x72, 0x22, 0xeb, 0x75, 0xbd, 0x57, 0x55, 0xaf, - 0x5e, 0xbd, 0xfa, 0xaa, 0xde, 0xeb, 0x86, 0x59, 0xc7, 0xd6, 0xf4, 0x66, 0x67, 0x77, 0x45, 0xeb, - 0x98, 0xcb, 0x1d, 0xc7, 0xa6, 0x36, 0x9a, 0xd5, 0x6d, 0xfd, 0x39, 0x27, 0x2f, 0xcb, 0x87, 0xf3, - 0xc8, 0xab, 0x65, 0x68, 0x54, 0x13, 0xd5, 0xe6, 0xe7, 0x3c, 0x1a, 0x71, 0x1c, 0xdb, 0x71, 0x25, - 0xf5, 0x92, 0x47, 0x6d, 0x13, 0xaa, 0xf9, 0x6a, 0xdf, 0x74, 0xa9, 0xed, 0x68, 0x0d, 0xb2, 0x42, - 0xac, 0x86, 0x69, 0x79, 0x3f, 0xac, 0xde, 0x4b, 0x5d, 0x5f, 0x95, 0x95, 0x0a, 0x5d, 0x6a, 0xb6, - 0x56, 0x9a, 0x2d, 0x7d, 0x85, 0x9a, 0x6d, 0xe2, 0x52, 0xad, 0xdd, 0x91, 0x4f, 0x16, 0xf9, 0x13, - 0xea, 0x68, 0xba, 0x69, 0x35, 0x56, 0x1c, 0xa2, 0xdb, 0x8e, 0x41, 0x0c, 0xd5, 0xed, 0x68, 0x96, - 0xd7, 0x9d, 0x86, 0xdd, 0xb0, 0xf9, 0xdf, 0x15, 0xf6, 0x4f, 0x50, 0x4b, 0xbf, 0x0a, 0x29, 0xac, - 0x59, 0x0d, 0x52, 0xb5, 0xf6, 0x6c, 0xf4, 0x0e, 0xc4, 0x0d, 0xe2, 0xea, 0x05, 0x65, 0x51, 0xb9, - 0x93, 0xbe, 0x5f, 0x5a, 0x1e, 0x19, 0xe7, 0x32, 0xaf, 0xbb, 0x4e, 0x5c, 0xdd, 0x31, 0x3b, 0xd4, - 0x76, 0xca, 0xf1, 0x2f, 0x8e, 0x8a, 0xe7, 0x30, 0xe7, 0x42, 0x3f, 0x03, 0x89, 0x16, 0xd1, 0x5c, - 0x52, 0x98, 0xe2, 0xec, 0x85, 0x00, 0xf6, 0x4d, 0xf6, 0x5c, 0x32, 0x89, 0xca, 0xa5, 0xef, 0xc7, - 0x20, 0x87, 0x89, 0xdb, 0xb1, 0x2d, 0x97, 0x3c, 0x26, 0x9a, 0x41, 0x1c, 0xf4, 0x06, 0xc4, 0xe8, - 0x81, 0x55, 0x88, 0x71, 0x31, 0x0b, 0x01, 0x62, 0xea, 0x8e, 0x66, 0xb9, 0x9a, 0x4e, 0x4d, 0xdb, - 0xc2, 0xac, 0x2a, 0x7a, 0x13, 0xd2, 0x0e, 0x71, 0xbb, 0x6d, 0xc2, 0x07, 0x5c, 0x88, 0x73, 0xce, - 0xcb, 0x01, 0x9c, 0xb5, 0x8e, 0x66, 0x61, 0x10, 0x75, 0xd9, 0x7f, 0x74, 0x05, 0x92, 0x56, 0xb7, - 0xad, 0x3e, 0x27, 0x87, 0x6e, 0x21, 0xb1, 0xa8, 0xdc, 0x89, 0xe1, 0x19, 0xab, 0xdb, 0x7e, 0x42, - 0x0e, 0x5d, 0x54, 0x81, 0xb4, 0xc3, 0x86, 0xab, 0x9a, 0xd6, 0x9e, 0xed, 0x16, 0xa6, 0x17, 0x63, - 0x77, 0xd2, 0xf7, 0xaf, 0x85, 0x29, 0x85, 0x29, 0x50, 0x8e, 0x0c, 0x1c, 0x8f, 0xe0, 0xa2, 0x1a, - 0x64, 0x65, 0xcf, 0x1c, 0xa2, 0xb9, 0xb6, 0x55, 0x98, 0x59, 0x54, 0xee, 0xe4, 0xee, 0x2f, 0x07, - 0x89, 0x19, 0xd0, 0x02, 0x2b, 0x76, 0xdb, 0x04, 0x73, 0x2e, 0x9c, 0x71, 0x7c, 0xa5, 0xd2, 0x27, - 0x90, 0xf1, 0x3f, 0x45, 0x08, 0x72, 0x78, 0xa3, 0xb6, 0xf3, 0x74, 0x43, 0xdd, 0xd9, 0x7a, 0xb2, - 0xb5, 0xfd, 0xd1, 0x56, 0xfe, 0x1c, 0x9a, 0x83, 0xbc, 0xa4, 0x3d, 0xd9, 0xf8, 0x44, 0xdd, 0xac, - 0x3e, 0xad, 0xd6, 0xf3, 0x0a, 0xba, 0x02, 0x17, 0x25, 0x15, 0xaf, 0x6d, 0x3d, 0xda, 0x50, 0xcb, - 0xdb, 0x3b, 0x5b, 0xeb, 0x6b, 0xf8, 0x93, 0xfc, 0xd4, 0x7c, 0xfc, 0x77, 0xfe, 0x64, 0xe1, 0x5c, - 0xe9, 0x29, 0xc0, 0x23, 0x42, 0x31, 0x79, 0xd1, 0x25, 0x2e, 0x45, 0x6f, 0xc1, 0x74, 0x93, 0xf7, - 0x46, 0x9a, 0x44, 0x98, 0x4a, 0xcb, 0x49, 0x36, 0xf0, 0x2f, 0x8f, 0x8a, 0x0a, 0x96, 0x0c, 0x6f, - 0xc7, 0x7f, 0xfc, 0xc3, 0xa2, 0x52, 0xfa, 0x0d, 0x05, 0xd2, 0x5c, 0x9e, 0x18, 0x1a, 0xaa, 0x0c, - 0x09, 0xbc, 0x31, 0x51, 0x0f, 0xa3, 0xa2, 0xd1, 0x32, 0x24, 0x5e, 0x6a, 0xad, 0xee, 0x38, 0x43, - 0xfb, 0x90, 0x3d, 0xc7, 0xa2, 0x5a, 0xe9, 0x2f, 0x15, 0x80, 0x67, 0xdd, 0x08, 0x06, 0xc5, 0x4c, - 0xfc, 0x44, 0x2d, 0x7b, 0x26, 0xce, 0x2b, 0xa3, 0x4b, 0x30, 0x6d, 0x5a, 0x2d, 0xd3, 0x22, 0xdc, - 0xa4, 0x93, 0x58, 0x96, 0xd0, 0x1c, 0x24, 0x76, 0x5b, 0xa6, 0x65, 0x70, 0x7b, 0x4d, 0x62, 0x51, - 0x90, 0x8a, 0xc3, 0x90, 0xe6, 0x5d, 0x8e, 0x50, 0x6f, 0xa5, 0x7f, 0x51, 0xe0, 0x62, 0xc5, 0xb6, - 0x0c, 0x93, 0x2d, 0x1c, 0xad, 0xf5, 0x4d, 0xaa, 0xe4, 0x01, 0xa4, 0xc8, 0x41, 0x47, 0x15, 0x9c, - 0xb1, 0x09, 0xd3, 0x98, 0x24, 0x07, 0x1d, 0xfe, 0x6f, 0xac, 0xc6, 0x7e, 0x11, 0x2e, 0x0d, 0x0f, - 0x2e, 0x4a, 0xe5, 0xfd, 0xad, 0x02, 0xb9, 0xaa, 0x65, 0xd2, 0x6f, 0x52, 0x6b, 0xbd, 0xe1, 0xc7, - 0x7c, 0xc3, 0x47, 0x77, 0x21, 0xbf, 0xa7, 0x99, 0xad, 0x6d, 0xab, 0x6e, 0xb7, 0x77, 0x5d, 0x6a, - 0x5b, 0xc4, 0x95, 0xfa, 0x19, 0xa1, 0x4b, 0x55, 0x7d, 0x08, 0xe7, 0x7b, 0x43, 0x89, 0x52, 0x47, - 0x2f, 0x20, 0x5f, 0xb5, 0x74, 0x87, 0xb4, 0x89, 0x15, 0x85, 0x92, 0xae, 0x41, 0xca, 0xf4, 0xc4, - 0x71, 0x45, 0xc5, 0x70, 0x9f, 0x20, 0x87, 0xd2, 0x85, 0x59, 0x5f, 0x93, 0x51, 0x7a, 0x99, 0xab, - 0x90, 0xb2, 0xc8, 0xbe, 0xda, 0x9f, 0xa6, 0x18, 0x4e, 0x5a, 0x64, 0x9f, 0x4f, 0x4b, 0xe9, 0x19, - 0x64, 0xd7, 0x49, 0x8b, 0x50, 0x12, 0x99, 0xa7, 0xdc, 0x81, 0x9c, 0x27, 0x31, 0xca, 0x29, 0xf9, - 0x5c, 0x01, 0x24, 0xe5, 0xb2, 0x4d, 0x29, 0x82, 0x59, 0x29, 0xb2, 0xbd, 0x96, 0x76, 0x1d, 0x4b, - 0x6c, 0x9a, 0xc2, 0x14, 0x41, 0x90, 0xf8, 0xbe, 0xd9, 0x77, 0x77, 0x71, 0xbf, 0xbb, 0x13, 0xe3, - 0x7c, 0x3f, 0x9e, 0x9c, 0xca, 0xc7, 0x4a, 0xfb, 0x70, 0x61, 0xa0, 0x57, 0xd1, 0x4e, 0x5c, 0x9c, - 0xf7, 0x6c, 0x6a, 0x31, 0x76, 0x27, 0x53, 0x9e, 0xf9, 0xea, 0xa8, 0x18, 0x7b, 0x42, 0x0e, 0x31, - 0x27, 0x96, 0xea, 0x30, 0x5b, 0x69, 0x11, 0xcd, 0x89, 0x48, 0x1b, 0x72, 0xf2, 0x3e, 0x01, 0xe4, - 0x97, 0x1a, 0xe5, 0x04, 0x9a, 0x90, 0xae, 0xe9, 0x9a, 0xb5, 0xdd, 0x61, 0x7e, 0xcd, 0x45, 0xab, - 0x70, 0xc9, 0xa5, 0x76, 0x47, 0xd5, 0xa8, 0x2a, 0xc0, 0xc9, 0xae, 0xdd, 0xb5, 0x0c, 0xcd, 0x39, - 0xe4, 0x6d, 0x24, 0xf1, 0x05, 0xf6, 0x74, 0x8d, 0xf2, 0x8e, 0x94, 0xe5, 0x23, 0x36, 0x65, 0x6d, - 0xd3, 0x52, 0x19, 0x86, 0x68, 0x51, 0x57, 0x1a, 0x33, 0xb4, 0x4d, 0x0b, 0x0b, 0x8a, 0x1c, 0xc5, - 0xaf, 0x88, 0xa6, 0x22, 0xb0, 0x91, 0x25, 0xc8, 0x49, 0x1b, 0x31, 0x2d, 0x4a, 0x2c, 0xea, 0x99, - 0x49, 0x56, 0x50, 0xab, 0x82, 0x38, 0x60, 0x11, 0x7f, 0xaf, 0x40, 0x46, 0xb4, 0x1e, 0xa5, 0x2d, - 0x3c, 0x80, 0xb8, 0x63, 0xef, 0x0b, 0x5b, 0x48, 0xdf, 0xbf, 0x1a, 0x20, 0xe2, 0x09, 0x39, 0xf4, - 0x7b, 0x5a, 0x5e, 0x1d, 0x95, 0x21, 0x2d, 0x3a, 0xae, 0x72, 0xee, 0xd8, 0x49, 0xb9, 0x41, 0x70, - 0x61, 0x7b, 0xdf, 0x65, 0xd0, 0x07, 0x61, 0xf2, 0x92, 0x38, 0x2e, 0xf9, 0xe6, 0xb4, 0xfa, 0x8f, - 0x0a, 0x5c, 0x18, 0xe8, 0xc4, 0xff, 0x13, 0xe5, 0xee, 0xc3, 0xe5, 0x4a, 0x93, 0xe8, 0xcf, 0x2b, - 0xb6, 0xe5, 0x9a, 0x2e, 0x25, 0x96, 0x7e, 0x18, 0x81, 0x82, 0xaf, 0x42, 0x6a, 0xdf, 0xa4, 0x4d, - 0xd5, 0x30, 0xf7, 0xf6, 0xf8, 0x2a, 0x49, 0xe2, 0x24, 0x23, 0xac, 0x9b, 0x7b, 0x7b, 0x72, 0x8d, - 0xa8, 0x50, 0x18, 0x6d, 0x38, 0xca, 0xf5, 0xfe, 0x29, 0x5c, 0x2e, 0x93, 0x86, 0x69, 0xf9, 0xcf, - 0x38, 0x51, 0xb9, 0x29, 0x15, 0x0a, 0xa3, 0xb2, 0xa3, 0xec, 0xfc, 0xaf, 0xc5, 0xe0, 0xe2, 0x86, - 0x65, 0x44, 0xda, 0x77, 0xb6, 0x9f, 0xe8, 0x76, 0xbb, 0x6d, 0x52, 0x39, 0x25, 0xb2, 0x84, 0xde, - 0x82, 0xa4, 0x41, 0x34, 0xa3, 0x07, 0xac, 0xd3, 0xf7, 0xaf, 0xfb, 0x84, 0xb2, 0xf3, 0xf0, 0x72, - 0xb3, 0xa5, 0x2f, 0xd7, 0xbd, 0x93, 0x32, 0xee, 0x55, 0x47, 0xbf, 0x04, 0x97, 0x99, 0x31, 0x39, - 0x96, 0xd6, 0x52, 0x85, 0x34, 0x95, 0x3a, 0x66, 0xa3, 0x41, 0x1c, 0x79, 0x76, 0xbc, 0x13, 0xd0, - 0xbd, 0xaa, 0xe4, 0xa8, 0x70, 0x86, 0xba, 0xa8, 0x8f, 0x2f, 0x9a, 0x41, 0x64, 0xf4, 0x1e, 0x64, - 0xa4, 0x91, 0xb3, 0x13, 0x29, 0x3b, 0x5b, 0xc6, 0xc6, 0x8d, 0x5a, 0x58, 0xb8, 0x5c, 0x17, 0x8c, - 0xe2, 0xa2, 0x15, 0xb6, 0xcf, 0xbe, 0xe8, 0x9a, 0x0e, 0x51, 0xef, 0x75, 0xf4, 0xc2, 0x34, 0x1b, - 0x7b, 0x39, 0x77, 0x7c, 0x54, 0x04, 0x2c, 0xc8, 0xf7, 0x9e, 0x55, 0xd8, 0xbe, 0x2b, 0xfe, 0x77, - 0x74, 0x39, 0xc7, 0xbf, 0xaf, 0xc0, 0xa5, 0xe1, 0x29, 0x88, 0x72, 0xd1, 0xdf, 0x81, 0xbc, 0x6d, - 0x11, 0xb5, 0xd3, 0xd4, 0x5c, 0x22, 0x75, 0x27, 0xf7, 0xf9, 0x9c, 0x6d, 0x91, 0x67, 0x8c, 0x2c, - 0x34, 0x21, 0x3c, 0xd0, 0xfb, 0xf1, 0x64, 0x2c, 0x1f, 0x2f, 0x7d, 0x06, 0xb3, 0x6b, 0x46, 0xdb, - 0xb4, 0x6a, 0x9d, 0x96, 0x19, 0x05, 0x34, 0xbc, 0x05, 0x29, 0x97, 0x89, 0x62, 0x18, 0x84, 0x9b, - 0x85, 0x6f, 0xa3, 0x4f, 0xf2, 0x27, 0x4f, 0xc8, 0x61, 0x7f, 0x73, 0xf6, 0xb7, 0x1d, 0xa5, 0xbd, - 0xd7, 0xe5, 0xb0, 0x9e, 0x12, 0x27, 0x5a, 0x34, 0xe1, 0x97, 0x1a, 0x65, 0x87, 0x7f, 0x5d, 0x81, - 0x2b, 0x5c, 0x36, 0xb7, 0x8f, 0x3d, 0xe2, 0xf0, 0x1b, 0x99, 0x08, 0x26, 0xe4, 0x26, 0x4c, 0x53, - 0xcd, 0x69, 0x10, 0xb1, 0x48, 0x13, 0xe5, 0xf4, 0x57, 0x47, 0xc5, 0x99, 0x1a, 0xb5, 0x1d, 0x52, - 0x5d, 0xc7, 0xf2, 0x91, 0x1c, 0x9e, 0x06, 0xf3, 0x41, 0x5d, 0x88, 0x72, 0x98, 0x3f, 0x51, 0x64, - 0x1b, 0x95, 0xa6, 0x40, 0x64, 0x9d, 0x96, 0xa9, 0x6b, 0x6e, 0x04, 0xe3, 0xdc, 0x80, 0xb4, 0xce, - 0x65, 0xaa, 0xf4, 0xb0, 0x23, 0xce, 0x05, 0xb9, 0xfb, 0xb7, 0x02, 0xfb, 0xc8, 0xdb, 0x14, 0x1d, - 0xa8, 0x1f, 0x76, 0x08, 0x06, 0xbd, 0xf7, 0x1f, 0xad, 0xc3, 0x8c, 0xd0, 0x89, 0xb7, 0xff, 0x8d, - 0x11, 0xc1, 0xd6, 0x70, 0x9d, 0x57, 0x96, 0x6e, 0xc2, 0x63, 0x95, 0xfa, 0xdc, 0x85, 0xab, 0x81, - 0x63, 0x8d, 0xfa, 0x18, 0xc1, 0x31, 0xe5, 0xa6, 0x6d, 0x3f, 0xef, 0x76, 0x22, 0x50, 0xe4, 0x75, - 0x80, 0xb6, 0x76, 0x20, 0x40, 0xac, 0x80, 0xa4, 0x09, 0x9c, 0x6a, 0x6b, 0x07, 0xbc, 0x15, 0x17, - 0x15, 0x60, 0xc6, 0x11, 0xb8, 0x45, 0x7a, 0x17, 0xaf, 0xd8, 0x83, 0x37, 0xcc, 0xad, 0xfc, 0x17, - 0x83, 0x37, 0xfe, 0x6e, 0x45, 0xe9, 0xe9, 0xde, 0x83, 0xe9, 0x5e, 0xef, 0x62, 0xa7, 0xba, 0x0f, - 0x95, 0x7c, 0x68, 0x07, 0x66, 0x3b, 0x0e, 0xd9, 0x23, 0x54, 0x6f, 0x12, 0xc3, 0x1b, 0x6a, 0xec, - 0x94, 0xc2, 0xf2, 0x7d, 0x11, 0x42, 0x37, 0xa5, 0xdf, 0x55, 0xe0, 0xc2, 0x63, 0xa2, 0x39, 0x74, - 0x97, 0x68, 0xb4, 0x7e, 0x10, 0xc5, 0x1e, 0xfb, 0x00, 0x62, 0x96, 0xbd, 0x2f, 0x6f, 0x23, 0xc6, - 0x6f, 0xa3, 0xb2, 0x5b, 0xac, 0xbe, 0x34, 0xc0, 0xef, 0xc2, 0xdc, 0x60, 0x77, 0xa2, 0xb4, 0xbc, - 0x3f, 0x8f, 0x41, 0xea, 0x51, 0x25, 0x82, 0x21, 0xbe, 0x23, 0x8f, 0x85, 0xe1, 0xfa, 0xef, 0x35, - 0xb3, 0xfc, 0xa8, 0xf2, 0x84, 0x1c, 0x7a, 0xa0, 0x95, 0x71, 0xa1, 0x35, 0x48, 0xd1, 0xa6, 0x43, - 0xdc, 0xa6, 0xdd, 0x32, 0x24, 0x46, 0x38, 0x91, 0x9a, 0xfa, 0x5c, 0xa8, 0x05, 0x17, 0xe9, 0x81, - 0xc5, 0xf1, 0x80, 0xda, 0xd0, 0xd5, 0xbe, 0xb8, 0xc4, 0x49, 0xc4, 0xcd, 0x33, 0x71, 0xc7, 0x47, - 0x45, 0x54, 0x3f, 0xb0, 0xd8, 0x08, 0x1f, 0x55, 0xea, 0x9e, 0x00, 0x8c, 0xa8, 0xa4, 0xe9, 0x3d, - 0xda, 0xfc, 0x73, 0x48, 0xf0, 0x51, 0xa0, 0x2b, 0x10, 0x63, 0x9b, 0xa4, 0x32, 0xb8, 0x49, 0x32, - 0x1a, 0x1f, 0x94, 0xd7, 0xc0, 0x69, 0xe6, 0xbe, 0xcf, 0x25, 0x2c, 0x40, 0xda, 0xc1, 0x07, 0x00, - 0x4c, 0x85, 0x51, 0xce, 0xfe, 0x5f, 0xc5, 0x20, 0xf7, 0xac, 0xeb, 0x36, 0xa3, 0xb1, 0xf2, 0x0a, - 0x40, 0xa7, 0xeb, 0x36, 0x89, 0xa3, 0xd2, 0x03, 0x4b, 0x0e, 0x78, 0x42, 0x7c, 0xc1, 0x1b, 0xb1, - 0xe0, 0xab, 0x1f, 0x58, 0x68, 0x5b, 0x0a, 0x21, 0x6a, 0x3f, 0x48, 0x71, 0xd7, 0x27, 0x44, 0xc6, - 0x71, 0x96, 0x45, 0x00, 0x67, 0xd9, 0x8b, 0xe3, 0x2c, 0xd7, 0x0f, 0xac, 0xa7, 0x84, 0x6a, 0x03, - 0x02, 0x09, 0x13, 0xf8, 0x0e, 0xcc, 0xb0, 0x82, 0x4a, 0xed, 0xd3, 0x18, 0xd6, 0x34, 0xe3, 0xa9, - 0xdb, 0xde, 0xca, 0x4d, 0x9c, 0x6e, 0xe5, 0xa2, 0x6f, 0x43, 0x4a, 0x34, 0xca, 0x76, 0xb1, 0x69, - 0xbe, 0x8b, 0x05, 0x69, 0x42, 0xea, 0x9e, 0xef, 0x5f, 0x49, 0xde, 0x22, 0xdb, 0xbd, 0xe6, 0x20, - 0xb1, 0x67, 0x3b, 0x3a, 0xe1, 0xc1, 0x8c, 0x24, 0x16, 0x85, 0x9e, 0x63, 0x4e, 0xe6, 0x53, 0xa5, - 0x3f, 0x54, 0xe0, 0x7c, 0x6f, 0xde, 0xa2, 0x74, 0xca, 0x95, 0x01, 0xed, 0x9f, 0x7e, 0x0a, 0x99, - 0xc6, 0x4b, 0x7f, 0x36, 0x05, 0xe7, 0x3f, 0xe8, 0x12, 0xe7, 0x30, 0x1a, 0xb3, 0x2a, 0x8b, 0x78, - 0xd5, 0xd4, 0x19, 0x4d, 0x81, 0x47, 0xb0, 0x6e, 0xc3, 0xf9, 0x7d, 0xcd, 0xa4, 0xea, 0x9e, 0xed, - 0xa8, 0xdd, 0x8e, 0xa1, 0x51, 0x2f, 0x58, 0x90, 0x65, 0xe4, 0x87, 0xb6, 0xb3, 0xc3, 0x89, 0x88, - 0x00, 0x7a, 0x6e, 0xd9, 0xfb, 0x96, 0xca, 0xc8, 0xa6, 0xd5, 0x60, 0x6a, 0x70, 0x0b, 0x71, 0x7e, - 0xd5, 0xf5, 0x73, 0xff, 0x7c, 0x54, 0x5c, 0x6d, 0x98, 0xb4, 0xd9, 0xdd, 0x5d, 0xd6, 0xed, 0xf6, - 0x4a, 0xaf, 0x23, 0xc6, 0x6e, 0xff, 0xff, 0x4a, 0xe7, 0x79, 0x63, 0x85, 0x07, 0x0b, 0xbb, 0x5d, - 0xd3, 0x58, 0xde, 0xd9, 0xa9, 0xae, 0xe3, 0x3c, 0x17, 0xf9, 0x91, 0x90, 0x58, 0x3f, 0xb0, 0x3c, - 0x64, 0xf1, 0x95, 0x02, 0xf9, 0xbe, 0x9e, 0xa2, 0x9c, 0xc6, 0x0d, 0x48, 0xbf, 0xe8, 0x12, 0xc7, - 0x24, 0xc6, 0xa9, 0xe7, 0x11, 0x24, 0x23, 0x5b, 0x3a, 0x9f, 0x42, 0x66, 0x40, 0x0f, 0xb1, 0xaf, - 0xa7, 0x87, 0xf4, 0x7e, 0x5f, 0x05, 0xa5, 0xff, 0x51, 0x60, 0x0e, 0x13, 0xd7, 0x6e, 0xbd, 0x24, - 0xe2, 0x66, 0x25, 0x02, 0x4b, 0xd9, 0x06, 0x79, 0x89, 0xa1, 0x7e, 0x1d, 0x83, 0x49, 0x09, 0x19, - 0xc2, 0x77, 0x4c, 0xbb, 0x54, 0xa3, 0x5d, 0x71, 0x15, 0x14, 0x8c, 0x44, 0x7d, 0x2a, 0xac, 0xf1, - 0xba, 0x58, 0xf2, 0xb0, 0x93, 0x75, 0xc7, 0x36, 0x5d, 0xdb, 0xf2, 0x6e, 0x6a, 0x45, 0x49, 0xce, - 0xfe, 0x2f, 0xc0, 0xc5, 0xa1, 0xf1, 0x47, 0xe9, 0xd9, 0x7f, 0x73, 0x0a, 0xae, 0x0c, 0x8a, 0x8f, - 0xe8, 0x7e, 0xfa, 0xff, 0x94, 0x8e, 0x73, 0x90, 0xd9, 0xb2, 0xed, 0x1e, 0x70, 0x2d, 0x65, 0x21, - 0x2d, 0xca, 0x5c, 0x0d, 0xec, 0xa8, 0x14, 0xa4, 0xa3, 0x28, 0xe7, 0xe1, 0xb7, 0x14, 0xc8, 0x44, - 0x74, 0x7c, 0x3d, 0x5b, 0x54, 0x4b, 0x6a, 0xa2, 0x0e, 0xd9, 0x9f, 0xc2, 0x79, 0xf7, 0x8f, 0x14, - 0x40, 0x75, 0xa7, 0x6b, 0xe9, 0x1a, 0x25, 0x9b, 0x76, 0x23, 0x82, 0x31, 0xce, 0x41, 0xc2, 0xb4, - 0x0c, 0x72, 0xc0, 0xc7, 0x18, 0xc7, 0xa2, 0x80, 0xee, 0x41, 0x52, 0xe6, 0x0a, 0x88, 0xe0, 0x5c, - 0xac, 0x7c, 0xe9, 0xf8, 0xa8, 0x38, 0x23, 0x32, 0x03, 0xd6, 0xbf, 0xea, 0xff, 0xc5, 0x33, 0x22, - 0x39, 0xc0, 0x8b, 0x5a, 0x7e, 0x0a, 0x17, 0x06, 0xfa, 0x17, 0xe5, 0xe0, 0xff, 0x8e, 0x5f, 0xfe, - 0xf2, 0x11, 0x47, 0x75, 0xcc, 0x3f, 0x53, 0x8e, 0x07, 0x7a, 0x17, 0xa0, 0xe3, 0x90, 0x97, 0xaa, - 0x60, 0x8d, 0x9d, 0x88, 0x35, 0xc5, 0x38, 0x38, 0x41, 0x6a, 0xea, 0x47, 0x0a, 0xcc, 0x45, 0x7d, - 0x6b, 0xf1, 0x0d, 0x0e, 0xa7, 0x06, 0x79, 0x5e, 0xac, 0x5a, 0x7b, 0x76, 0x64, 0x37, 0x47, 0xbf, - 0xa7, 0xc0, 0xac, 0x4f, 0x6a, 0x94, 0x3b, 0xf6, 0xd9, 0xb2, 0x7b, 0xbe, 0xcb, 0xf6, 0x50, 0xbf, - 0x05, 0x46, 0x69, 0xdf, 0xff, 0xad, 0xc0, 0xa5, 0x8a, 0xdd, 0xee, 0x74, 0x29, 0xe1, 0x77, 0xf2, - 0x6e, 0xb7, 0x1d, 0x81, 0x4d, 0x14, 0x60, 0xe6, 0x25, 0x71, 0x5c, 0xd3, 0x16, 0x9b, 0x47, 0x16, - 0x7b, 0x45, 0xf4, 0xcb, 0x90, 0xd6, 0x65, 0x3b, 0xde, 0x3a, 0xcf, 0x94, 0xab, 0x4c, 0xc0, 0x19, - 0x01, 0xc7, 0xf1, 0x51, 0x11, 0xbc, 0x9e, 0x57, 0xd7, 0x31, 0x78, 0xd2, 0xab, 0x06, 0x9a, 0x87, - 0xa4, 0x6b, 0x69, 0x1d, 0xb7, 0x69, 0x7b, 0xd7, 0xab, 0xbd, 0xb2, 0x9c, 0xeb, 0xef, 0xc1, 0xe5, - 0x91, 0xc1, 0x47, 0xa9, 0xdd, 0x5d, 0x28, 0xae, 0x93, 0x8e, 0x43, 0x98, 0x6b, 0x32, 0x3e, 0x24, - 0x8e, 0xb9, 0x77, 0x18, 0x9d, 0x96, 0xe5, 0x18, 0x1a, 0xb0, 0x18, 0xde, 0x46, 0x94, 0x83, 0xf9, - 0xd1, 0x0c, 0x64, 0x37, 0x0e, 0x3a, 0xb6, 0x43, 0x6b, 0x62, 0xfb, 0x47, 0xeb, 0x90, 0xec, 0x38, - 0xf6, 0x4b, 0xd3, 0x13, 0x9c, 0x0b, 0xbc, 0xf3, 0x1f, 0xe0, 0x79, 0x26, 0xeb, 0xe3, 0x1e, 0x27, - 0xc2, 0x90, 0xda, 0xb4, 0x75, 0xad, 0xf5, 0xd0, 0x6c, 0x79, 0x2b, 0x63, 0x79, 0x92, 0x98, 0xe5, - 0x1e, 0xc7, 0x33, 0x8d, 0x36, 0x3d, 0xff, 0xd0, 0x23, 0xa2, 0x47, 0x90, 0x7c, 0x4c, 0x69, 0x87, - 0x3d, 0x94, 0xce, 0x65, 0x69, 0xa2, 0x48, 0xc6, 0x20, 0x25, 0xf5, 0x98, 0x11, 0x86, 0xd9, 0x47, - 0xb6, 0xdd, 0x68, 0x91, 0x4a, 0xcb, 0xee, 0x1a, 0x15, 0xdb, 0xda, 0x33, 0x1b, 0xf2, 0x88, 0x79, - 0x6b, 0xa2, 0xc4, 0x47, 0x95, 0x1a, 0x1e, 0x65, 0x47, 0xdf, 0x81, 0x64, 0x6d, 0x55, 0x8a, 0x12, - 0x67, 0xce, 0x9b, 0x13, 0x45, 0xd5, 0x56, 0x71, 0x8f, 0x09, 0x3d, 0x86, 0xf4, 0xda, 0x67, 0x5d, - 0x87, 0x48, 0x19, 0xd3, 0x5c, 0xc6, 0xed, 0x89, 0x32, 0x38, 0x0f, 0xf6, 0xb3, 0xce, 0xbf, 0x0a, - 0xd9, 0x01, 0x4d, 0x22, 0x04, 0xf1, 0x0e, 0x53, 0x1a, 0x9b, 0xce, 0x14, 0xe6, 0xff, 0x85, 0x9d, - 0xcd, 0xdf, 0x86, 0x38, 0xd3, 0x0a, 0x5b, 0xdb, 0xbb, 0x9a, 0x4b, 0x76, 0x1c, 0x53, 0x56, 0xf2, - 0x8a, 0xb2, 0xde, 0xdf, 0x28, 0x30, 0x55, 0x5b, 0x65, 0x98, 0x6d, 0xb7, 0xab, 0x3f, 0x27, 0x54, - 0xd6, 0x92, 0x25, 0x8e, 0xe5, 0x1c, 0xb2, 0x67, 0x8a, 0xcd, 0x3f, 0x85, 0x65, 0x09, 0x5d, 0x07, - 0xd0, 0x74, 0x9d, 0xb8, 0x2e, 0x0f, 0x47, 0xc4, 0xf8, 0xb3, 0x94, 0xa0, 0x3c, 0x21, 0x87, 0x8c, - 0xcd, 0x25, 0xba, 0x43, 0xc4, 0x4a, 0x4e, 0x61, 0x59, 0x62, 0x6c, 0x94, 0xb4, 0x3b, 0x2a, 0xb5, - 0x9f, 0x13, 0x8b, 0x6b, 0x33, 0x85, 0x53, 0x8c, 0x52, 0x67, 0x04, 0xe6, 0x02, 0x88, 0x65, 0x74, - 0x6c, 0xd3, 0xa2, 0x5c, 0x4d, 0x29, 0xdc, 0x2b, 0x33, 0x91, 0x0e, 0x69, 0x98, 0x32, 0x9f, 0x30, - 0x85, 0x65, 0x49, 0x0e, 0x63, 0x1b, 0x62, 0x8f, 0x2a, 0xb5, 0x53, 0x0f, 0x03, 0x41, 0x5c, 0xeb, - 0x4a, 0xa3, 0x4b, 0x61, 0xfe, 0x5f, 0x0a, 0xfc, 0x6d, 0x05, 0x12, 0x5c, 0xf5, 0xe8, 0x1a, 0xa4, - 0x74, 0xdb, 0xa2, 0x9a, 0x69, 0xc9, 0x75, 0x93, 0xc2, 0x7d, 0x42, 0xa8, 0xe4, 0x1b, 0x90, 0xd1, - 0x74, 0xdd, 0xee, 0x5a, 0x54, 0xb5, 0xb4, 0x36, 0x91, 0x2d, 0xa4, 0x25, 0x6d, 0x4b, 0x6b, 0x13, - 0x54, 0x04, 0xaf, 0xc8, 0x95, 0x28, 0x34, 0x05, 0x92, 0xd4, 0x0b, 0xe6, 0x48, 0xbf, 0xf1, 0xa7, - 0x0a, 0xcc, 0x7e, 0xe4, 0x98, 0x94, 0x94, 0x35, 0xaa, 0x37, 0x23, 0x70, 0xfa, 0x6f, 0x43, 0xca, - 0xd0, 0xa8, 0x26, 0xd2, 0x47, 0xa7, 0xc6, 0x73, 0xcb, 0x65, 0xc6, 0xea, 0xf3, 0x14, 0x52, 0x04, - 0x71, 0xf6, 0x5f, 0xec, 0x07, 0x98, 0xff, 0xef, 0x07, 0x72, 0xfc, 0xbd, 0x8c, 0xd2, 0xa1, 0xfd, - 0xc3, 0x94, 0xe7, 0xd0, 0x22, 0x18, 0xfd, 0x7b, 0x30, 0x23, 0x4f, 0x45, 0x72, 0xec, 0x8b, 0x93, - 0xd6, 0xa3, 0x17, 0x89, 0x90, 0x6c, 0xa8, 0x0c, 0xe0, 0x52, 0xcd, 0xa1, 0x2a, 0x35, 0xdb, 0x27, - 0x8b, 0xc6, 0x7a, 0x7e, 0x8f, 0xb3, 0x31, 0x2a, 0xda, 0x82, 0x74, 0xfb, 0xa5, 0xae, 0xab, 0x7b, - 0x66, 0x8b, 0xca, 0x40, 0x6c, 0x6e, 0x40, 0x88, 0xd7, 0x93, 0xa7, 0x1f, 0x56, 0x2a, 0x0f, 0x79, - 0x25, 0x11, 0x0f, 0xed, 0x97, 0x31, 0x30, 0x09, 0xe2, 0x3f, 0x7a, 0x0d, 0x64, 0x56, 0x92, 0xea, - 0xba, 0x94, 0x2f, 0xaf, 0x64, 0x39, 0x7b, 0x7c, 0x54, 0x4c, 0x61, 0x4e, 0xad, 0xd5, 0xea, 0x38, - 0x25, 0x2a, 0xd4, 0x5c, 0x6f, 0x53, 0xfd, 0xbe, 0x02, 0xd9, 0x72, 0xb7, 0xf5, 0x7c, 0xbb, 0x53, - 0xeb, 0xb6, 0xdb, 0x9a, 0x73, 0x88, 0xae, 0x7a, 0x96, 0x61, 0x7e, 0x46, 0xb8, 0x66, 0x63, 0x72, - 0xea, 0xcd, 0xcf, 0x08, 0x9b, 0x7a, 0x99, 0x01, 0xc1, 0xe8, 0x22, 0xbd, 0xe1, 0x26, 0x64, 0xf9, - 0x99, 0x40, 0x25, 0x16, 0x75, 0x4c, 0x22, 0x4e, 0x8d, 0x31, 0x9c, 0xe1, 0xc4, 0x0d, 0x41, 0x43, - 0x4b, 0x90, 0x73, 0x0f, 0x5d, 0x4a, 0xda, 0xaa, 0x48, 0xd5, 0x16, 0x19, 0x7b, 0x31, 0x9c, 0x15, - 0x54, 0x2c, 0x88, 0xa5, 0xff, 0x9c, 0x82, 0x9c, 0x37, 0xcb, 0x51, 0x82, 0xb9, 0x32, 0x24, 0xf6, - 0xcc, 0x56, 0x2f, 0xb2, 0x11, 0xee, 0x7e, 0x3d, 0x49, 0xcb, 0xcc, 0xc9, 0x7a, 0xd0, 0x8e, 0xb3, - 0xce, 0x7f, 0xa9, 0x40, 0x9c, 0xef, 0x57, 0xf7, 0x20, 0xce, 0x97, 0x8d, 0x72, 0x92, 0x65, 0xc3, - 0xab, 0xf6, 0x3c, 0xf5, 0x54, 0xdf, 0x53, 0x73, 0x2f, 0xd9, 0xd4, 0x1e, 0xdc, 0xbb, 0xcf, 0xa7, - 0x2a, 0x83, 0x65, 0x09, 0x95, 0x21, 0x49, 0x78, 0x5f, 0x88, 0x21, 0x77, 0x8b, 0x20, 0xeb, 0x1c, - 0x98, 0x34, 0x6f, 0x89, 0x7a, 0x7c, 0xe8, 0x0a, 0xc4, 0x98, 0x0d, 0xcc, 0x88, 0x3b, 0xf0, 0xe3, - 0xa3, 0x62, 0x8c, 0xcd, 0x3e, 0xa3, 0x89, 0x40, 0xd2, 0xfb, 0xf1, 0x64, 0x3c, 0x9f, 0x28, 0xfd, - 0x45, 0x1c, 0xb2, 0xd5, 0x76, 0x44, 0x8b, 0x6a, 0x6d, 0x50, 0xc7, 0x41, 0x7b, 0xf8, 0x40, 0x5b, - 0xa3, 0x2a, 0x1e, 0xf4, 0x4a, 0xb1, 0xd3, 0x79, 0xa5, 0x2a, 0xdb, 0x21, 0x64, 0x5a, 0x3b, 0x6b, - 0xff, 0x5b, 0x13, 0xdb, 0xaf, 0x6b, 0xbb, 0x2d, 0x82, 0x19, 0x4f, 0x2f, 0x8c, 0xc5, 0x05, 0xa0, - 0x9f, 0xe7, 0x1b, 0x91, 0x58, 0xda, 0xd3, 0x27, 0x5f, 0xda, 0x33, 0xc4, 0x32, 0x18, 0x6d, 0xfe, - 0x40, 0x1a, 0xca, 0x9b, 0x10, 0x33, 0x4c, 0x4f, 0x93, 0x27, 0x75, 0x31, 0x8c, 0x65, 0x82, 0xbd, - 0xc4, 0xfd, 0xf6, 0xe2, 0x8f, 0x0f, 0xce, 0x6f, 0x03, 0xf4, 0x47, 0x85, 0x16, 0x61, 0xda, 0x6e, - 0x19, 0x0c, 0xba, 0xb3, 0x2e, 0x64, 0xcb, 0xa9, 0xe3, 0xa3, 0x62, 0x62, 0xbb, 0x65, 0x54, 0xd7, - 0x71, 0xc2, 0x6e, 0x19, 0x55, 0x83, 0xbf, 0x0d, 0x40, 0xf6, 0x55, 0xfe, 0x12, 0x04, 0xcf, 0x2a, - 0xc0, 0x33, 0x16, 0xd9, 0x5f, 0x27, 0xae, 0xee, 0xdf, 0x7e, 0xa4, 0xb5, 0xfc, 0xb1, 0x02, 0x39, - 0x4f, 0x83, 0xd1, 0x2e, 0xce, 0xa4, 0xd9, 0x96, 0x06, 0x1f, 0x3b, 0x9d, 0xc1, 0x7b, 0x7c, 0x32, - 0xfb, 0xeb, 0x43, 0xb8, 0x20, 0x32, 0x1f, 0x74, 0x8d, 0x32, 0xef, 0x18, 0x15, 0x6c, 0xff, 0x89, - 0x02, 0x73, 0x83, 0x82, 0xa3, 0x1c, 0xff, 0x93, 0xa1, 0xb8, 0xeb, 0xeb, 0x01, 0x42, 0x82, 0x5a, - 0x17, 0xf1, 0xd3, 0xc1, 0x10, 0xec, 0xfc, 0x7b, 0x90, 0xe0, 0xe4, 0x33, 0x78, 0x29, 0xa9, 0xc4, - 0x26, 0xcc, 0xae, 0x19, 0x46, 0xad, 0x26, 0x0d, 0xe9, 0x6b, 0xfb, 0x05, 0x0f, 0x2e, 0x4c, 0x05, - 0xc1, 0x05, 0x7f, 0x4b, 0x51, 0xc2, 0x85, 0x1f, 0x5c, 0x84, 0x8c, 0xec, 0xfb, 0x8e, 0xc5, 0xce, - 0xb2, 0x2b, 0x10, 0x6b, 0x48, 0x60, 0x98, 0x0e, 0xdc, 0x64, 0xfb, 0x6f, 0x81, 0x60, 0x56, 0x93, - 0x31, 0x74, 0xba, 0x34, 0x20, 0x4a, 0xd8, 0x0f, 0x15, 0xf5, 0x19, 0x3a, 0x5d, 0x8a, 0x3e, 0x80, - 0xf3, 0x7a, 0x3f, 0x1f, 0x5f, 0x65, 0xcc, 0xb1, 0xd0, 0xdc, 0xaa, 0xc0, 0xd7, 0x12, 0x70, 0x4e, - 0x1f, 0x20, 0xa3, 0x35, 0x7f, 0x42, 0x78, 0x3c, 0xf4, 0xf4, 0x31, 0x9c, 0x83, 0xee, 0xcb, 0x1a, - 0x47, 0x6f, 0xc2, 0xb4, 0xc1, 0x13, 0x8f, 0xe5, 0xe9, 0x25, 0x68, 0x69, 0x0d, 0x64, 0x76, 0x63, - 0x59, 0x1f, 0x3d, 0x86, 0x8c, 0xf8, 0x27, 0x02, 0xf9, 0xd2, 0x13, 0x2e, 0x85, 0xf3, 0xfb, 0xee, - 0xb3, 0x71, 0xda, 0xe8, 0xd3, 0xd0, 0x7d, 0x88, 0xbb, 0xba, 0x26, 0xa0, 0x7b, 0x70, 0xd4, 0xc3, - 0x97, 0x30, 0x8a, 0x79, 0x5d, 0xf4, 0x11, 0xcc, 0xee, 0x92, 0x86, 0x69, 0xa9, 0xb4, 0x7f, 0xd3, - 0x5c, 0x48, 0x8e, 0x5c, 0x6e, 0xf7, 0xbc, 0x43, 0x70, 0x0a, 0x21, 0xce, 0xef, 0x0e, 0x3d, 0x60, - 0xd3, 0xc4, 0x9d, 0xbb, 0x4f, 0x6c, 0x2a, 0x74, 0x9a, 0x02, 0x73, 0xfb, 0x70, 0x8e, 0x0c, 0x90, - 0xd1, 0x06, 0xa4, 0x35, 0xb6, 0x3e, 0x55, 0x9e, 0x88, 0x55, 0x80, 0xd0, 0x13, 0xe7, 0x48, 0x4a, - 0x18, 0x06, 0xad, 0x47, 0xea, 0x8b, 0x69, 0x13, 0xa7, 0x41, 0x0a, 0xe9, 0xf1, 0x62, 0xfc, 0x77, - 0xd8, 0x52, 0x0c, 0x27, 0xa1, 0x27, 0x90, 0x6d, 0x7a, 0xd9, 0x09, 0x3c, 0x24, 0x90, 0x09, 0x3d, - 0x72, 0x06, 0x24, 0x55, 0xe0, 0x4c, 0xd3, 0x47, 0x44, 0xaf, 0xc1, 0x54, 0x43, 0x2f, 0x64, 0xb9, - 0x84, 0x6b, 0xe3, 0x52, 0x08, 0xf0, 0x54, 0x43, 0x47, 0xef, 0x40, 0x52, 0x04, 0x59, 0x0f, 0xac, - 0x42, 0x2e, 0x74, 0xf1, 0x0e, 0xc6, 0xb7, 0x31, 0x0f, 0x06, 0xb3, 0xb6, 0x1e, 0x43, 0x46, 0xdc, - 0x29, 0xb7, 0x78, 0x72, 0x4b, 0xe1, 0x7c, 0xa8, 0xc1, 0x8d, 0x66, 0xe6, 0x60, 0xf1, 0xea, 0x9a, - 0xa0, 0xa1, 0x2d, 0xc8, 0x39, 0x22, 0x8c, 0x20, 0x33, 0x87, 0x0b, 0x79, 0x2e, 0xeb, 0x95, 0x60, - 0x57, 0x32, 0x12, 0xf2, 0xc2, 0x59, 0xc7, 0x4f, 0x45, 0xdf, 0x83, 0xb9, 0x41, 0x79, 0x72, 0x49, - 0xcc, 0x72, 0xa9, 0xaf, 0x4d, 0x94, 0xea, 0x5f, 0x19, 0xc8, 0x19, 0x79, 0x84, 0x1e, 0x40, 0x42, - 0xcc, 0x39, 0xe2, 0x02, 0x8b, 0x41, 0x67, 0x00, 0xff, 0x74, 0x8b, 0xda, 0x4c, 0x61, 0x54, 0xde, - 0xa5, 0xab, 0x2d, 0xbb, 0x51, 0xb8, 0x10, 0xaa, 0xb0, 0xd1, 0x90, 0x00, 0x4e, 0xd3, 0x3e, 0x8d, - 0xd9, 0x8c, 0x23, 0xe8, 0xf2, 0x92, 0x77, 0x2e, 0xd4, 0x66, 0x02, 0x2e, 0xd8, 0x71, 0xc6, 0xf1, - 0x11, 0xf9, 0x3c, 0x8a, 0xdc, 0x25, 0x95, 0x2f, 0xfb, 0x8b, 0xe1, 0xf3, 0x38, 0x92, 0x2e, 0x8e, - 0xd3, 0x4e, 0x9f, 0x86, 0xea, 0x90, 0xd7, 0xc5, 0x95, 0x9f, 0xea, 0x5d, 0x15, 0x16, 0x2e, 0x71, - 0x69, 0xaf, 0x06, 0xfa, 0xd4, 0xa0, 0xab, 0x51, 0x7c, 0x5e, 0x1f, 0xa4, 0xa3, 0x0e, 0xcc, 0x1b, - 0xbd, 0x4b, 0x38, 0xf5, 0x25, 0xbf, 0x85, 0xeb, 0xcb, 0xbf, 0xcc, 0xe5, 0xdf, 0x0f, 0x74, 0x73, - 0x63, 0x6f, 0x07, 0x71, 0xc1, 0x08, 0xa9, 0xc0, 0x9c, 0x19, 0x97, 0xaf, 0xea, 0xfd, 0x2c, 0xea, - 0x42, 0x21, 0xd4, 0x99, 0x85, 0x64, 0x7a, 0xe3, 0xbc, 0x3e, 0xf4, 0x80, 0x79, 0x56, 0xcb, 0xb6, - 0x3b, 0x85, 0x2b, 0xa1, 0x9e, 0xd5, 0x17, 0x5d, 0xc3, 0xbc, 0x2e, 0x5b, 0xa4, 0xa6, 0x65, 0x52, - 0xbe, 0x41, 0xcd, 0x87, 0x2e, 0xd2, 0xc1, 0x57, 0xbf, 0xf0, 0x8c, 0x29, 0xca, 0x6c, 0x69, 0x51, - 0x19, 0x94, 0x90, 0xa6, 0x72, 0x2d, 0x74, 0x69, 0x05, 0x45, 0x2f, 0x70, 0x96, 0xfa, 0xa9, 0x6c, - 0x69, 0x09, 0xa7, 0x37, 0x24, 0xf5, 0x7a, 0xe8, 0xd2, 0x0a, 0x4d, 0xe7, 0xc4, 0x48, 0x1b, 0x79, - 0xc4, 0x0e, 0xea, 0x5c, 0x20, 0x7f, 0xa9, 0xb5, 0xb0, 0x10, 0xba, 0x87, 0x0e, 0xc7, 0x26, 0x70, - 0xaa, 0xe5, 0x51, 0x98, 0x63, 0xde, 0x77, 0x4c, 0x4a, 0xd4, 0x5d, 0x8d, 0xea, 0xcd, 0x42, 0x31, - 0xd4, 0x31, 0x8f, 0x5c, 0xd1, 0x60, 0xd8, 0xef, 0x91, 0xd8, 0x56, 0x2c, 0x0e, 0x68, 0x85, 0xc5, - 0x09, 0x27, 0x82, 0xde, 0x56, 0x2c, 0xea, 0xa3, 0xef, 0x40, 0xea, 0x45, 0x97, 0x38, 0x87, 0xdc, - 0xb1, 0xde, 0x08, 0x7d, 0x59, 0x79, 0x28, 0xc5, 0x03, 0x27, 0x5f, 0x48, 0x02, 0x6b, 0x5a, 0x40, - 0xe5, 0x42, 0x29, 0xb4, 0xe9, 0x81, 0xc3, 0x11, 0x96, 0xf5, 0x91, 0x06, 0x17, 0xc5, 0xfc, 0xc8, - 0x2c, 0x50, 0x47, 0xa6, 0x5b, 0x16, 0x6e, 0x72, 0x41, 0xa1, 0x58, 0x35, 0x30, 0x11, 0x15, 0x5f, - 0xd0, 0x46, 0x9f, 0x31, 0xe7, 0x23, 0xb7, 0x4f, 0x81, 0x6f, 0x0b, 0xb7, 0x42, 0x9d, 0x4f, 0x00, - 0xba, 0xc7, 0x19, 0xcd, 0x47, 0x14, 0x9b, 0xa8, 0xa1, 0xba, 0x2e, 0x65, 0xa0, 0xb2, 0xb0, 0x34, - 0x66, 0x13, 0x1d, 0xc2, 0xb8, 0x6c, 0x13, 0x35, 0x6a, 0x82, 0x8f, 0xa7, 0xbd, 0xb6, 0x88, 0xe6, - 0x48, 0x47, 0x7f, 0x3b, 0x54, 0xcc, 0xc8, 0xcb, 0x55, 0x18, 0xf4, 0x1e, 0xe9, 0xed, 0xf8, 0x17, - 0xe2, 0xf8, 0x74, 0x35, 0x7f, 0xad, 0xf4, 0x1f, 0x73, 0x90, 0xf5, 0x70, 0xab, 0xc0, 0xa4, 0x6f, - 0xf8, 0x31, 0xe9, 0x42, 0x18, 0x26, 0x15, 0x1c, 0x02, 0x94, 0xbe, 0xe1, 0x07, 0xa5, 0x0b, 0x61, - 0xa0, 0xd4, 0xe3, 0x60, 0xa8, 0x14, 0x87, 0xa1, 0xd2, 0x57, 0x4f, 0x80, 0x4a, 0xa5, 0xa0, 0x61, - 0x58, 0x5a, 0x1e, 0x85, 0xa5, 0xb7, 0xc6, 0xc3, 0x52, 0x29, 0xc8, 0x87, 0x4b, 0xdf, 0x1a, 0xc2, - 0xa5, 0x37, 0xc6, 0xe0, 0x52, 0xc9, 0xed, 0x01, 0xd3, 0x6a, 0x20, 0x30, 0xbd, 0x3d, 0x09, 0x98, - 0x4a, 0x29, 0x03, 0xc8, 0x74, 0x75, 0x00, 0x99, 0x16, 0x43, 0x91, 0xa9, 0xe4, 0x15, 0xd0, 0xf4, - 0xe3, 0x70, 0x68, 0xfa, 0xad, 0x13, 0x41, 0x53, 0x29, 0x6d, 0x14, 0x9b, 0xe2, 0x30, 0x6c, 0xfa, - 0xea, 0x09, 0xb0, 0xa9, 0x37, 0x59, 0x43, 0xe0, 0xf4, 0x61, 0x10, 0x38, 0x5d, 0x9a, 0x00, 0x4e, - 0xa5, 0x2c, 0x3f, 0x3a, 0x7d, 0x18, 0x84, 0x4e, 0x97, 0x26, 0xa0, 0xd3, 0x01, 0x39, 0x02, 0x9e, - 0x6e, 0x06, 0xc3, 0xd3, 0x57, 0x26, 0xc2, 0x53, 0x29, 0x6b, 0x10, 0x9f, 0xbe, 0xee, 0xc3, 0xa7, - 0xd7, 0x43, 0xf0, 0xa9, 0x64, 0x64, 0x00, 0xf5, 0xdd, 0x11, 0x80, 0x5a, 0x1a, 0x07, 0x50, 0x25, - 0x67, 0x0f, 0xa1, 0x56, 0x03, 0x11, 0xea, 0xed, 0x49, 0x08, 0xd5, 0xb3, 0x3c, 0x3f, 0x44, 0xdd, - 0x0e, 0x81, 0xa8, 0x77, 0x26, 0x43, 0x54, 0x29, 0x6e, 0x08, 0xa3, 0xaa, 0x63, 0x31, 0xea, 0xeb, - 0x27, 0xc4, 0xa8, 0x52, 0x76, 0x10, 0x48, 0xfd, 0xd9, 0x41, 0x90, 0xba, 0x18, 0x0e, 0x52, 0xa5, - 0x10, 0x89, 0x52, 0xab, 0x81, 0x28, 0xf5, 0xf6, 0x24, 0x94, 0xea, 0x29, 0xcd, 0x0f, 0x53, 0x37, - 0x83, 0x61, 0xea, 0x2b, 0x13, 0x61, 0xaa, 0x67, 0x3b, 0x03, 0x38, 0xb5, 0x1a, 0x88, 0x53, 0x6f, - 0x4f, 0xc2, 0xa9, 0xbd, 0xd9, 0xf4, 0x01, 0xd5, 0x9d, 0x50, 0xa0, 0x7a, 0xf7, 0x24, 0x40, 0x55, - 0x8a, 0x1c, 0x41, 0xaa, 0x2f, 0x4e, 0x80, 0x54, 0x57, 0x4f, 0x85, 0x54, 0x65, 0x4b, 0xe1, 0x50, - 0xf5, 0xe3, 0x70, 0xa8, 0xfa, 0xad, 0x13, 0x41, 0x55, 0xcf, 0xb9, 0x8d, 0x60, 0xd5, 0xd5, 0x01, - 0xac, 0x5a, 0x0c, 0xc5, 0xaa, 0x9e, 0xaf, 0xe5, 0x60, 0xf5, 0xdd, 0x11, 0xb0, 0x5a, 0x1a, 0x07, - 0x56, 0xbd, 0x05, 0xeb, 0xa1, 0x55, 0x75, 0x2c, 0xba, 0x7c, 0xfd, 0x84, 0xe8, 0xd2, 0x5b, 0x14, - 0x01, 0xf0, 0xb2, 0x12, 0x00, 0x2f, 0x6f, 0x8d, 0x87, 0x97, 0xde, 0x5e, 0xd8, 0xc7, 0x97, 0x0f, - 0x83, 0xf0, 0xe5, 0xd2, 0x04, 0x7c, 0xe9, 0xb9, 0x56, 0x1f, 0xc0, 0x7c, 0x6b, 0x08, 0x60, 0xde, - 0x98, 0x18, 0xe6, 0xe8, 0x21, 0xcc, 0xf7, 0x46, 0x11, 0xe6, 0xcd, 0xb1, 0x08, 0x53, 0xf2, 0xf7, - 0x21, 0xe6, 0x5b, 0x43, 0x10, 0xf3, 0xc6, 0x18, 0x88, 0xe9, 0x35, 0x2e, 0x31, 0xe6, 0xee, 0x78, - 0x8c, 0xb9, 0x7c, 0x52, 0x8c, 0x29, 0xc5, 0x06, 0x82, 0xcc, 0xcd, 0x60, 0x90, 0xf9, 0xca, 0x09, - 0xef, 0x5a, 0x87, 0x50, 0xe6, 0xc3, 0x20, 0x94, 0xb9, 0x34, 0x01, 0x65, 0xf6, 0x37, 0xc3, 0x1e, - 0xcc, 0x7c, 0x18, 0x04, 0x33, 0x97, 0x26, 0xc0, 0x4c, 0x4f, 0x4e, 0x30, 0xce, 0x7c, 0x3f, 0x9e, - 0xbc, 0x96, 0xbf, 0x5e, 0xfa, 0x3c, 0x01, 0xd3, 0x8f, 0xbd, 0xc0, 0x8c, 0xef, 0xad, 0x07, 0xe5, - 0x2c, 0x6f, 0x3d, 0xa0, 0x75, 0x98, 0x91, 0x93, 0x22, 0xb1, 0xe7, 0x98, 0xd7, 0xb7, 0x46, 0x5e, - 0xe8, 0xf1, 0x58, 0xcf, 0x90, 0x34, 0x88, 0x1e, 0x40, 0xb6, 0xeb, 0x12, 0x47, 0xed, 0x38, 0xa6, - 0xed, 0x98, 0x54, 0xc4, 0xc9, 0x95, 0x72, 0xfe, 0xab, 0xa3, 0x62, 0x66, 0xc7, 0x25, 0xce, 0x33, - 0x49, 0xc7, 0x99, 0xae, 0xaf, 0xe4, 0x7d, 0x51, 0x29, 0x71, 0xf2, 0x2f, 0x2a, 0x7d, 0x00, 0x79, - 0x87, 0x68, 0xc6, 0x80, 0xdb, 0x13, 0xaf, 0x09, 0x04, 0x6f, 0x08, 0x9a, 0xe1, 0xf3, 0x6d, 0xfc, - 0x75, 0x81, 0xf3, 0xce, 0x20, 0x11, 0xdd, 0x83, 0x8b, 0x6d, 0xed, 0x40, 0xbc, 0xff, 0xe2, 0x6d, - 0x5b, 0x3c, 0x40, 0x95, 0xe4, 0xa1, 0x4f, 0xd4, 0xd6, 0x0e, 0xf8, 0xe7, 0x99, 0xc4, 0x23, 0xfe, - 0x29, 0x89, 0x25, 0xc8, 0x19, 0xa6, 0x4b, 0x4d, 0x4b, 0xf7, 0xde, 0xa3, 0x4d, 0x89, 0xa4, 0x78, - 0x8f, 0x2a, 0x5e, 0x95, 0xbd, 0x0b, 0xb3, 0x32, 0xd2, 0xdb, 0xff, 0x60, 0x13, 0x47, 0x76, 0x49, - 0xd6, 0x0b, 0xf6, 0xa0, 0xff, 0x8d, 0xab, 0x0a, 0x9c, 0x6f, 0x68, 0x94, 0xec, 0x6b, 0x87, 0xaa, - 0x65, 0x1b, 0x5c, 0xf7, 0x69, 0xfe, 0xc6, 0xe2, 0xd5, 0xe3, 0xa3, 0x62, 0xf6, 0x91, 0x78, 0xb4, - 0x65, 0x1b, 0x62, 0x06, 0xa6, 0xc5, 0x3f, 0x9c, 0x6d, 0xf8, 0x1e, 0x18, 0x68, 0x0d, 0x32, 0x6c, - 0x8b, 0x54, 0x6d, 0xf1, 0x55, 0x06, 0x89, 0xd9, 0xc2, 0x6e, 0x72, 0xe5, 0xb7, 0x1b, 0x70, 0xda, - 0xed, 0x17, 0xde, 0x8f, 0x27, 0x67, 0xf2, 0xc9, 0xd2, 0xe7, 0x0a, 0x64, 0x06, 0x72, 0x18, 0xbe, - 0x3d, 0x74, 0xdb, 0x7f, 0x25, 0x18, 0x07, 0x06, 0x47, 0x4e, 0xd6, 0x20, 0x29, 0x15, 0xeb, 0xc5, - 0x4e, 0x8a, 0xe1, 0x50, 0x80, 0x9f, 0xb9, 0xbc, 0xc0, 0x91, 0xc7, 0xf6, 0x76, 0xfc, 0x0f, 0x7e, - 0x58, 0x3c, 0x57, 0xfa, 0x71, 0x0c, 0xb2, 0x83, 0x49, 0x0b, 0xd5, 0xa1, 0x7e, 0x05, 0x39, 0x8a, - 0x01, 0x8e, 0xf0, 0x5e, 0xae, 0x43, 0xca, 0x91, 0x95, 0xbc, 0x6e, 0x2e, 0x8e, 0x89, 0x69, 0xf8, - 0xfb, 0xd9, 0x67, 0x9c, 0xff, 0xeb, 0xa9, 0xde, 0x82, 0x5e, 0x86, 0x04, 0xff, 0xc4, 0x9a, 0xec, - 0x5a, 0x50, 0x6a, 0xe2, 0x06, 0x7b, 0x8e, 0x45, 0x35, 0xe6, 0x00, 0xea, 0x67, 0x7a, 0xed, 0xa9, - 0x47, 0x38, 0xc3, 0x27, 0xca, 0xce, 0xf8, 0x9e, 0x4e, 0x8d, 0x9d, 0x57, 0x5b, 0x2d, 0xa2, 0x53, - 0xf9, 0x35, 0x37, 0xef, 0x43, 0x64, 0xb7, 0x86, 0x45, 0xc8, 0x6f, 0xbf, 0x2d, 0x63, 0xf9, 0xed, - 0x37, 0x5f, 0x38, 0x2b, 0xd7, 0x13, 0xc1, 0xd7, 0x8b, 0x88, 0x5f, 0x8a, 0xa9, 0xbe, 0xbb, 0x09, - 0x17, 0x02, 0x56, 0x2f, 0xca, 0x01, 0x54, 0xb6, 0xb7, 0x6a, 0xd5, 0x5a, 0x7d, 0x63, 0xab, 0x9e, - 0x3f, 0x87, 0xb2, 0x90, 0x62, 0xe5, 0x8d, 0xad, 0xda, 0x4e, 0x2d, 0xaf, 0xa0, 0x3c, 0x64, 0xaa, - 0x5b, 0xbe, 0x0a, 0xf2, 0xf3, 0x61, 0x77, 0x3f, 0x82, 0xb4, 0xef, 0x95, 0x21, 0x84, 0x20, 0xf7, - 0x6c, 0xa7, 0xf6, 0x58, 0xad, 0x57, 0x9f, 0x6e, 0xd4, 0xea, 0x6b, 0x4f, 0x9f, 0xe5, 0xcf, 0x31, - 0xc9, 0x9c, 0xb6, 0x56, 0xde, 0xc6, 0xf5, 0xbc, 0xd2, 0x2b, 0xd7, 0xb7, 0x77, 0x2a, 0x8f, 0xf3, - 0x53, 0xbd, 0xf2, 0x07, 0x3b, 0x1b, 0xf8, 0x93, 0x7c, 0x4c, 0x0a, 0xd6, 0xe0, 0x62, 0x60, 0x2e, - 0x1e, 0x4a, 0xc3, 0xcc, 0x8e, 0xc5, 0xdf, 0x5f, 0x11, 0xbd, 0xec, 0xa5, 0x84, 0xe5, 0x15, 0x94, - 0x14, 0x69, 0x5f, 0xf9, 0x29, 0x34, 0x0d, 0x53, 0xb5, 0xd5, 0x7c, 0x0c, 0x9d, 0x87, 0xb4, 0x2f, - 0xa7, 0x2d, 0x1f, 0x47, 0x29, 0x99, 0xd8, 0x94, 0x4f, 0xdc, 0xbd, 0x01, 0xbe, 0x4c, 0x12, 0x04, - 0x30, 0xbd, 0xa9, 0x51, 0xe2, 0xd2, 0xfc, 0x39, 0x34, 0x03, 0xb1, 0xb5, 0x56, 0x2b, 0xaf, 0xdc, - 0xff, 0x18, 0x92, 0xde, 0x57, 0x00, 0xd0, 0x26, 0x24, 0x04, 0xcc, 0x28, 0x86, 0x2f, 0x05, 0xbe, - 0xa8, 0xe6, 0x17, 0x27, 0xad, 0x95, 0xd2, 0x39, 0x26, 0x79, 0xe3, 0xe0, 0xa7, 0x21, 0xb9, 0x7c, - 0xe3, 0x8b, 0x7f, 0x5b, 0x38, 0xf7, 0xc5, 0xf1, 0x82, 0xf2, 0xe5, 0xf1, 0x82, 0xf2, 0x4f, 0xc7, - 0x0b, 0xca, 0xbf, 0x1e, 0x2f, 0x28, 0x3f, 0xf8, 0xf7, 0x85, 0x73, 0x9f, 0xce, 0x48, 0x96, 0xdd, - 0x69, 0xfe, 0x2d, 0xc0, 0xd5, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xb6, 0xdc, 0x82, 0xef, 0xec, - 0x50, 0x00, 0x00, + 0x76, 0x76, 0x8b, 0xa4, 0x48, 0x3e, 0xfe, 0x98, 0x2a, 0x5b, 0x36, 0x2d, 0xff, 0x50, 0xa6, 0x7f, + 0xc6, 0xe3, 0x9d, 0x91, 0xc7, 0x56, 0x9c, 0x9d, 0x99, 0x9d, 0xc9, 0x8e, 0x48, 0xc9, 0x36, 0xc7, + 0xb6, 0xe4, 0x29, 0x52, 0x9e, 0x9f, 0x4d, 0xb6, 0xd3, 0xea, 0x2e, 0x91, 0xbd, 0x22, 0xbb, 0xe9, + 0xee, 0xa2, 0x25, 0x4d, 0x0e, 0xf9, 0x43, 0x90, 0x1c, 0x36, 0x41, 0x80, 0xcc, 0x21, 0x40, 0x80, + 0x64, 0x81, 0x24, 0x48, 0x80, 0x9c, 0x72, 0xc8, 0x5e, 0x73, 0xc9, 0x61, 0x82, 0x2c, 0x82, 0x39, + 0x24, 0x40, 0xb0, 0x01, 0x84, 0x44, 0xb9, 0x2c, 0x16, 0xb9, 0xe5, 0x36, 0x01, 0x82, 0xa0, 0x7e, + 0x9a, 0x6c, 0x92, 0xdd, 0xa4, 0xa4, 0xe9, 0xc5, 0x20, 0x39, 0x91, 0xf5, 0xba, 0xde, 0xeb, 0xaa, + 0x57, 0xaf, 0x5e, 0x7d, 0x55, 0xef, 0x55, 0xc3, 0x9c, 0x63, 0x6b, 0x7a, 0xab, 0xbb, 0x75, 0x47, + 0xeb, 0x9a, 0x4b, 0x5d, 0xc7, 0xa6, 0x36, 0x9a, 0xd3, 0x6d, 0x7d, 0x87, 0x93, 0x97, 0xe4, 0xc3, + 0x05, 0xe4, 0xd5, 0x32, 0x34, 0xaa, 0x89, 0x6a, 0x0b, 0x67, 0x3d, 0x1a, 0x71, 0x1c, 0xdb, 0x71, + 0x25, 0xf5, 0x9c, 0x47, 0xed, 0x10, 0xaa, 0xf9, 0x6a, 0x5f, 0x73, 0xa9, 0xed, 0x68, 0x4d, 0x72, + 0x87, 0x58, 0x4d, 0xd3, 0xf2, 0x7e, 0x58, 0xbd, 0x97, 0xba, 0xbe, 0x2c, 0x2b, 0x15, 0x7b, 0xd4, + 0x6c, 0xdf, 0x69, 0xb5, 0xf5, 0x3b, 0xd4, 0xec, 0x10, 0x97, 0x6a, 0x9d, 0xae, 0x7c, 0xb2, 0xc8, + 0x9f, 0x50, 0x47, 0xd3, 0x4d, 0xab, 0x79, 0xc7, 0x21, 0xba, 0xed, 0x18, 0xc4, 0x50, 0xdd, 0xae, + 0x66, 0x79, 0xcd, 0x69, 0xda, 0x4d, 0x9b, 0xff, 0xbd, 0xc3, 0xfe, 0x09, 0x6a, 0xf9, 0x57, 0x21, + 0x8d, 0x35, 0xab, 0x49, 0x6a, 0xd6, 0xb6, 0x8d, 0xde, 0x81, 0xb8, 0x41, 0x5c, 0xbd, 0xa8, 0x2c, + 0x2a, 0xb7, 0x32, 0xf7, 0xca, 0x4b, 0x63, 0xfd, 0x5c, 0xe2, 0x75, 0x57, 0x89, 0xab, 0x3b, 0x66, + 0x97, 0xda, 0x4e, 0x25, 0xfe, 0xf9, 0x41, 0xe9, 0x14, 0xe6, 0x5c, 0xe8, 0xe7, 0x20, 0xd1, 0x26, + 0x9a, 0x4b, 0x8a, 0x33, 0x9c, 0xbd, 0x18, 0xc0, 0xfe, 0x84, 0x3d, 0x97, 0x4c, 0xa2, 0x72, 0xf9, + 0xfb, 0x31, 0xc8, 0x63, 0xe2, 0x76, 0x6d, 0xcb, 0x25, 0x8f, 0x88, 0x66, 0x10, 0x07, 0xbd, 0x01, + 0x31, 0xba, 0x67, 0x15, 0x63, 0x5c, 0xcc, 0x95, 0x00, 0x31, 0x0d, 0x47, 0xb3, 0x5c, 0x4d, 0xa7, + 0xa6, 0x6d, 0x61, 0x56, 0x15, 0xbd, 0x09, 0x19, 0x87, 0xb8, 0xbd, 0x0e, 0xe1, 0x1d, 0x2e, 0xc6, + 0x39, 0xe7, 0xf9, 0x00, 0xce, 0x7a, 0x57, 0xb3, 0x30, 0x88, 0xba, 0xec, 0x3f, 0xba, 0x00, 0x29, + 0xab, 0xd7, 0x51, 0x77, 0xc8, 0xbe, 0x5b, 0x4c, 0x2c, 0x2a, 0xb7, 0x62, 0x38, 0x69, 0xf5, 0x3a, + 0x8f, 0xc9, 0xbe, 0x8b, 0xaa, 0x90, 0x71, 0x58, 0x77, 0x55, 0xd3, 0xda, 0xb6, 0xdd, 0xe2, 0xec, + 0x62, 0xec, 0x56, 0xe6, 0xde, 0xa5, 0x30, 0xa5, 0x30, 0x05, 0xca, 0x9e, 0x81, 0xe3, 0x11, 0x5c, + 0x54, 0x87, 0x9c, 0x6c, 0x99, 0x43, 0x34, 0xd7, 0xb6, 0x8a, 0xc9, 0x45, 0xe5, 0x56, 0xfe, 0xde, + 0x52, 0x90, 0x98, 0x21, 0x2d, 0xb0, 0x62, 0xaf, 0x43, 0x30, 0xe7, 0xc2, 0x59, 0xc7, 0x57, 0x2a, + 0x7f, 0x0c, 0x59, 0xff, 0x53, 0x84, 0x20, 0x8f, 0xd7, 0xea, 0x9b, 0x4f, 0xd7, 0xd4, 0xcd, 0xf5, + 0xc7, 0xeb, 0x1b, 0x1f, 0xae, 0x17, 0x4e, 0xa1, 0xb3, 0x50, 0x90, 0xb4, 0xc7, 0x6b, 0x1f, 0xab, + 0x4f, 0x6a, 0x4f, 0x6b, 0x8d, 0x82, 0x82, 0x2e, 0xc0, 0xbc, 0xa4, 0xe2, 0x95, 0xf5, 0x87, 0x6b, + 0x6a, 0x65, 0x63, 0x73, 0x7d, 0x75, 0x05, 0x7f, 0x5c, 0x98, 0x59, 0x88, 0xff, 0xce, 0x9f, 0x5e, + 0x39, 0x55, 0x7e, 0x0a, 0xf0, 0x90, 0x50, 0x4c, 0x5e, 0xf4, 0x88, 0x4b, 0xd1, 0x5b, 0x30, 0xdb, + 0xe2, 0xad, 0x91, 0x26, 0x11, 0xa6, 0xd2, 0x4a, 0x8a, 0x75, 0xfc, 0x8b, 0x83, 0x92, 0x82, 0x25, + 0xc3, 0xdb, 0xf1, 0x9f, 0xfc, 0xa0, 0xa4, 0x94, 0x7f, 0x43, 0x81, 0x0c, 0x97, 0x27, 0xba, 0x86, + 0xaa, 0x23, 0x02, 0xaf, 0x4e, 0xd5, 0xc3, 0xb8, 0x68, 0xb4, 0x04, 0x89, 0x97, 0x5a, 0xbb, 0x37, + 0xc9, 0xd0, 0x9e, 0xb3, 0xe7, 0x58, 0x54, 0x2b, 0xff, 0xb5, 0x02, 0xf0, 0xac, 0x17, 0x41, 0xa7, + 0x98, 0x89, 0x1f, 0xe9, 0xcd, 0x9e, 0x89, 0xf3, 0xca, 0xe8, 0x1c, 0xcc, 0x9a, 0x56, 0xdb, 0xb4, + 0x08, 0x37, 0xe9, 0x14, 0x96, 0x25, 0x74, 0x16, 0x12, 0x5b, 0x6d, 0xd3, 0x32, 0xb8, 0xbd, 0xa6, + 0xb0, 0x28, 0x48, 0xc5, 0x61, 0xc8, 0xf0, 0x26, 0x47, 0xa8, 0xb7, 0xf2, 0xbf, 0x2a, 0x30, 0x5f, + 0xb5, 0x2d, 0xc3, 0x64, 0x13, 0x47, 0x6b, 0x7f, 0x9d, 0x2a, 0xb9, 0x0f, 0x69, 0xb2, 0xd7, 0x55, + 0x05, 0x67, 0x6c, 0xca, 0x30, 0xa6, 0xc8, 0x5e, 0x97, 0xff, 0x9b, 0xa8, 0xb1, 0x5f, 0x82, 0x73, + 0xa3, 0x9d, 0x8b, 0x52, 0x79, 0x7f, 0xaf, 0x40, 0xbe, 0x66, 0x99, 0xf4, 0xeb, 0xd4, 0x5a, 0xbf, + 0xfb, 0x31, 0x5f, 0xf7, 0xd1, 0x6d, 0x28, 0x6c, 0x6b, 0x66, 0x7b, 0xc3, 0x6a, 0xd8, 0x9d, 0x2d, + 0x97, 0xda, 0x16, 0x71, 0xa5, 0x7e, 0xc6, 0xe8, 0x52, 0x55, 0xcf, 0xe1, 0x74, 0xbf, 0x2b, 0x51, + 0xea, 0xe8, 0x05, 0x14, 0x6a, 0x96, 0xee, 0x90, 0x0e, 0xb1, 0xa2, 0x50, 0xd2, 0x25, 0x48, 0x9b, + 0x9e, 0x38, 0xae, 0xa8, 0x18, 0x1e, 0x10, 0x64, 0x57, 0x7a, 0x30, 0xe7, 0x7b, 0x65, 0x94, 0x5e, + 0xe6, 0x22, 0xa4, 0x2d, 0xb2, 0xab, 0x0e, 0x86, 0x29, 0x86, 0x53, 0x16, 0xd9, 0xe5, 0xc3, 0x52, + 0x7e, 0x06, 0xb9, 0x55, 0xd2, 0x26, 0x94, 0x44, 0xe6, 0x29, 0x37, 0x21, 0xef, 0x49, 0x8c, 0x72, + 0x48, 0x3e, 0x53, 0x00, 0x49, 0xb9, 0x6c, 0x51, 0x8a, 0x60, 0x54, 0x4a, 0x6c, 0xad, 0xa5, 0x3d, + 0xc7, 0x12, 0x8b, 0xa6, 0x30, 0x45, 0x10, 0x24, 0xbe, 0x6e, 0x0e, 0xdc, 0x5d, 0xdc, 0xef, 0xee, + 0x44, 0x3f, 0xdf, 0x8f, 0xa7, 0x66, 0x0a, 0xb1, 0xf2, 0x2e, 0x9c, 0x19, 0x6a, 0x55, 0xb4, 0x03, + 0x17, 0xe7, 0x2d, 0x9b, 0x59, 0x8c, 0xdd, 0xca, 0x56, 0x92, 0x5f, 0x1e, 0x94, 0x62, 0x8f, 0xc9, + 0x3e, 0xe6, 0xc4, 0x72, 0x03, 0xe6, 0xaa, 0x6d, 0xa2, 0x39, 0x11, 0x69, 0x43, 0x0e, 0xde, 0xc7, + 0x80, 0xfc, 0x52, 0xa3, 0x1c, 0x40, 0x13, 0x32, 0x75, 0x5d, 0xb3, 0x36, 0xba, 0xcc, 0xaf, 0xb9, + 0x68, 0x19, 0xce, 0xb9, 0xd4, 0xee, 0xaa, 0x1a, 0x55, 0x05, 0x38, 0xd9, 0xb2, 0x7b, 0x96, 0xa1, + 0x39, 0xfb, 0xfc, 0x1d, 0x29, 0x7c, 0x86, 0x3d, 0x5d, 0xa1, 0xbc, 0x21, 0x15, 0xf9, 0x88, 0x0d, + 0x59, 0xc7, 0xb4, 0x54, 0x86, 0x21, 0xda, 0xd4, 0x95, 0xc6, 0x0c, 0x1d, 0xd3, 0xc2, 0x82, 0x22, + 0x7b, 0xf1, 0x2b, 0xe2, 0x55, 0x11, 0xd8, 0xc8, 0x0d, 0xc8, 0x4b, 0x1b, 0x31, 0x2d, 0x4a, 0x2c, + 0xea, 0x99, 0x49, 0x4e, 0x50, 0x6b, 0x82, 0x38, 0x64, 0x11, 0xff, 0xa8, 0x40, 0x56, 0xbc, 0x3d, + 0x4a, 0x5b, 0xb8, 0x0f, 0x71, 0xc7, 0xde, 0x15, 0xb6, 0x90, 0xb9, 0x77, 0x31, 0x40, 0xc4, 0x63, + 0xb2, 0xef, 0xf7, 0xb4, 0xbc, 0x3a, 0xaa, 0x40, 0x46, 0x34, 0x5c, 0xe5, 0xdc, 0xb1, 0xa3, 0x72, + 0x83, 0xe0, 0xc2, 0xf6, 0xae, 0xcb, 0xa0, 0x0f, 0xc2, 0xe4, 0x25, 0x71, 0x5c, 0xf2, 0xf5, 0x69, + 0xf5, 0x9f, 0x15, 0x38, 0x33, 0xd4, 0x88, 0xff, 0x27, 0xca, 0xdd, 0x85, 0xf3, 0xd5, 0x16, 0xd1, + 0x77, 0xaa, 0xb6, 0xe5, 0x9a, 0x2e, 0x25, 0x96, 0xbe, 0x1f, 0x81, 0x82, 0x2f, 0x42, 0x7a, 0xd7, + 0xa4, 0x2d, 0xd5, 0x30, 0xb7, 0xb7, 0xf9, 0x2c, 0x49, 0xe1, 0x14, 0x23, 0xac, 0x9a, 0xdb, 0xdb, + 0x72, 0x8e, 0xa8, 0x50, 0x1c, 0x7f, 0x71, 0x94, 0xf3, 0xfd, 0x2f, 0x14, 0x40, 0x2b, 0xc6, 0xf7, + 0x7a, 0x2e, 0xad, 0x53, 0x8d, 0xba, 0x11, 0xf4, 0xea, 0x9b, 0x70, 0x46, 0xb7, 0x3b, 0xdd, 0x1e, + 0xd5, 0x98, 0x0b, 0x51, 0x89, 0x65, 0x30, 0xcf, 0xcd, 0xfb, 0xe7, 0x73, 0x8f, 0x73, 0xbe, 0x3a, + 0x6b, 0x96, 0xf1, 0x98, 0xec, 0xa3, 0xf3, 0x90, 0x34, 0x9c, 0x7d, 0xd5, 0xe9, 0x59, 0x1e, 0x70, + 0x35, 0x9c, 0x7d, 0xdc, 0xb3, 0xa4, 0x2a, 0x7e, 0xa8, 0xc0, 0x99, 0xa1, 0x96, 0x46, 0x69, 0x5b, + 0x9f, 0x40, 0x46, 0x33, 0xd8, 0x0e, 0xd6, 0x20, 0x6d, 0xaa, 0x49, 0x98, 0xb4, 0xec, 0x93, 0x24, + 0xb7, 0xcb, 0x4b, 0x62, 0x9f, 0xbc, 0xe4, 0x6d, 0x97, 0x97, 0x9e, 0x3e, 0xaf, 0x56, 0xd7, 0x09, + 0xdd, 0xb5, 0x9d, 0x1d, 0xde, 0x2c, 0xcf, 0x78, 0xb8, 0xb4, 0x55, 0x26, 0xac, 0xfc, 0x09, 0x9c, + 0xaf, 0x90, 0xa6, 0x69, 0xf9, 0xb7, 0x91, 0x51, 0xad, 0x04, 0x2a, 0x14, 0xc7, 0x65, 0x47, 0x69, + 0x1f, 0xbf, 0x16, 0x83, 0xf9, 0x35, 0xcb, 0x88, 0xb4, 0xed, 0x6c, 0xc9, 0xd6, 0xed, 0x4e, 0xc7, + 0xa4, 0xd2, 0xea, 0x65, 0x09, 0xbd, 0x05, 0x29, 0x83, 0x68, 0x46, 0x7f, 0xef, 0x92, 0xb9, 0x77, + 0xd9, 0x27, 0xb4, 0x47, 0xcd, 0xf6, 0x52, 0xab, 0xad, 0x2f, 0x35, 0xbc, 0xc3, 0x08, 0xdc, 0xaf, + 0x8e, 0x7e, 0x19, 0xce, 0xb3, 0xf9, 0xea, 0x58, 0x5a, 0x5b, 0x15, 0xd2, 0x54, 0xea, 0x98, 0xcd, + 0x26, 0x71, 0xe4, 0xf6, 0xfc, 0x56, 0x40, 0xf3, 0x6a, 0x92, 0xa3, 0xca, 0x19, 0x1a, 0xa2, 0x3e, + 0x9e, 0x37, 0x83, 0xc8, 0xe8, 0x3d, 0xc8, 0x4a, 0x3f, 0xc2, 0x36, 0xfd, 0x6c, 0xfb, 0x1e, 0x9b, + 0xd4, 0x6b, 0x61, 0x07, 0xd2, 0xf5, 0x30, 0x8a, 0x8b, 0xee, 0x30, 0x28, 0xf3, 0xa2, 0x67, 0x3a, + 0x44, 0xbd, 0xdb, 0xd5, 0x8b, 0xb3, 0xac, 0xef, 0x95, 0xfc, 0xe1, 0x41, 0x09, 0xb0, 0x20, 0xdf, + 0x7d, 0x56, 0x65, 0xd0, 0x46, 0xfc, 0xef, 0xea, 0x72, 0x8c, 0xff, 0x40, 0x81, 0x73, 0xa3, 0x43, + 0x10, 0xa5, 0xed, 0xdf, 0x82, 0x82, 0x6d, 0x11, 0xb5, 0xdb, 0xd2, 0x5c, 0x22, 0x75, 0x27, 0xa1, + 0x54, 0xde, 0xb6, 0xc8, 0x33, 0x46, 0x16, 0x9a, 0x10, 0x4e, 0xfe, 0xfd, 0x78, 0x2a, 0x56, 0x88, + 0x97, 0x3f, 0x85, 0xb9, 0x15, 0xa3, 0x63, 0x5a, 0xf5, 0x6e, 0xdb, 0x8c, 0x02, 0x7d, 0x5f, 0x87, + 0xb4, 0xcb, 0x44, 0x05, 0x39, 0x8b, 0x14, 0x7f, 0xf2, 0x98, 0xec, 0x0f, 0xf0, 0x8f, 0xff, 0xdd, + 0x51, 0xda, 0x7b, 0x43, 0x76, 0xeb, 0x29, 0x71, 0xa2, 0x05, 0x6c, 0x7e, 0xa9, 0x51, 0x36, 0xf8, + 0xd7, 0x15, 0xb8, 0xc0, 0x65, 0x73, 0xfb, 0xd8, 0x26, 0x0e, 0x3f, 0xf4, 0x8a, 0x60, 0x40, 0xae, + 0xc1, 0x2c, 0xd5, 0x9c, 0x26, 0x11, 0x93, 0x34, 0x51, 0xc9, 0x7c, 0x79, 0x50, 0x4a, 0xd6, 0xa9, + 0xed, 0x90, 0xda, 0x2a, 0x96, 0x8f, 0x64, 0xf7, 0x34, 0x58, 0x08, 0x6a, 0x42, 0x94, 0xdd, 0xfc, + 0xa9, 0x22, 0xdf, 0x51, 0x6d, 0x09, 0xd0, 0xdb, 0x6d, 0x9b, 0xba, 0x16, 0xc5, 0x7a, 0xb5, 0x06, + 0x19, 0x9d, 0xcb, 0x54, 0xe9, 0x7e, 0x57, 0x6c, 0xbd, 0xf2, 0xf7, 0xae, 0x07, 0xb6, 0x91, 0xbf, + 0x53, 0x34, 0xa0, 0xb1, 0xdf, 0x25, 0x18, 0xf4, 0xfe, 0x7f, 0xb4, 0x0a, 0x49, 0xa1, 0x13, 0x0f, + 0x62, 0x4c, 0x10, 0xc1, 0xe6, 0x70, 0x83, 0x57, 0x96, 0x6e, 0xc2, 0x63, 0x95, 0xfa, 0xdc, 0x82, + 0x8b, 0x81, 0x7d, 0x8d, 0x7a, 0xa7, 0xc6, 0x61, 0xfb, 0x13, 0xdb, 0xde, 0xe9, 0x75, 0x23, 0x50, + 0xe4, 0x65, 0x80, 0x8e, 0xb6, 0x27, 0xf6, 0x09, 0x02, 0xf5, 0x27, 0x70, 0xba, 0xa3, 0xed, 0xf1, + 0xb7, 0xb8, 0xa8, 0x08, 0x49, 0x47, 0x40, 0x43, 0xe9, 0x5d, 0xbc, 0x62, 0x1f, 0x41, 0x32, 0xb7, + 0xf2, 0x5f, 0x0c, 0x41, 0xfa, 0x9b, 0x15, 0xa5, 0xa7, 0x7b, 0x0f, 0x66, 0xfb, 0xad, 0x8b, 0x1d, + 0xeb, 0xc8, 0x59, 0xf2, 0xa1, 0x4d, 0x98, 0xeb, 0x3a, 0x64, 0x9b, 0x50, 0xbd, 0x45, 0x0c, 0xaf, + 0xab, 0xb1, 0x63, 0x0a, 0x2b, 0x0c, 0x44, 0x08, 0xdd, 0x94, 0x7f, 0x57, 0x81, 0x33, 0x8f, 0x88, + 0xe6, 0xd0, 0x2d, 0xa2, 0xd1, 0xc6, 0x5e, 0x14, 0x6b, 0xec, 0x7d, 0x88, 0x59, 0xf6, 0xae, 0x44, + 0x32, 0x93, 0x97, 0x51, 0xd9, 0x2c, 0x56, 0x5f, 0x1a, 0xe0, 0x77, 0xe0, 0xec, 0x70, 0x73, 0xa2, + 0xb4, 0xbc, 0xbf, 0x8c, 0x41, 0xfa, 0x61, 0x35, 0x82, 0x2e, 0xbe, 0x23, 0x77, 0xde, 0xe1, 0xfa, + 0xef, 0xbf, 0x66, 0xe9, 0x61, 0xf5, 0x31, 0xd9, 0xf7, 0xf6, 0x05, 0x8c, 0x0b, 0xad, 0x40, 0x9a, + 0xb6, 0x1c, 0xe2, 0xb6, 0xec, 0xb6, 0x21, 0x31, 0xc2, 0x91, 0xd4, 0x34, 0xe0, 0x42, 0x6d, 0x98, + 0xa7, 0x7b, 0x16, 0xc7, 0x03, 0x6a, 0x53, 0x57, 0x07, 0xe2, 0x12, 0x47, 0x11, 0xb7, 0xc0, 0xc4, + 0x1d, 0x1e, 0x94, 0x50, 0x63, 0xcf, 0x62, 0x3d, 0x7c, 0x58, 0x6d, 0x78, 0x02, 0x30, 0xa2, 0x92, + 0xa6, 0xf7, 0x69, 0x0b, 0x3b, 0x90, 0xe0, 0xbd, 0x40, 0x17, 0x20, 0xc6, 0x16, 0x49, 0x65, 0x78, + 0x91, 0x64, 0x34, 0xde, 0x29, 0xef, 0x05, 0xc7, 0x19, 0xfb, 0x01, 0x97, 0xb0, 0x00, 0x69, 0x07, + 0x1f, 0x00, 0x30, 0x15, 0x46, 0x39, 0xfa, 0x7f, 0x13, 0x83, 0xfc, 0xb3, 0x9e, 0xdb, 0x8a, 0xc6, + 0xca, 0xab, 0x00, 0xdd, 0x9e, 0xdb, 0x22, 0x8e, 0x4a, 0xf7, 0x2c, 0xd9, 0xe1, 0x29, 0x21, 0x1c, + 0xaf, 0xc7, 0x82, 0xaf, 0xb1, 0x67, 0xa1, 0x0d, 0x29, 0x84, 0xa8, 0x83, 0x38, 0xd0, 0xed, 0x23, + 0x60, 0xff, 0xc6, 0x9e, 0xf5, 0x94, 0x50, 0x6d, 0x48, 0x20, 0x61, 0x02, 0xdf, 0x81, 0x24, 0x2b, + 0xa8, 0xd4, 0x3e, 0x8e, 0x61, 0xcd, 0x32, 0x9e, 0x86, 0xed, 0xcd, 0xdc, 0xc4, 0xf1, 0x66, 0x2e, + 0xfa, 0x16, 0xa4, 0xc5, 0x4b, 0xd9, 0x2a, 0x36, 0xcb, 0x57, 0xb1, 0x20, 0x4d, 0x48, 0xdd, 0xf3, + 0xf5, 0x2b, 0xc5, 0xdf, 0xc8, 0x56, 0xaf, 0xb3, 0x90, 0xd8, 0xb6, 0x1d, 0x9d, 0xf0, 0x78, 0x51, + 0x0a, 0x8b, 0x42, 0xdf, 0x31, 0xa7, 0x0a, 0xe9, 0xf2, 0x1f, 0x29, 0x70, 0xba, 0x3f, 0x6e, 0x51, + 0x3a, 0xe5, 0xea, 0x90, 0xf6, 0x8f, 0x3f, 0x84, 0x4c, 0xe3, 0xe5, 0x3f, 0x9f, 0x81, 0xd3, 0x1f, + 0xf4, 0x88, 0xb3, 0x1f, 0x8d, 0x59, 0x55, 0x44, 0x48, 0x70, 0xe6, 0x84, 0xa6, 0xc0, 0x83, 0x84, + 0x37, 0xe1, 0xf4, 0xae, 0x66, 0x52, 0x75, 0xdb, 0x76, 0xd4, 0x5e, 0xd7, 0xd0, 0xa8, 0x17, 0x8f, + 0xc9, 0x31, 0xf2, 0x03, 0xdb, 0xd9, 0xe4, 0x44, 0x44, 0x00, 0xed, 0x58, 0xf6, 0xae, 0xa5, 0x32, + 0xb2, 0x69, 0x35, 0x99, 0x1a, 0xdc, 0x62, 0x9c, 0x9f, 0x26, 0x7e, 0xf3, 0xc7, 0x07, 0xa5, 0xe5, + 0xa6, 0x49, 0x5b, 0xbd, 0xad, 0x25, 0xdd, 0xee, 0xdc, 0xe9, 0x37, 0xc4, 0xd8, 0x1a, 0xfc, 0xbf, + 0xd3, 0xdd, 0x69, 0xde, 0xe1, 0xf1, 0xd8, 0x5e, 0xcf, 0x34, 0x96, 0x36, 0x37, 0x6b, 0xab, 0xb8, + 0xc0, 0x45, 0x7e, 0x28, 0x24, 0x36, 0xf6, 0x2c, 0x0f, 0x59, 0x7c, 0xa9, 0x40, 0x61, 0xa0, 0xa7, + 0x28, 0x87, 0x71, 0x0d, 0x32, 0x2f, 0x7a, 0xc4, 0x31, 0x89, 0x71, 0xec, 0x71, 0x04, 0xc9, 0xc8, + 0xa6, 0xce, 0x27, 0x90, 0x1d, 0xd2, 0x43, 0xec, 0xab, 0xe9, 0x21, 0xb3, 0x3b, 0x50, 0x41, 0xf9, + 0x7f, 0x14, 0x38, 0x8b, 0x89, 0x6b, 0xb7, 0x5f, 0x12, 0x71, 0x78, 0x15, 0x81, 0xa5, 0x6c, 0x80, + 0x3c, 0x27, 0x52, 0xbf, 0x8a, 0xc1, 0xa4, 0x85, 0x0c, 0xe1, 0x3b, 0x66, 0x5d, 0xaa, 0xd1, 0x9e, + 0x38, 0x6d, 0x0b, 0x46, 0xa2, 0x3e, 0x15, 0xd6, 0x79, 0x5d, 0x2c, 0x79, 0xd8, 0xce, 0xba, 0x6b, + 0x9b, 0xae, 0x6d, 0x79, 0x87, 0xe1, 0xa2, 0x24, 0x47, 0xff, 0x17, 0x61, 0x7e, 0xa4, 0xff, 0x51, + 0x7a, 0xf6, 0xdf, 0x9c, 0x81, 0x0b, 0xc3, 0xe2, 0x23, 0x0a, 0x01, 0xfc, 0x9f, 0xd2, 0x71, 0x1e, + 0xb2, 0xeb, 0xb6, 0xdd, 0x07, 0xae, 0xe5, 0x1c, 0x64, 0x44, 0x99, 0xab, 0x81, 0x6d, 0x95, 0x82, + 0x74, 0x14, 0xe5, 0x38, 0xfc, 0x96, 0x02, 0xd9, 0x88, 0xb6, 0xaf, 0x27, 0x0b, 0x1c, 0x4a, 0x4d, + 0x34, 0x20, 0xf7, 0x33, 0xd8, 0xef, 0xfe, 0xb1, 0x02, 0xa8, 0xe1, 0xf4, 0x2c, 0x5d, 0xa3, 0xe4, + 0x89, 0xdd, 0x8c, 0xa0, 0x8f, 0x67, 0x21, 0x61, 0x5a, 0x06, 0xd9, 0xe3, 0x7d, 0x8c, 0x63, 0x51, + 0x40, 0x77, 0x21, 0x25, 0xd3, 0x31, 0x44, 0xfc, 0x33, 0x56, 0x39, 0x77, 0x78, 0x50, 0x4a, 0x8a, + 0xe4, 0x8b, 0xd5, 0x2f, 0x07, 0x7f, 0x71, 0x52, 0xe4, 0x5f, 0x78, 0x81, 0xe1, 0x4f, 0xe0, 0xcc, + 0x50, 0xfb, 0xa2, 0xec, 0xfc, 0x3f, 0xf0, 0xf3, 0x75, 0xde, 0xe3, 0xa8, 0xb6, 0xf9, 0x27, 0x4a, + 0xa3, 0x41, 0xef, 0x02, 0x74, 0x1d, 0xf2, 0x52, 0x15, 0xac, 0xb1, 0x23, 0xb1, 0xa6, 0x19, 0x07, + 0x27, 0x48, 0x4d, 0xfd, 0x48, 0x81, 0xb3, 0x51, 0x9f, 0x5a, 0x7c, 0x8d, 0xdd, 0xa9, 0x43, 0x81, + 0x17, 0x6b, 0xd6, 0xb6, 0x1d, 0xd9, 0xc9, 0xd1, 0xef, 0x29, 0x30, 0xe7, 0x93, 0x1a, 0xe5, 0x8a, + 0x7d, 0xb2, 0x04, 0xaa, 0xef, 0xb0, 0x35, 0xd4, 0x6f, 0x81, 0x51, 0xda, 0xf7, 0x7f, 0x2b, 0x70, + 0xae, 0xca, 0x03, 0x03, 0x84, 0x87, 0x3d, 0xdc, 0x5e, 0x27, 0x02, 0x9b, 0x28, 0x42, 0xf2, 0x25, + 0x71, 0x5c, 0xd3, 0x16, 0x8b, 0x47, 0x0e, 0x7b, 0x45, 0xf4, 0x3d, 0xc8, 0xe8, 0xf2, 0x3d, 0xde, + 0x3c, 0xcf, 0x56, 0x6a, 0x4c, 0xc0, 0x09, 0x01, 0xc7, 0xe1, 0x41, 0x09, 0xbc, 0x96, 0xd7, 0x56, + 0x31, 0x78, 0xd2, 0x6b, 0x06, 0x5a, 0x80, 0x94, 0x6b, 0x69, 0x5d, 0xb7, 0x65, 0x7b, 0xc7, 0xab, + 0xfd, 0xb2, 0x1c, 0xeb, 0xef, 0xc2, 0xf9, 0xb1, 0xce, 0x47, 0xa9, 0xdd, 0x2d, 0x28, 0xad, 0x92, + 0xae, 0x43, 0x98, 0x6b, 0x32, 0x9e, 0x13, 0xc7, 0xdc, 0xde, 0x8f, 0x4e, 0xcb, 0xb2, 0x0f, 0x4d, + 0x58, 0x0c, 0x7f, 0x47, 0x94, 0x9d, 0xf9, 0x51, 0x12, 0x72, 0x6b, 0x7b, 0x5d, 0xdb, 0xa1, 0x75, + 0xb1, 0xfc, 0xa3, 0x55, 0x48, 0x75, 0x1d, 0xfb, 0xa5, 0xe9, 0x09, 0xce, 0x07, 0x9e, 0xf9, 0x0f, + 0xf1, 0x3c, 0x93, 0xf5, 0x71, 0x9f, 0x13, 0x61, 0x48, 0x3f, 0xb1, 0x75, 0xad, 0xfd, 0xc0, 0x6c, + 0x7b, 0x33, 0x63, 0x69, 0x9a, 0x98, 0xa5, 0x3e, 0xc7, 0x33, 0x8d, 0xb6, 0x3c, 0xff, 0xd0, 0x27, + 0xa2, 0x87, 0x90, 0x7a, 0x44, 0x69, 0x97, 0x3d, 0x94, 0xce, 0xe5, 0xc6, 0x54, 0x91, 0x8c, 0x41, + 0x4a, 0xea, 0x33, 0x23, 0x0c, 0x73, 0x0f, 0x6d, 0xbb, 0xd9, 0x26, 0xd5, 0xb6, 0xdd, 0x33, 0xaa, + 0xb6, 0xb5, 0x6d, 0x36, 0xe5, 0x16, 0xf3, 0xfa, 0x54, 0x89, 0x0f, 0xab, 0x75, 0x3c, 0xce, 0x8e, + 0xbe, 0x0d, 0xa9, 0xfa, 0xb2, 0x14, 0x25, 0xf6, 0x9c, 0xd7, 0xa6, 0x8a, 0xaa, 0x2f, 0xe3, 0x3e, + 0x13, 0x7a, 0x04, 0x99, 0x95, 0x4f, 0x7b, 0x0e, 0x91, 0x32, 0x66, 0xb9, 0x8c, 0x9b, 0x53, 0x65, + 0x70, 0x1e, 0xec, 0x67, 0x5d, 0x78, 0x15, 0x72, 0x43, 0x9a, 0x44, 0x08, 0xe2, 0x5d, 0xa6, 0x34, + 0x36, 0x9c, 0x69, 0xcc, 0xff, 0x0b, 0x3b, 0x5b, 0xb8, 0x09, 0x71, 0xa6, 0x15, 0x36, 0xb7, 0xb7, + 0x34, 0x97, 0x6c, 0x3a, 0xa6, 0xac, 0xe4, 0x15, 0x65, 0xbd, 0xbf, 0x53, 0x60, 0xa6, 0xbe, 0xcc, + 0x30, 0xdb, 0x56, 0x4f, 0xdf, 0x21, 0x54, 0xd6, 0x92, 0x25, 0x8e, 0xe5, 0x1c, 0xb2, 0x6d, 0x8a, + 0xc5, 0x3f, 0x8d, 0x65, 0x09, 0x5d, 0x06, 0xd0, 0x74, 0x9d, 0xb8, 0x2e, 0x0f, 0x47, 0xc4, 0xf8, + 0xb3, 0xb4, 0xa0, 0x3c, 0x26, 0xfb, 0x8c, 0xcd, 0x25, 0xba, 0x43, 0xc4, 0x4c, 0x4e, 0x63, 0x59, + 0x62, 0x6c, 0x94, 0x74, 0xba, 0x2a, 0xb5, 0x77, 0x88, 0xc5, 0xb5, 0x99, 0xc6, 0x69, 0x46, 0x69, + 0x30, 0x02, 0x73, 0x01, 0xc4, 0x32, 0xba, 0xb6, 0x69, 0x51, 0xae, 0xa6, 0x34, 0xee, 0x97, 0x99, + 0x48, 0x87, 0x34, 0x4d, 0x99, 0xb2, 0x99, 0xc6, 0xb2, 0x24, 0xbb, 0xb1, 0x01, 0xb1, 0x87, 0xd5, + 0xfa, 0xb1, 0xbb, 0x81, 0x20, 0xae, 0xf5, 0xa4, 0xd1, 0xa5, 0x31, 0xff, 0x2f, 0x05, 0xfe, 0xb6, + 0x02, 0x09, 0xae, 0x7a, 0x74, 0x09, 0xd2, 0xba, 0x6d, 0x51, 0xcd, 0xb4, 0xe4, 0xbc, 0x49, 0xe3, + 0x01, 0x21, 0x54, 0xf2, 0x55, 0xc8, 0x6a, 0xba, 0x6e, 0xf7, 0x2c, 0xaa, 0x5a, 0x5a, 0x87, 0xc8, + 0x37, 0x64, 0x24, 0x6d, 0x5d, 0xeb, 0x10, 0x54, 0x02, 0xaf, 0xc8, 0x95, 0x28, 0x34, 0x05, 0x92, + 0xd4, 0x0f, 0xe6, 0x48, 0xbf, 0xf1, 0x67, 0x0a, 0xcc, 0x7d, 0xe8, 0x98, 0x94, 0x54, 0x34, 0xaa, + 0xb7, 0x22, 0x70, 0xfa, 0x6f, 0x43, 0xda, 0xd0, 0xa8, 0x26, 0x32, 0x74, 0x67, 0x26, 0x73, 0xcb, + 0x69, 0xc6, 0xea, 0xf3, 0x2c, 0x5d, 0x04, 0x71, 0xf6, 0x5f, 0xac, 0x07, 0x98, 0xff, 0x1f, 0x04, + 0x72, 0xfc, 0xad, 0x8c, 0xd2, 0xa1, 0xfd, 0xd3, 0x8c, 0xe7, 0xd0, 0x22, 0xe8, 0xfd, 0x7b, 0x90, + 0x94, 0xbb, 0x22, 0xd9, 0xf7, 0xc5, 0x69, 0xf3, 0xd1, 0x8b, 0x44, 0x48, 0x36, 0x54, 0x01, 0x70, + 0xa9, 0xe6, 0x50, 0x95, 0x9a, 0x9d, 0xa3, 0x45, 0x63, 0x3d, 0xbf, 0xc7, 0xd9, 0x18, 0x15, 0xad, + 0x43, 0xa6, 0xf3, 0x52, 0xd7, 0xd5, 0x6d, 0xb3, 0x4d, 0x65, 0x20, 0x36, 0x3f, 0x24, 0xc4, 0x6b, + 0xc9, 0xd3, 0xe7, 0xd5, 0xea, 0x03, 0x5e, 0x49, 0xc4, 0x43, 0x07, 0x65, 0x0c, 0x4c, 0x82, 0xf8, + 0x8f, 0x5e, 0x03, 0x99, 0xf8, 0xa5, 0xba, 0x2e, 0xe5, 0xd3, 0x2b, 0x55, 0xc9, 0x1d, 0x1e, 0x94, + 0xd2, 0x98, 0x53, 0xeb, 0xf5, 0x06, 0x4e, 0x8b, 0x0a, 0x75, 0xd7, 0x5b, 0x54, 0xbf, 0xaf, 0x40, + 0xae, 0xd2, 0x6b, 0xef, 0x6c, 0x74, 0xeb, 0xbd, 0x4e, 0x47, 0x73, 0xf6, 0xd1, 0x45, 0xcf, 0x32, + 0xcc, 0x4f, 0x09, 0xd7, 0x6c, 0x4c, 0x0e, 0xbd, 0xf9, 0x29, 0x61, 0x43, 0x2f, 0x93, 0x4c, 0x18, + 0x5d, 0x64, 0x90, 0x5c, 0x83, 0x1c, 0xdf, 0x13, 0xa8, 0xc4, 0xa2, 0x8e, 0x49, 0xc4, 0xae, 0x31, + 0x86, 0xb3, 0x9c, 0xb8, 0x26, 0x68, 0xe8, 0x06, 0xe4, 0xdd, 0x7d, 0x97, 0x92, 0x8e, 0x2a, 0xb2, + 0xe1, 0x45, 0x52, 0x64, 0x0c, 0xe7, 0x04, 0x15, 0x0b, 0x62, 0xf9, 0x3f, 0x67, 0x20, 0xef, 0x8d, + 0x72, 0x94, 0x60, 0xae, 0x02, 0x89, 0x6d, 0xb3, 0xdd, 0x8f, 0x6c, 0x84, 0xbb, 0x5f, 0x4f, 0xd2, + 0x12, 0x73, 0xb2, 0x1e, 0xb4, 0xe3, 0xac, 0x0b, 0x5f, 0x28, 0x10, 0xe7, 0xeb, 0xd5, 0x5d, 0x88, + 0xf3, 0x69, 0xa3, 0x1c, 0x65, 0xda, 0xf0, 0xaa, 0x7d, 0x4f, 0x3d, 0x33, 0xf0, 0xd4, 0xdc, 0x4b, + 0xb6, 0xb4, 0xfb, 0x77, 0xef, 0xf1, 0xa1, 0xca, 0x62, 0x59, 0x42, 0x15, 0x48, 0x11, 0xde, 0x16, + 0x62, 0xc8, 0xd5, 0x22, 0xc8, 0x3a, 0x87, 0x06, 0xcd, 0x9b, 0xa2, 0x1e, 0x1f, 0xba, 0x00, 0x31, + 0x66, 0x03, 0x49, 0x71, 0x06, 0x7e, 0x78, 0x50, 0x8a, 0xb1, 0xd1, 0x67, 0x34, 0x11, 0x48, 0x7a, + 0x3f, 0x9e, 0x8a, 0x17, 0x12, 0xe5, 0xbf, 0x8a, 0x43, 0xae, 0xd6, 0x89, 0x68, 0x52, 0xad, 0x0c, + 0xeb, 0x38, 0x68, 0x0d, 0x1f, 0x7a, 0xd7, 0xb8, 0x8a, 0x87, 0xbd, 0x52, 0xec, 0x78, 0x5e, 0xa9, + 0xc6, 0x56, 0x08, 0x79, 0x73, 0x80, 0xbd, 0xff, 0x1b, 0x53, 0xdf, 0xdf, 0xd0, 0xb6, 0xda, 0x04, + 0x33, 0x9e, 0x7e, 0x18, 0x8b, 0x0b, 0x40, 0xbf, 0xc0, 0x17, 0x22, 0x31, 0xb5, 0x67, 0x8f, 0x3e, + 0xb5, 0x93, 0xc4, 0x32, 0x18, 0x6d, 0x61, 0x4f, 0x1a, 0xca, 0x9b, 0x10, 0x33, 0x4c, 0x4f, 0x93, + 0x47, 0x75, 0x31, 0x8c, 0x65, 0x8a, 0xbd, 0xc4, 0xfd, 0xf6, 0xe2, 0x8f, 0x0f, 0x2e, 0x6c, 0x00, + 0x0c, 0x7a, 0x85, 0x16, 0x61, 0xd6, 0x6e, 0x1b, 0x0c, 0xba, 0xb3, 0x26, 0xe4, 0x2a, 0xe9, 0xc3, + 0x83, 0x52, 0x62, 0xa3, 0x6d, 0xd4, 0x56, 0x71, 0xc2, 0x6e, 0x1b, 0x35, 0x83, 0x5f, 0xb8, 0x20, + 0xbb, 0x2a, 0xbf, 0x67, 0xc2, 0xb3, 0x0a, 0x70, 0xd2, 0x22, 0xbb, 0xab, 0xc4, 0xd5, 0xfd, 0xcb, + 0x8f, 0xb4, 0x96, 0x3f, 0x51, 0x20, 0xef, 0x69, 0x30, 0xda, 0xc9, 0x99, 0x32, 0x3b, 0xd2, 0xe0, + 0x63, 0xc7, 0x33, 0x78, 0x8f, 0x4f, 0x26, 0xd8, 0x3d, 0x87, 0x33, 0x22, 0xf3, 0x41, 0xd7, 0x28, + 0xf3, 0x8e, 0x51, 0xc1, 0xf6, 0x9f, 0x2a, 0x70, 0x76, 0x58, 0x70, 0x94, 0xfd, 0x7f, 0x3c, 0x12, + 0x77, 0x7d, 0x3d, 0x40, 0x48, 0xd0, 0xdb, 0x45, 0xfc, 0x74, 0x38, 0x04, 0xbb, 0xf0, 0x1e, 0x24, + 0x38, 0xf9, 0x04, 0x5e, 0x4a, 0x2a, 0xb1, 0x05, 0x73, 0x2b, 0x86, 0x51, 0xaf, 0x4b, 0x43, 0xfa, + 0xca, 0x7e, 0xc1, 0x83, 0x0b, 0x33, 0x41, 0x70, 0xc1, 0xff, 0xa6, 0x28, 0xe1, 0xc2, 0x8f, 0xe7, + 0x21, 0x2b, 0xdb, 0xbe, 0x69, 0xb1, 0xbd, 0xec, 0x1d, 0x88, 0x35, 0x25, 0x30, 0xcc, 0x04, 0x2e, + 0xb2, 0x83, 0x8b, 0x36, 0x98, 0xd5, 0x64, 0x0c, 0xdd, 0x1e, 0x0d, 0x88, 0x12, 0x0e, 0x42, 0x45, + 0x03, 0x86, 0x6e, 0x8f, 0xa2, 0x0f, 0xe0, 0xb4, 0x3e, 0xb8, 0xf2, 0xa0, 0x32, 0xe6, 0x58, 0x68, + 0x6e, 0x55, 0xe0, 0xcd, 0x0f, 0x9c, 0xd7, 0x87, 0xc8, 0x68, 0xc5, 0x9f, 0x73, 0x1f, 0x0f, 0xdd, + 0x7d, 0x8c, 0xa6, 0xf9, 0xfb, 0x12, 0xf3, 0xd1, 0x9b, 0x30, 0x6b, 0xf0, 0xdc, 0x6e, 0xb9, 0x7b, + 0x09, 0x9a, 0x5a, 0x43, 0xc9, 0xf3, 0x58, 0xd6, 0x47, 0x8f, 0x20, 0x2b, 0xfe, 0x89, 0x40, 0xbe, + 0xf4, 0x84, 0x37, 0xc2, 0xf9, 0x7d, 0xe7, 0xd9, 0x38, 0x63, 0x0c, 0x68, 0xe8, 0x1e, 0xc4, 0x5d, + 0x5d, 0x13, 0xd0, 0x3d, 0x38, 0xea, 0xe1, 0xcb, 0xc9, 0xc5, 0xbc, 0x2e, 0xfa, 0x10, 0xe6, 0xb6, + 0x48, 0xd3, 0xb4, 0x54, 0x3a, 0x38, 0x69, 0x2e, 0xa6, 0xc6, 0x0e, 0xb7, 0xfb, 0xde, 0x21, 0x38, + 0x85, 0x10, 0x17, 0xb6, 0x46, 0x1e, 0xb0, 0x61, 0xe2, 0xce, 0xdd, 0x27, 0x36, 0x1d, 0x3a, 0x4c, + 0x81, 0xb9, 0x7d, 0x38, 0x4f, 0x86, 0xc8, 0x68, 0x0d, 0x32, 0x1a, 0x9b, 0x9f, 0x2a, 0x4f, 0xc4, + 0x2a, 0x42, 0xe8, 0x8e, 0x73, 0x2c, 0x25, 0x0c, 0x83, 0xd6, 0x27, 0x0d, 0xc4, 0x74, 0x88, 0xd3, + 0x24, 0xc5, 0xcc, 0x64, 0x31, 0xfe, 0x33, 0x6c, 0x29, 0x86, 0x93, 0xd0, 0x63, 0xc8, 0xb5, 0xbc, + 0xec, 0x04, 0x1e, 0x12, 0xc8, 0x86, 0x6e, 0x39, 0x03, 0x92, 0x2a, 0x70, 0xb6, 0xe5, 0x23, 0xa2, + 0xd7, 0x60, 0xa6, 0xa9, 0x17, 0x73, 0x5c, 0xc2, 0xa5, 0x49, 0x29, 0x04, 0x78, 0xa6, 0xa9, 0xa3, + 0x77, 0x20, 0x25, 0x82, 0xac, 0x7b, 0x56, 0x31, 0x1f, 0x3a, 0x79, 0x87, 0xe3, 0xdb, 0x98, 0x07, + 0x83, 0xd9, 0xbb, 0x1e, 0x41, 0x56, 0x9c, 0x29, 0xb7, 0x79, 0x72, 0x4b, 0xf1, 0x74, 0xa8, 0xc1, + 0x8d, 0x67, 0xe6, 0x60, 0x71, 0x3b, 0x50, 0xd0, 0xd0, 0x3a, 0xe4, 0x1d, 0x11, 0x46, 0x90, 0xc9, + 0xd9, 0xc5, 0x02, 0x97, 0xf5, 0x4a, 0xb0, 0x2b, 0x19, 0x0b, 0x79, 0xe1, 0x9c, 0xe3, 0xa7, 0xa2, + 0xef, 0xc2, 0xd9, 0x61, 0x79, 0x72, 0x4a, 0xcc, 0x71, 0xa9, 0xaf, 0x4d, 0x95, 0xea, 0x9f, 0x19, + 0xc8, 0x19, 0x7b, 0x84, 0xee, 0x43, 0x42, 0x8c, 0x39, 0xe2, 0x02, 0x4b, 0x41, 0x7b, 0x00, 0xff, + 0x70, 0x8b, 0xda, 0x4c, 0x61, 0x54, 0x9e, 0xa5, 0xab, 0x6d, 0xbb, 0x59, 0x3c, 0x13, 0xaa, 0xb0, + 0xf1, 0x90, 0x00, 0xce, 0xd0, 0x01, 0x8d, 0xd9, 0x8c, 0x23, 0xe8, 0xf2, 0x90, 0xf7, 0x6c, 0xa8, + 0xcd, 0x04, 0x1c, 0xb0, 0xe3, 0xac, 0xe3, 0x23, 0xf2, 0x71, 0x14, 0xb9, 0x4b, 0x2a, 0x9f, 0xf6, + 0xf3, 0xe1, 0xe3, 0x38, 0x96, 0x91, 0x8f, 0x33, 0xce, 0x80, 0x86, 0x1a, 0x50, 0x10, 0x89, 0xd0, + 0x44, 0xf5, 0x8e, 0x0a, 0x8b, 0xe7, 0xb8, 0xb4, 0x57, 0x03, 0x7d, 0x6a, 0xd0, 0xd1, 0x28, 0x3e, + 0xad, 0x0f, 0xd3, 0x51, 0x17, 0x16, 0x8c, 0xfe, 0x21, 0x9c, 0xfa, 0x92, 0x9f, 0xc2, 0x0d, 0xe4, + 0x9f, 0xe7, 0xf2, 0xef, 0x05, 0xba, 0xb9, 0x89, 0xa7, 0x83, 0xb8, 0x68, 0x84, 0x54, 0x60, 0xce, + 0x8c, 0xcb, 0x57, 0xf5, 0x41, 0xa2, 0x7a, 0xb1, 0x18, 0xea, 0xcc, 0x42, 0x92, 0xe9, 0x71, 0x41, + 0x1f, 0x79, 0xc0, 0x3c, 0xab, 0x65, 0xdb, 0xdd, 0xe2, 0x85, 0x50, 0xcf, 0xea, 0x8b, 0xae, 0x61, + 0x5e, 0x97, 0x4d, 0x52, 0xd3, 0x32, 0x29, 0x5f, 0xa0, 0x16, 0x42, 0x27, 0xe9, 0xf0, 0xed, 0x3a, + 0x9c, 0x34, 0x45, 0x99, 0x4d, 0x2d, 0x2a, 0x83, 0x12, 0xd2, 0x54, 0x2e, 0x85, 0x4e, 0xad, 0xa0, + 0xe8, 0x05, 0xce, 0x51, 0x3f, 0x95, 0x4d, 0x2d, 0xe1, 0xf4, 0x46, 0xa4, 0x5e, 0x0e, 0x9d, 0x5a, + 0xa1, 0xe9, 0x9c, 0x18, 0x69, 0x63, 0x8f, 0xd8, 0x46, 0x9d, 0x0b, 0xe4, 0xf7, 0x86, 0x8b, 0x57, + 0x42, 0xd7, 0xd0, 0xd1, 0xd8, 0x04, 0x4e, 0xb7, 0x3d, 0x0a, 0x73, 0xcc, 0xbb, 0x8e, 0x49, 0x89, + 0xba, 0xa5, 0x51, 0xbd, 0x55, 0x2c, 0x85, 0x3a, 0xe6, 0xb1, 0x23, 0x1a, 0x0c, 0xbb, 0x7d, 0x12, + 0x5b, 0x8a, 0xc5, 0x06, 0xad, 0xb8, 0x38, 0x65, 0x47, 0xd0, 0x5f, 0x8a, 0x45, 0x7d, 0xf4, 0x6d, + 0x48, 0xbf, 0xe8, 0x11, 0x67, 0x9f, 0x3b, 0xd6, 0xab, 0xa1, 0xf7, 0xc1, 0x47, 0x52, 0x3c, 0x70, + 0xea, 0x85, 0x24, 0xb0, 0x57, 0x0b, 0xa8, 0x5c, 0x2c, 0x87, 0xbe, 0x7a, 0x68, 0x73, 0x84, 0x65, + 0x7d, 0xa4, 0xc1, 0xbc, 0x18, 0x1f, 0x99, 0x05, 0xea, 0xc8, 0x74, 0xcb, 0xe2, 0x35, 0x2e, 0x28, + 0x14, 0xab, 0x06, 0x26, 0xa2, 0xe2, 0x33, 0xda, 0xf8, 0x33, 0xe6, 0x7c, 0xe4, 0xf2, 0x29, 0xf0, + 0x6d, 0xf1, 0x7a, 0xa8, 0xf3, 0x09, 0x40, 0xf7, 0x38, 0xab, 0xf9, 0x88, 0x62, 0x11, 0x35, 0x54, + 0xd7, 0xa5, 0x0c, 0x54, 0x16, 0x6f, 0x4c, 0x58, 0x44, 0x47, 0x30, 0x2e, 0xbf, 0x95, 0x50, 0x17, + 0x7c, 0x3c, 0xed, 0xb5, 0x4d, 0x34, 0x47, 0x3a, 0xfa, 0x9b, 0xa1, 0x62, 0xc6, 0xee, 0xaf, 0x61, + 0xd0, 0xfb, 0x24, 0xe6, 0x0a, 0x35, 0x7e, 0x29, 0x43, 0x75, 0xa9, 0x46, 0xdd, 0xe2, 0x2b, 0xa1, + 0xae, 0x70, 0xfc, 0x96, 0x09, 0xce, 0x68, 0x03, 0xda, 0xdb, 0xf1, 0xcf, 0xc5, 0x46, 0xec, 0x62, + 0xe1, 0x52, 0xf9, 0x87, 0xf3, 0x90, 0xf3, 0x10, 0xb0, 0x40, 0xb7, 0x6f, 0xf8, 0xd1, 0xed, 0x95, + 0x30, 0x74, 0x2b, 0x38, 0x04, 0xbc, 0x7d, 0xc3, 0x0f, 0x6f, 0xaf, 0x84, 0xc1, 0x5b, 0x8f, 0x83, + 0xe1, 0x5b, 0x1c, 0x86, 0x6f, 0x5f, 0x3d, 0x02, 0xbe, 0x95, 0x82, 0x46, 0x01, 0x6e, 0x65, 0x1c, + 0xe0, 0x5e, 0x9f, 0x0c, 0x70, 0xa5, 0x20, 0x1f, 0xc2, 0x7d, 0x6b, 0x04, 0xe1, 0x5e, 0x9d, 0x80, + 0x70, 0x25, 0xb7, 0x07, 0x71, 0x6b, 0x81, 0x10, 0xf7, 0xe6, 0x34, 0x88, 0x2b, 0xa5, 0x0c, 0x61, + 0xdc, 0xe5, 0x21, 0x8c, 0x5b, 0x0a, 0xc5, 0xb8, 0x92, 0x57, 0x80, 0xdc, 0x8f, 0xc2, 0x41, 0xee, + 0x37, 0x8e, 0x04, 0x72, 0xa5, 0xb4, 0x71, 0x94, 0x8b, 0xc3, 0x50, 0xee, 0xab, 0x47, 0x40, 0xb9, + 0xde, 0x60, 0x8d, 0xc0, 0xdc, 0x07, 0x41, 0x30, 0xf7, 0xc6, 0x14, 0x98, 0x2b, 0x65, 0xf9, 0x71, + 0xee, 0x83, 0x20, 0x9c, 0x7b, 0x63, 0x0a, 0xce, 0x1d, 0x92, 0x23, 0x80, 0xee, 0x93, 0x60, 0xa0, + 0xfb, 0xca, 0x54, 0xa0, 0x2b, 0x65, 0x0d, 0x23, 0xdd, 0xd7, 0x7d, 0x48, 0xf7, 0x72, 0x08, 0xd2, + 0x95, 0x8c, 0x0c, 0xea, 0xbe, 0x3b, 0x06, 0x75, 0xcb, 0x93, 0xa0, 0xae, 0xe4, 0xec, 0x63, 0xdd, + 0x5a, 0x20, 0xd6, 0xbd, 0x39, 0x0d, 0xeb, 0x7a, 0x96, 0xe7, 0x07, 0xbb, 0x1b, 0x21, 0x60, 0xf7, + 0xd6, 0x74, 0xb0, 0x2b, 0xc5, 0x8d, 0xa0, 0x5d, 0x75, 0x22, 0xda, 0x7d, 0xfd, 0x88, 0x68, 0x57, + 0xca, 0x0e, 0x82, 0xbb, 0x3f, 0x3f, 0x0c, 0x77, 0x17, 0xc3, 0xe1, 0xae, 0x14, 0x22, 0xf1, 0x6e, + 0x2d, 0x10, 0xef, 0xde, 0x9c, 0x86, 0x77, 0x3d, 0xa5, 0xf9, 0x01, 0xef, 0x93, 0x60, 0xc0, 0xfb, + 0xca, 0x54, 0xc0, 0xeb, 0xd9, 0xce, 0x10, 0xe2, 0xad, 0x05, 0x22, 0xde, 0x9b, 0xd3, 0x10, 0x6f, + 0x7f, 0x34, 0x7d, 0x90, 0x77, 0x33, 0x14, 0xf2, 0xde, 0x3e, 0x0a, 0xe4, 0x95, 0x22, 0xc7, 0x30, + 0xef, 0x8b, 0x23, 0x60, 0xde, 0xe5, 0x63, 0x61, 0x5e, 0xf9, 0xa6, 0x70, 0xd0, 0xfb, 0x51, 0x38, + 0xe8, 0xfd, 0xc6, 0x91, 0x40, 0xaf, 0xe7, 0xdc, 0xc6, 0x50, 0xef, 0xf2, 0x10, 0xea, 0x2d, 0x85, + 0xa2, 0x5e, 0xcf, 0xd7, 0x72, 0xd8, 0xfb, 0xee, 0x18, 0xec, 0x2d, 0x4f, 0x82, 0xbd, 0xde, 0x84, + 0xf5, 0x70, 0xaf, 0x3a, 0x11, 0xa7, 0xbe, 0x7e, 0x44, 0x9c, 0xea, 0x4d, 0x8a, 0x00, 0xa0, 0x5a, + 0x0d, 0x00, 0xaa, 0xd7, 0x27, 0x03, 0x55, 0x6f, 0x2d, 0x1c, 0x20, 0xd5, 0x07, 0x41, 0x48, 0xf5, + 0xc6, 0x14, 0xa4, 0xea, 0xb9, 0x56, 0x1f, 0x54, 0x7d, 0x6b, 0x04, 0xaa, 0x5e, 0x9d, 0x1a, 0x30, + 0xe9, 0x63, 0xd5, 0xf7, 0xc6, 0xb1, 0xea, 0xb5, 0x89, 0x58, 0x55, 0xf2, 0x0f, 0xc0, 0xea, 0x5b, + 0x23, 0x60, 0xf5, 0xea, 0x04, 0xb0, 0xea, 0xbd, 0x5c, 0xa2, 0xd5, 0xad, 0xc9, 0x68, 0x75, 0xe9, + 0xa8, 0x68, 0x55, 0x8a, 0x0d, 0x84, 0xab, 0x4f, 0x82, 0xe1, 0xea, 0x2b, 0x47, 0x3c, 0xb5, 0x1d, + 0xc1, 0xab, 0x0f, 0x82, 0xf0, 0xea, 0x8d, 0x29, 0x78, 0x75, 0xb0, 0x18, 0xf6, 0x01, 0xeb, 0x83, + 0x20, 0xc0, 0x7a, 0x63, 0x0a, 0x60, 0xf5, 0xe4, 0xf8, 0x10, 0x6b, 0x2d, 0x10, 0xb1, 0xde, 0x9c, + 0x86, 0x58, 0x3d, 0x57, 0x16, 0x02, 0x59, 0xdf, 0x8f, 0xa7, 0x2e, 0x15, 0x2e, 0x97, 0x3f, 0x4b, + 0xc0, 0xec, 0x23, 0x2f, 0x5a, 0xe4, 0xbb, 0x8a, 0xa1, 0x9c, 0xe4, 0x2a, 0x06, 0x5a, 0x85, 0xa4, + 0x1c, 0x5f, 0x09, 0x63, 0x27, 0xdc, 0x29, 0x1b, 0xbb, 0x65, 0xe4, 0xb1, 0x9e, 0x20, 0x93, 0x11, + 0xdd, 0x87, 0x5c, 0xcf, 0x25, 0x8e, 0xda, 0x75, 0x4c, 0xdb, 0x31, 0xa9, 0x08, 0xde, 0x2b, 0x95, + 0xc2, 0x97, 0x07, 0xa5, 0xec, 0xa6, 0x4b, 0x9c, 0x67, 0x92, 0x8e, 0xb3, 0x3d, 0x5f, 0xc9, 0xfb, + 0x92, 0x56, 0xe2, 0xe8, 0x5f, 0xd2, 0xfa, 0x00, 0x0a, 0x0e, 0xd1, 0x8c, 0x21, 0x0f, 0x2a, 0xee, + 0x2e, 0x04, 0xaf, 0x2d, 0x9a, 0xe1, 0x73, 0x93, 0xfc, 0x0e, 0xc3, 0x69, 0x67, 0x98, 0x88, 0xee, + 0xc2, 0x7c, 0x47, 0xdb, 0x13, 0x97, 0x72, 0xbc, 0x15, 0x90, 0x47, 0xcd, 0x52, 0x3c, 0x1e, 0x8b, + 0x3a, 0xda, 0x1e, 0xff, 0x2c, 0x97, 0x78, 0xc4, 0x3f, 0x21, 0x72, 0x03, 0xf2, 0x86, 0xe9, 0x52, + 0xd3, 0xd2, 0xbd, 0xcb, 0xbd, 0x69, 0x91, 0xa9, 0xef, 0x51, 0xc5, 0xfd, 0xdd, 0xdb, 0x30, 0x27, + 0xc3, 0xcf, 0x83, 0x0f, 0x75, 0x71, 0x90, 0x98, 0x62, 0xad, 0x60, 0x0f, 0x06, 0xdf, 0x36, 0xab, + 0xc2, 0xe9, 0xa6, 0x46, 0xc9, 0xae, 0xb6, 0xaf, 0x5a, 0xb6, 0xc1, 0x75, 0x9f, 0xe1, 0xd7, 0x28, + 0x2f, 0x1e, 0x1e, 0x94, 0x72, 0x0f, 0xc5, 0xa3, 0x75, 0xdb, 0x10, 0x23, 0x30, 0x2b, 0xfe, 0xe1, + 0x5c, 0xd3, 0xf7, 0xc0, 0x40, 0x2b, 0x90, 0x65, 0xab, 0xad, 0x6a, 0x8b, 0xaf, 0x71, 0x48, 0xf8, + 0x17, 0x76, 0xbc, 0x2c, 0xbf, 0xd9, 0x81, 0x33, 0xee, 0xa0, 0xf0, 0x7e, 0x3c, 0x95, 0x2c, 0xa4, + 0xca, 0x9f, 0x29, 0x90, 0x1d, 0x4a, 0xac, 0xf8, 0xd6, 0x48, 0x08, 0xe2, 0x42, 0x30, 0xa4, 0x0c, + 0x0e, 0xe7, 0xac, 0x40, 0x4a, 0x2a, 0xd6, 0x0b, 0xe8, 0x94, 0xc2, 0x51, 0x05, 0xdf, 0xbe, 0x79, + 0xd1, 0x2c, 0x8f, 0xed, 0xed, 0xf8, 0x1f, 0xfe, 0xa0, 0x74, 0xaa, 0xfc, 0x93, 0x18, 0xe4, 0x86, + 0x33, 0x29, 0x6a, 0x23, 0xed, 0x0a, 0xf2, 0x39, 0x43, 0x1c, 0xe1, 0xad, 0x5c, 0x85, 0xb4, 0x23, + 0x2b, 0x79, 0xcd, 0x5c, 0x9c, 0x10, 0x68, 0xf1, 0xb7, 0x73, 0xc0, 0xb8, 0xf0, 0xb7, 0x33, 0xfd, + 0x09, 0xbd, 0x04, 0x09, 0xfe, 0x69, 0x3d, 0xd9, 0xb4, 0xa0, 0x7c, 0xc9, 0x35, 0xf6, 0x1c, 0x8b, + 0x6a, 0xcc, 0x01, 0x34, 0x4e, 0x74, 0x17, 0xab, 0x4f, 0x38, 0xc1, 0xa7, 0xe9, 0x4e, 0x78, 0x79, + 0xa8, 0xce, 0xb6, 0xbe, 0xed, 0x36, 0xd1, 0xa9, 0xfc, 0x8a, 0x9f, 0xf7, 0x01, 0xba, 0xeb, 0xa3, + 0x22, 0xe4, 0x37, 0xff, 0x96, 0xb0, 0xfc, 0xe6, 0x9f, 0x2f, 0xc6, 0x96, 0xef, 0x8b, 0xe0, 0xf3, + 0x45, 0x04, 0x55, 0xc5, 0x50, 0xdf, 0x7e, 0x02, 0x67, 0x02, 0x66, 0x2f, 0xca, 0x03, 0x54, 0x37, + 0xd6, 0xeb, 0xb5, 0x7a, 0x63, 0x6d, 0xbd, 0x51, 0x38, 0x85, 0x72, 0x90, 0x66, 0xe5, 0xb5, 0xf5, + 0xfa, 0x66, 0xbd, 0xa0, 0xa0, 0x02, 0x64, 0x6b, 0xeb, 0xbe, 0x0a, 0xf2, 0xb3, 0x71, 0xb7, 0x3f, + 0x84, 0x8c, 0xef, 0x1e, 0x13, 0x42, 0x90, 0x7f, 0xb6, 0x59, 0x7f, 0xa4, 0x36, 0x6a, 0x4f, 0xd7, + 0xea, 0x8d, 0x95, 0xa7, 0xcf, 0x0a, 0xa7, 0x98, 0x64, 0x4e, 0x5b, 0xa9, 0x6c, 0xe0, 0x46, 0x41, + 0xe9, 0x97, 0x1b, 0x1b, 0x9b, 0xd5, 0x47, 0x85, 0x99, 0x7e, 0xf9, 0x83, 0xcd, 0x35, 0xfc, 0x71, + 0x21, 0x26, 0x05, 0x6b, 0x30, 0x1f, 0x98, 0x20, 0x88, 0x32, 0x90, 0xdc, 0xb4, 0xf8, 0xa5, 0x1a, + 0xd1, 0xca, 0x7e, 0x9e, 0x5a, 0x41, 0x41, 0x29, 0x91, 0x8b, 0x56, 0x98, 0x41, 0xb3, 0x30, 0x53, + 0x5f, 0x2e, 0xc4, 0xd0, 0x69, 0xc8, 0xf8, 0x12, 0xed, 0x0a, 0x71, 0x94, 0x96, 0xd9, 0x56, 0x85, + 0xc4, 0xed, 0xab, 0xe0, 0x4b, 0x6f, 0x41, 0x00, 0xb3, 0x4f, 0x34, 0x4a, 0x5c, 0x5a, 0x38, 0x85, + 0x92, 0x10, 0x5b, 0x69, 0xb7, 0x0b, 0xca, 0xbd, 0x8f, 0x20, 0xe5, 0x7d, 0x9a, 0x00, 0x3d, 0x81, + 0x84, 0x40, 0x2c, 0xa5, 0xf0, 0xa9, 0xc0, 0x27, 0xd5, 0xc2, 0xe2, 0xb4, 0xb9, 0x52, 0x3e, 0xc5, + 0x24, 0xaf, 0xed, 0xfd, 0x2c, 0x24, 0x57, 0xae, 0x7e, 0xfe, 0xef, 0x57, 0x4e, 0x7d, 0x7e, 0x78, + 0x45, 0xf9, 0xe2, 0xf0, 0x8a, 0xf2, 0x2f, 0x87, 0x57, 0x94, 0x7f, 0x3b, 0xbc, 0xa2, 0xfc, 0xfe, + 0x7f, 0x5c, 0x39, 0xf5, 0x49, 0x52, 0xb2, 0x6c, 0xcd, 0xf2, 0x6f, 0x40, 0x2e, 0xff, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x94, 0x23, 0x57, 0x4e, 0xe4, 0x52, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 42baba4f084e..ade0856f1886 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -379,6 +379,35 @@ message CheckConsistencyResponse { ResponseHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; } +// An AdjustStatsRequest triggers a stats recomputation on the Range addressed by +// the request. +// +// Since this request targets a specific Range, the start key must equal the +// start key of the target Range. +// +// The stats recomputation touches essentially the whole range, but the command +// avoids having to block other commands by taking care to not interleave +// with splits, and by using the commutativity of stats updates. As a result, +// it is safe to invoke at any time, including repeatedly, though it should be +// used conservatively due to performing a full scan of the Range. +message AdjustStatsRequest { + option (gogoproto.equal) = true; + + Span header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; + bytes computation_end_key = 2 [(gogoproto.casttype) = "Key"]; + // When dry_run is true, the stats delta is computed, but no stats adjustment + // is performed. + bool dry_run = 3; +} + +// An AdjustStatsResponse is the response to an AdjustStatsRequest. +message AdjustStatsResponse { + ResponseHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; + + // added_delta is the adjustment made to the range's stats, i.e. `new_stats = old_stats + added_delta`. + storage.engine.enginepb.MVCCNetworkStats added_delta = 2 [(gogoproto.nullable) = false]; +} + // A BeginTransactionRequest is the argument to the BeginTransaction() method. message BeginTransactionRequest { option (gogoproto.equal) = true; @@ -1150,6 +1179,7 @@ message RequestUnion { QueryTxnRequest query_txn = 33; AdminScatterRequest admin_scatter = 36; AddSSTableRequest add_sstable = 37; + AdjustStatsRequest adjust_stats = 39; } // A ResponseUnion contains exactly one of the responses. @@ -1200,6 +1230,7 @@ message ResponseUnion { QueryTxnResponse query_txn = 33; AdminScatterResponse admin_scatter = 36; AddSSTableResponse add_sstable = 37; + AdjustStatsResponse adjust_stats = 39; } // A Header is attached to a BatchRequest, encapsulating routing and auxiliary diff --git a/pkg/roachpb/batch_generated.go b/pkg/roachpb/batch_generated.go index eef9087bf00b..5b0605fb117c 100644 --- a/pkg/roachpb/batch_generated.go +++ b/pkg/roachpb/batch_generated.go @@ -9,7 +9,7 @@ import ( "strconv" ) -type reqCounts [37]int32 +type reqCounts [38]int32 // getReqCounts returns the number of times each // request type appears in the batch. @@ -91,6 +91,8 @@ func (ba *BatchRequest) getReqCounts() reqCounts { counts[35]++ case r.AddSstable != nil: counts[36]++ + case r.AdjustStats != nil: + counts[37]++ default: panic(fmt.Sprintf("unsupported request: %+v", r)) } @@ -136,6 +138,7 @@ var requestNames = []string{ "QueryTxn", "AdmScatter", "AddSstable", + "AdjustStats", } // Summary prints a short summary of the requests in a batch. @@ -207,6 +210,7 @@ func (ba *BatchRequest) CreateReply() *BatchResponse { var buf34 []QueryTxnResponse var buf35 []AdminScatterResponse var buf36 []AddSSTableResponse + var buf37 []AdjustStatsResponse for i, r := range ba.Requests { switch { @@ -432,6 +436,12 @@ func (ba *BatchRequest) CreateReply() *BatchResponse { } br.Responses[i].AddSstable = &buf36[0] buf36 = buf36[1:] + case r.AdjustStats != nil: + if buf37 == nil { + buf37 = make([]AdjustStatsResponse, counts[37]) + } + br.Responses[i].AdjustStats = &buf37[0] + buf37 = buf37[1:] default: panic(fmt.Sprintf("unsupported request: %+v", r)) } diff --git a/pkg/roachpb/method.go b/pkg/roachpb/method.go index 0cc0a109875f..afb67bab4e56 100644 --- a/pkg/roachpb/method.go +++ b/pkg/roachpb/method.go @@ -138,4 +138,6 @@ const ( AdminScatter // AddSSTable links a file into the RocksDB log-structured merge-tree. AddSSTable + // AdjustStats applies a delta to a Range's MVCCStats to fix computational errors. + AdjustStats ) diff --git a/pkg/roachpb/method_string.go b/pkg/roachpb/method_string.go index f03442698c0f..2f1ca7e8cbfc 100644 --- a/pkg/roachpb/method_string.go +++ b/pkg/roachpb/method_string.go @@ -4,9 +4,9 @@ package roachpb import "fmt" -const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeScanReverseScanBeginTransactionEndTransactionAdminSplitAdminMergeAdminTransferLeaseAdminChangeReplicasHeartbeatTxnGCPushTxnQueryTxnRangeLookupResolveIntentResolveIntentRangeNoopMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumDeprecatedVerifyChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTable" +const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeScanReverseScanBeginTransactionEndTransactionAdminSplitAdminMergeAdminTransferLeaseAdminChangeReplicasHeartbeatTxnGCPushTxnQueryTxnRangeLookupResolveIntentResolveIntentRangeNoopMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumDeprecatedVerifyChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTableAdjustStats" -var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 60, 71, 87, 101, 111, 121, 139, 158, 170, 172, 179, 187, 198, 211, 229, 233, 238, 249, 261, 274, 283, 298, 322, 338, 345, 355, 361, 367, 379, 389} +var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 60, 71, 87, 101, 111, 121, 139, 158, 170, 172, 179, 187, 198, 211, 229, 233, 238, 249, 261, 274, 283, 298, 322, 338, 345, 355, 361, 367, 379, 389, 400} func (i Method) String() string { if i < 0 || i >= Method(len(_Method_index)-1) { diff --git a/pkg/storage/api.pb.go b/pkg/storage/api.pb.go index 6c15a2ecbb80..d14e6bb7c878 100644 --- a/pkg/storage/api.pb.go +++ b/pkg/storage/api.pb.go @@ -33,6 +33,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" import cockroach_roachpb1 "github.com/cockroachdb/cockroach/pkg/roachpb" +import cockroach_storage_engine_enginepb "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" import github_com_cockroachdb_cockroach_pkg_roachpb "github.com/cockroachdb/cockroach/pkg/roachpb" import github_com_cockroachdb_cockroach_pkg_util_uuid "github.com/cockroachdb/cockroach/pkg/util/uuid" @@ -87,6 +88,8 @@ type CollectChecksumResponse struct { // TODO(tschottdorf): with larger ranges, this is no longer tenable. // See https://github.com/cockroachdb/cockroach/issues/21128. Snapshot *cockroach_roachpb1.RaftSnapshotData `protobuf:"bytes,2,opt,name=snapshot" json:"snapshot,omitempty"` + // delta carries the stats of the range minus the recomputed stats. + Delta cockroach_storage_engine_enginepb.MVCCNetworkStats `protobuf:"bytes,3,opt,name=delta" json:"delta"` } func (m *CollectChecksumResponse) Reset() { *m = CollectChecksumResponse{} } @@ -276,6 +279,14 @@ func (m *CollectChecksumResponse) MarshalTo(dAtA []byte) (int, error) { } i += n3 } + dAtA[i] = 0x1a + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Delta.Size())) + n4, err := m.Delta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 return i, nil } @@ -328,6 +339,8 @@ func (m *CollectChecksumResponse) Size() (n int) { l = m.Snapshot.Size() n += 1 + l + sovApi(uint64(l)) } + l = m.Delta.Size() + n += 1 + l + sovApi(uint64(l)) return n } @@ -685,6 +698,36 @@ func (m *CollectChecksumResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Delta", 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 err := m.Delta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -814,35 +857,39 @@ var ( func init() { proto.RegisterFile("storage/api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 472 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x41, 0x6f, 0xd3, 0x30, - 0x18, 0xad, 0x37, 0x68, 0x2a, 0x17, 0x09, 0xcd, 0x42, 0x63, 0x2a, 0x52, 0x32, 0x8a, 0x90, 0x06, - 0x87, 0x44, 0xea, 0xb8, 0x23, 0xda, 0x4a, 0x90, 0x0b, 0x07, 0x4f, 0xbb, 0xec, 0xc0, 0xe4, 0xc6, - 0x5e, 0x92, 0xb5, 0xb5, 0x83, 0xed, 0x20, 0xed, 0x5f, 0xf0, 0xb3, 0xca, 0xad, 0x47, 0xc4, 0x21, - 0x82, 0xf0, 0x2f, 0x38, 0x21, 0x3b, 0x6e, 0xc6, 0xe8, 0x0e, 0x83, 0xdb, 0xf7, 0x7d, 0xfe, 0xde, - 0xf3, 0x7b, 0xcf, 0x32, 0xdc, 0x53, 0x5a, 0x48, 0x92, 0xb2, 0x88, 0x14, 0x79, 0x58, 0x48, 0xa1, - 0x05, 0xda, 0x4b, 0x44, 0x32, 0x97, 0x82, 0x24, 0x59, 0xe8, 0x0e, 0x07, 0x4f, 0x6c, 0x5b, 0xcc, - 0xa2, 0x9c, 0x6b, 0x26, 0x39, 0x59, 0x9c, 0x4b, 0x72, 0xa1, 0x9b, 0xfd, 0xc1, 0xfe, 0xe6, 0x70, - 0xc9, 0x34, 0xa1, 0x44, 0x13, 0x37, 0x7f, 0x94, 0x8a, 0x54, 0xd8, 0x32, 0x32, 0x55, 0x33, 0x1d, - 0xae, 0x01, 0x44, 0x27, 0x5a, 0x48, 0x86, 0xd9, 0xc7, 0x92, 0x29, 0xfd, 0x8e, 0x11, 0xca, 0x24, - 0x3a, 0x83, 0x1e, 0x17, 0x94, 0x9d, 0xe7, 0xf4, 0x00, 0x1c, 0x82, 0xa3, 0xfb, 0xe3, 0x37, 0x75, - 0x15, 0x74, 0xdf, 0x0b, 0xca, 0xe2, 0xe9, 0xaf, 0x2a, 0x38, 0x4e, 0x73, 0x9d, 0x95, 0xb3, 0x30, - 0x11, 0xcb, 0xa8, 0x95, 0x47, 0x67, 0xd7, 0x75, 0x54, 0xcc, 0xd3, 0xc8, 0x09, 0x09, 0x1b, 0x18, - 0xee, 0x1a, 0xc6, 0x98, 0xa2, 0x0f, 0xb0, 0x67, 0x8c, 0x58, 0xf2, 0x1d, 0x4b, 0x3e, 0xa9, 0xab, - 0xc0, 0xb3, 0x2a, 0x2c, 0xfb, 0xab, 0x7f, 0x62, 0x77, 0x38, 0xec, 0x59, 0xd2, 0x98, 0x0e, 0xbf, - 0xec, 0xc0, 0xfd, 0x89, 0x58, 0x2c, 0x58, 0xa2, 0x27, 0x19, 0x4b, 0xe6, 0xaa, 0x5c, 0x3a, 0x73, - 0xe8, 0x2d, 0xec, 0x66, 0xd6, 0xa0, 0x75, 0xd5, 0x1f, 0x3d, 0x0f, 0xb7, 0xc2, 0x0d, 0xb7, 0xd3, - 0x18, 0xf7, 0x56, 0x55, 0xd0, 0x59, 0x57, 0x01, 0xc0, 0x0e, 0x6e, 0x3c, 0x48, 0xc2, 0xd3, 0xd6, - 0xc3, 0x6e, 0xe3, 0x01, 0x9b, 0xd9, 0x7f, 0x78, 0x70, 0x38, 0xec, 0x59, 0xd2, 0x98, 0xa2, 0x4b, - 0xd8, 0x4f, 0x9c, 0x76, 0x73, 0xc5, 0xee, 0x21, 0x38, 0x7a, 0x30, 0x8e, 0x8d, 0x8c, 0x6f, 0x77, - 0x4d, 0xbf, 0xd4, 0xf9, 0x22, 0x2a, 0xcb, 0x9c, 0x86, 0xa7, 0xa7, 0xf1, 0xb4, 0xae, 0x02, 0xb8, - 0x49, 0x23, 0x9e, 0x62, 0xb8, 0x61, 0x8f, 0x29, 0x1a, 0xc0, 0xde, 0xa6, 0x3b, 0xb8, 0x67, 0x2e, - 0xc2, 0x6d, 0x3f, 0xfc, 0x04, 0x1f, 0x6f, 0x45, 0xa9, 0x0a, 0xc1, 0x15, 0xbb, 0x01, 0x03, 0x37, - 0x61, 0xe8, 0x35, 0xec, 0x29, 0x4e, 0x0a, 0x95, 0x09, 0x6d, 0xe3, 0xe9, 0x8f, 0x9e, 0xfd, 0x91, - 0xf4, 0xb5, 0xeb, 0x0b, 0x7d, 0xe2, 0xd6, 0xa6, 0x44, 0x13, 0xdc, 0x82, 0x46, 0x57, 0xb0, 0x3f, - 0x11, 0x5c, 0xe5, 0x4a, 0x33, 0x9e, 0x5c, 0xa1, 0x4b, 0xf8, 0xf0, 0x2f, 0x19, 0xe8, 0xc5, 0x2d, - 0x4f, 0x77, 0xfb, 0xab, 0x0f, 0x5e, 0xde, 0x65, 0xb5, 0x71, 0x35, 0xec, 0x8c, 0x9f, 0xae, 0x7e, - 0xf8, 0x9d, 0x55, 0xed, 0x83, 0x75, 0xed, 0x83, 0xaf, 0xb5, 0x0f, 0xbe, 0xd7, 0x3e, 0xf8, 0xfc, - 0xd3, 0xef, 0x9c, 0x79, 0x0e, 0x3c, 0xeb, 0xda, 0xbf, 0x73, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, - 0x52, 0xd9, 0x94, 0x35, 0xae, 0x03, 0x00, 0x00, + // 530 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x6f, 0xd3, 0x30, + 0x14, 0xae, 0xf7, 0xa3, 0xad, 0x5c, 0x24, 0x34, 0x0b, 0x8d, 0xa9, 0x48, 0xc9, 0xe8, 0x84, 0x34, + 0x38, 0x24, 0x52, 0xcb, 0x1d, 0xd1, 0x54, 0x82, 0x1c, 0x18, 0x52, 0xaa, 0x71, 0xd8, 0x81, 0xc9, + 0x8d, 0xbd, 0x34, 0x6b, 0x6a, 0x87, 0xd8, 0x01, 0xed, 0xbf, 0xe0, 0xbf, 0xa2, 0xdc, 0x7a, 0x44, + 0x1c, 0x22, 0x08, 0xff, 0x05, 0x27, 0x64, 0xc7, 0xe9, 0x18, 0xed, 0x61, 0xec, 0x14, 0xbf, 0xe7, + 0xf7, 0x7d, 0xef, 0x7d, 0x9f, 0x5f, 0xe0, 0x9e, 0x90, 0x3c, 0xc3, 0x11, 0x75, 0x71, 0x1a, 0x3b, + 0x69, 0xc6, 0x25, 0x47, 0x7b, 0x21, 0x0f, 0x67, 0x19, 0xc7, 0xe1, 0xd4, 0x31, 0x97, 0xdd, 0x47, + 0x3a, 0x4c, 0x27, 0x6e, 0xcc, 0x24, 0xcd, 0x18, 0x4e, 0xce, 0x33, 0x7c, 0x21, 0xab, 0xfa, 0xee, + 0x7e, 0x7d, 0x39, 0xa7, 0x12, 0x13, 0x2c, 0xb1, 0xc9, 0x1f, 0xd5, 0xd4, 0x94, 0x45, 0x31, 0xab, + 0x3f, 0xaa, 0xee, 0x63, 0x18, 0x0e, 0x4c, 0xd1, 0x83, 0x88, 0x47, 0x5c, 0x1f, 0x5d, 0x75, 0xaa, + 0xb2, 0xbd, 0x25, 0x80, 0x68, 0x2c, 0x79, 0x46, 0x03, 0xfa, 0x21, 0xa7, 0x42, 0xbe, 0xa6, 0x98, + 0xd0, 0x0c, 0x9d, 0xc1, 0x16, 0xe3, 0x84, 0x9e, 0xc7, 0xe4, 0x00, 0x1c, 0x82, 0xe3, 0xdd, 0xe1, + 0xcb, 0xb2, 0xb0, 0x9b, 0x27, 0x9c, 0x50, 0x7f, 0xf4, 0xbb, 0xb0, 0x07, 0x51, 0x2c, 0xa7, 0xf9, + 0xc4, 0x09, 0xf9, 0xdc, 0x5d, 0x69, 0x20, 0x93, 0xeb, 0xb3, 0x9b, 0xce, 0x22, 0xd7, 0x4c, 0xeb, + 0x54, 0xb0, 0xa0, 0xa9, 0x18, 0x7d, 0x82, 0xde, 0xc3, 0xb6, 0x9a, 0x57, 0x93, 0x6f, 0x69, 0x72, + 0xaf, 0x2c, 0xec, 0x96, 0x9e, 0x42, 0xb3, 0x3f, 0xff, 0x2f, 0x76, 0x83, 0x0b, 0x5a, 0x9a, 0xd4, + 0x27, 0xbd, 0xaf, 0x5b, 0x70, 0xdf, 0xe3, 0x49, 0x42, 0x43, 0xe9, 0x4d, 0x69, 0x38, 0x13, 0xf9, + 0xdc, 0x88, 0x43, 0xaf, 0x60, 0x73, 0xaa, 0x05, 0x6a, 0x55, 0x9d, 0xfe, 0x13, 0x67, 0xed, 0x05, + 0x9c, 0x75, 0x37, 0x86, 0xed, 0x45, 0x61, 0x37, 0x96, 0x85, 0x0d, 0x02, 0x03, 0x57, 0x1a, 0x32, + 0xcc, 0xa2, 0x95, 0x86, 0xed, 0x4a, 0x43, 0xa0, 0x72, 0x77, 0xd0, 0x60, 0x70, 0x41, 0x4b, 0x93, + 0xfa, 0x04, 0x5d, 0xc2, 0x4e, 0x68, 0x66, 0x57, 0x2d, 0xb6, 0x0f, 0xc1, 0xf1, 0xbd, 0xa1, 0xaf, + 0xc6, 0xf8, 0x7e, 0x5b, 0xf7, 0x73, 0x19, 0x27, 0x6e, 0x9e, 0xc7, 0xc4, 0x39, 0x3d, 0xf5, 0x47, + 0x65, 0x61, 0xc3, 0xda, 0x0d, 0x7f, 0x14, 0xc0, 0x9a, 0xdd, 0x27, 0xa8, 0x0b, 0xdb, 0x75, 0x74, + 0xb0, 0xa3, 0x1a, 0x05, 0xab, 0xb8, 0xf7, 0x05, 0xc0, 0x87, 0x6b, 0x5e, 0x8a, 0x94, 0x33, 0x41, + 0x6f, 0xe0, 0xc0, 0x4d, 0x1c, 0x7a, 0x01, 0xdb, 0x82, 0xe1, 0x54, 0x4c, 0xb9, 0xd4, 0xfe, 0x74, + 0xfa, 0x47, 0x7f, 0x59, 0x7d, 0x2d, 0xfb, 0x42, 0x8e, 0x4d, 0xd9, 0x08, 0x4b, 0x1c, 0xac, 0x40, + 0xe8, 0x2d, 0xdc, 0x25, 0x34, 0x91, 0x58, 0x4b, 0xef, 0xf4, 0x07, 0x1b, 0x1e, 0xaa, 0xda, 0x72, + 0xa7, 0x5e, 0x76, 0xe7, 0xcd, 0x3b, 0xcf, 0x3b, 0xa1, 0xf2, 0x13, 0xcf, 0x66, 0x63, 0x89, 0xa5, + 0x18, 0xee, 0x28, 0xbf, 0x82, 0x8a, 0xa7, 0x7f, 0x05, 0x3b, 0x1e, 0x67, 0x22, 0x16, 0x92, 0xb2, + 0xf0, 0x0a, 0x5d, 0xc2, 0xfb, 0xff, 0xe8, 0x42, 0x4f, 0x37, 0xf4, 0xd8, 0xbc, 0x47, 0xdd, 0x67, + 0xb7, 0x29, 0xad, 0x6c, 0xea, 0x35, 0x86, 0x8f, 0x17, 0x3f, 0xad, 0xc6, 0xa2, 0xb4, 0xc0, 0xb2, + 0xb4, 0xc0, 0xb7, 0xd2, 0x02, 0x3f, 0x4a, 0x0b, 0x7c, 0xfe, 0x65, 0x35, 0xce, 0x5a, 0x06, 0x3c, + 0x69, 0xea, 0xbf, 0x71, 0xf0, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xe4, 0x3f, 0x61, 0x25, 0x04, + 0x00, 0x00, } diff --git a/pkg/storage/api.proto b/pkg/storage/api.proto index d0bea93dd115..9e1c6e91378e 100644 --- a/pkg/storage/api.proto +++ b/pkg/storage/api.proto @@ -18,6 +18,7 @@ option go_package = "storage"; import "roachpb/internal_raft.proto"; import "roachpb/metadata.proto"; +import "storage/engine/enginepb/mvcc3.proto"; import "gogoproto/gogo.proto"; // StoreRequestHeader locates a Store on a Node. @@ -49,6 +50,8 @@ message CollectChecksumResponse { // TODO(tschottdorf): with larger ranges, this is no longer tenable. // See https://github.com/cockroachdb/cockroach/issues/21128. roachpb.RaftSnapshotData snapshot = 2; + // delta carries the stats of the range minus the recomputed stats. + storage.engine.enginepb.MVCCNetworkStats delta = 3 [(gogoproto.nullable) = false]; } service Consistency { diff --git a/pkg/storage/batcheval/cmd_adjust_stats.go b/pkg/storage/batcheval/cmd_adjust_stats.go new file mode 100644 index 000000000000..feca94bc3ac2 --- /dev/null +++ b/pkg/storage/batcheval/cmd_adjust_stats.go @@ -0,0 +1,109 @@ +// Copyright 2017 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package batcheval + +import ( + "context" + + "github.com/pkg/errors" + + "github.com/cockroachdb/cockroach/pkg/keys" + "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/storage/batcheval/result" + "github.com/cockroachdb/cockroach/pkg/storage/engine" + "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" + "github.com/cockroachdb/cockroach/pkg/storage/spanset" +) + +func init() { + RegisterCommand(roachpb.AdjustStats, declareKeysAdjustStats, AdjustStats) +} + +func declareKeysAdjustStats( + desc roachpb.RangeDescriptor, header roachpb.Header, req roachpb.Request, spans *spanset.SpanSet, +) { + // Declare only the target key, even though we're really iterating over a key range. This is OK + // since all we're doing is computing a stats delta, and applying this delta commutes with other + // operations on the same key space (except splits, which always touch the start key). + DefaultDeclareKeys(desc, header, req, spans) + // We read the range descriptor. As a side effect, this avoids interleaving with splits (which + // shorten the range, so our recomputation would be bogus), though declaring the start key + // (above this comment) already has that effect. + spans.Add(spanset.SpanReadOnly, roachpb.Span{Key: keys.RangeDescriptorKey(desc.StartKey)}) +} + +// AdjustStats recomputes the MVCCStats stored for this range and adjust them accordingly, +// returning the MVCCStats delta obtained in the process. +func AdjustStats( + ctx context.Context, batch engine.ReadWriter, cArgs CommandArgs, resp roachpb.Response, +) (result.Result, error) { + desc := cArgs.EvalCtx.Desc() + + args := cArgs.Args.(*roachpb.AdjustStatsRequest) + reqSpan := roachpb.Span{ + Key: args.Key, + EndKey: desc.EndKey.AsRawKey(), + } + dryRun := args.DryRun + args = nil // avoid accidental use below + + descSpan := roachpb.Span{ + Key: desc.StartKey.AsRawKey(), + EndKey: desc.EndKey.AsRawKey(), + } + + if !descSpan.Equal(reqSpan) { + return result.Result{}, errors.New("descriptor mismatch; range likely merged") + } + + // If this is a SpanSetBatch, unwrap it. We're intentionally reading without + // declaring the keys because we know this is safe: We declare the range + // descriptor key and so nothing is splitting the range now, and all we are + // doing is emitting a stats update, which commutes with any concurrent writer's + // updates. + // + // NB: we could be computing these stats at any timestamp, but the byte ages + // become unsuitable for human consumption when the timestamp is far away from + // "real time", along with some risk of integer overflow. + eng := spanset.UnwrapBatch(batch) + actualMS, err := rditer.ComputeStatsForRange(desc, eng, cArgs.Header.Timestamp.WallTime) + if err != nil { + return result.Result{}, err + } + + delta := actualMS + delta.Subtract(cArgs.EvalCtx.GetMVCCStats()) + + if !dryRun { + // NB: this will never clear the ContainsEstimates flag. To be able to do this, + // we would need to guarantee that no command that sets it is in-flight in + // parallel with this command. This can be achieved by blocking all of the range + // or by using our inside knowledge that dictates that ranges which contain no + // timeseries writes never have the flag reset, or by making ContainsEstimates + // a counter (and ensuring that we're the only one subtracting at any given + // time). + // + // TODO(tschottdorf): do we not want to run at all if we have estimates in + // this range? I think we want to as this would give us much more realistic + // stats for timeseries ranges (which go cold and the approximate stats are + // wildly overcounting) and this is paced by the consistency checker, but it + // means some extra engine churn. + cArgs.Stats.Add(delta) + } + + resp.(*roachpb.AdjustStatsResponse).AddedDelta = enginepb.MVCCNetworkStats(delta) + return result.Result{}, nil +} diff --git a/pkg/storage/client_test.go b/pkg/storage/client_test.go index fbe812d787f5..307b7083290a 100644 --- a/pkg/storage/client_test.go +++ b/pkg/storage/client_test.go @@ -53,6 +53,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/storage" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/util" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -1363,7 +1364,7 @@ func verifyRangeStats(eng engine.Reader, rangeID roachpb.RangeID, expMS enginepb func verifyRecomputedStats( eng engine.Reader, d *roachpb.RangeDescriptor, expMS enginepb.MVCCStats, nowNanos int64, ) error { - if ms, err := storage.ComputeStatsForRange(d, eng, nowNanos); err != nil { + if ms, err := rditer.ComputeStatsForRange(d, eng, nowNanos); err != nil { return err } else if expMS != ms { return fmt.Errorf("expected range's stats to agree with recomputation: got\n%+v\nrecomputed\n%+v", expMS, ms) diff --git a/pkg/storage/consistency_queue_test.go b/pkg/storage/consistency_queue_test.go index af3a4ff473a0..0d02018ed964 100644 --- a/pkg/storage/consistency_queue_test.go +++ b/pkg/storage/consistency_queue_test.go @@ -20,13 +20,21 @@ import ( "testing" "time" + "github.com/cockroachdb/cockroach/pkg/base" "github.com/cockroachdb/cockroach/pkg/config" "github.com/cockroachdb/cockroach/pkg/internal/client" + "github.com/cockroachdb/cockroach/pkg/keys" "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/storage" "github.com/cockroachdb/cockroach/pkg/storage/engine" + "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/testutils" + "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/leaktest" + "github.com/cockroachdb/cockroach/pkg/util/log" + "github.com/cockroachdb/cockroach/pkg/util/retry" + "github.com/pkg/errors" ) // TestConsistencyQueueRequiresLive verifies the queue will not @@ -176,3 +184,156 @@ func TestCheckConsistencyInconsistent(t *testing.T) { t.Fatal("CheckConsistency() failed to panic as expected") } } + +// TestConsistencyQueueAdjustStats is an end-to-end test of the mechanism CockroachDB +// employs to adjust incorrect MVCCStats ("incorrect" meaning not an inconsistency of +// these stats between replicas, but a delta between persisted stats and those one +// would obtain via a recomputation from the on-disk state), namely a call to +// AdjustStats triggered from the consistency checker (which also recomputes the stats). +// +// The test splits off a range on a single node cluster backed by an on-disk RocksDB +// instance, and takes that node offline to perturb its stats. Next, it restarts the +// node as part of a cluster, upreplicates the range, and waits for the stats +// divergence to disappear. +// +// The upreplication here is immaterial and serves only to add realism to the test. +func TestConsistencyQueueAdjustStats(t *testing.T) { + defer leaktest.AfterTest(t)() + + ctx := context.Background() + + path, cleanup := testutils.TempDir(t) + defer cleanup() + + // Set testing knobs that let the consistency queue run in a tight loop. + knobs := base.TestingKnobs{ + Store: &storage.StoreTestingKnobs{ + DisableLastProcessedCheck: true, + }, + } + + clusterArgs := base.TestClusterArgs{ + ReplicationMode: base.ReplicationManual, + ServerArgs: base.TestServerArgs{ + Knobs: knobs, + }, + ServerArgsPerNode: map[int]base.TestServerArgs{ + 0: { + Knobs: knobs, // need to pass this twice + StoreSpecs: []base.StoreSpec{{ + Path: path, + }}, + }, + }, + } + + key := []byte("a") + + computeDelta := func(db *client.DB) enginepb.MVCCStats { + var b client.Batch + b.AddRawRequest(&roachpb.AdjustStatsRequest{ + Span: roachpb.Span{Key: key}, + DryRun: true, + }) + if err := db.Run(ctx, &b); err != nil { + t.Fatal(err) + } + resp := b.RawResponse().Responses[0].GetInner().(*roachpb.AdjustStatsResponse) + delta := enginepb.MVCCStats(resp.AddedDelta) + delta.AgeTo(0) + return delta + } + + rangeID := func() roachpb.RangeID { + tc := testcluster.StartTestCluster(t, 1, clusterArgs) + defer tc.Stopper().Stop(context.TODO()) + + db0 := tc.Servers[0].DB() + + // Split off a range so that we get away from the timeseries writes, which + // pollute the stats with ContainsEstimates=true. Note that the split clears + // the right hand side (which is what we operate on) from that flag. + if err := db0.AdminSplit(ctx, key, key); err != nil { + t.Fatal(err) + } + + delta := computeDelta(db0) + + if delta != (enginepb.MVCCStats{}) { + t.Fatalf("unexpected initial stats adjustment of %+v", delta) + } + + rangeDesc, err := tc.LookupRange(key) + if err != nil { + t.Fatal(err) + } + + return rangeDesc.RangeID + }() + + func() { + cache := engine.NewRocksDBCache(1 << 20) + defer cache.Release() + eng, err := engine.NewRocksDB(engine.RocksDBConfig{ + Dir: path, + MustExist: true, + }, cache) + if err != nil { + t.Fatal(err) + } + defer eng.Close() + + statsKey := keys.RangeStatsKey(rangeID) + + var ms enginepb.MVCCStats + ok, err := engine.MVCCGetProto( + ctx, eng, statsKey, hlc.Timestamp{}, true /* consistent */, nil /* txn */, &ms, + ) + if err != nil { + t.Fatal(err) + } + if !ok { + t.Fatal("no persisted stats") + } + + // Put some garbage in the stats that we're hoping the consistency queue will + // trigger a removal of via AdjustStats. + ms.LiveCount += 123 + + // Overwrite with the new stats; remember that this range hasn't upreplicated, + // so the consistency checker won't see any replica divergence when it runs, + // but it should definitely see that its recomputed stats mismatch. + if err := engine.MVCCPutProto( + ctx, eng, nil, statsKey, hlc.Timestamp{}, nil, &ms, + ); err != nil { + t.Fatal(err) + } + }() + + // Now that we've tampered with the stats, restart the cluster and extend it + // to three nodes. + tc := testcluster.StartTestCluster(t, 3, clusterArgs) + defer tc.Stopper().Stop(context.TODO()) + + if _, err := tc.AddReplicas( + key, tc.Target(1), tc.Target(2), + ); err != nil { + t.Fatal(err) + } + + db0 := tc.Servers[0].DB() + + // The stats should magically repair themselves. The high timeout is only + // relevant in stress testing; it's usually quick. + if err := retry.ForDuration(3*time.Minute, func() error { + delta := computeDelta(db0) + if delta == (enginepb.MVCCStats{}) { + return nil + } + err := errors.Errorf("stats still in need of adjustment: %+v", delta) + log.Info(ctx, err) + return err + }); err != nil { + t.Fatal(err) + } +} diff --git a/pkg/storage/helpers_test.go b/pkg/storage/helpers_test.go index a3986fd96498..3d623fb74a22 100644 --- a/pkg/storage/helpers_test.go +++ b/pkg/storage/helpers_test.go @@ -25,6 +25,7 @@ import ( "sync/atomic" "time" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/pkg/errors" "github.com/cockroachdb/cockroach/pkg/config" @@ -62,7 +63,7 @@ func (s *Store) ComputeMVCCStats() (enginepb.MVCCStats, error) { now := s.Clock().PhysicalNow() newStoreReplicaVisitor(s).Visit(func(r *Replica) bool { var stats enginepb.MVCCStats - stats, err = ComputeStatsForRange(r.Desc(), s.Engine(), now) + stats, err = rditer.ComputeStatsForRange(r.Desc(), s.Engine(), now) if err != nil { return false } diff --git a/pkg/storage/stats.go b/pkg/storage/rditer/stats.go similarity index 90% rename from pkg/storage/stats.go rename to pkg/storage/rditer/stats.go index 84a0b6a6eb16..5a0d9a1b146d 100644 --- a/pkg/storage/stats.go +++ b/pkg/storage/rditer/stats.go @@ -12,13 +12,12 @@ // implied. See the License for the specific language governing // permissions and limitations under the License. -package storage +package rditer import ( "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" - "github.com/cockroachdb/cockroach/pkg/storage/rditer" ) // ComputeStatsForRange computes the stats for a given range by @@ -31,7 +30,7 @@ func ComputeStatsForRange( defer iter.Close() ms := enginepb.MVCCStats{} - for _, keyRange := range rditer.MakeReplicatedKeyRanges(d) { + for _, keyRange := range MakeReplicatedKeyRanges(d) { msDelta, err := iter.ComputeStats(keyRange.Start, keyRange.End, nowNanos) if err != nil { return enginepb.MVCCStats{}, err diff --git a/pkg/storage/replica_command.go b/pkg/storage/replica_command.go index f5d0b8215191..9ede04f7cff2 100644 --- a/pkg/storage/replica_command.go +++ b/pkg/storage/replica_command.go @@ -23,6 +23,7 @@ import ( "sync/atomic" "time" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/coreos/etcd/raft/raftpb" "github.com/pkg/errors" @@ -1086,7 +1087,7 @@ func splitTrigger( // Compute (absolute) stats for LHS range. This means that no more writes // to the LHS must happen below this point. - leftMS, err := ComputeStatsForRange(&split.LeftDesc, batch, ts.WallTime) + leftMS, err := rditer.ComputeStatsForRange(&split.LeftDesc, batch, ts.WallTime) if err != nil { return enginepb.MVCCStats{}, result.Result{}, errors.Wrap(err, "unable to compute stats for LHS range after split") } @@ -1118,7 +1119,7 @@ func splitTrigger( // estimate values, we cannot perform arithmetic to determine the // new range's stats. Instead, we must recompute by iterating // over the keys and counting. - rightMS, err = ComputeStatsForRange(&split.RightDesc, batch, ts.WallTime) + rightMS, err = rditer.ComputeStatsForRange(&split.RightDesc, batch, ts.WallTime) if err != nil { return enginepb.MVCCStats{}, result.Result{}, errors.Wrap(err, "unable to compute stats for RHS range after split") } diff --git a/pkg/storage/replica_consistency.go b/pkg/storage/replica_consistency.go index 2674bb5af216..e7c33137882e 100644 --- a/pkg/storage/replica_consistency.go +++ b/pkg/storage/replica_consistency.go @@ -104,9 +104,33 @@ func (r *Replica) CheckConsistency( log.Error(ctx, buf.String()) } - // Everything is good, no further action necessary. if inconsistencyCount == 0 { - return roachpb.CheckConsistencyResponse{}, nil + // The replicas were in sync. Check that the MVCCStats haven't diverged from + // what they should be. This code originated in the realization that there + // were many bugs in our stats computations. These are being fixed, but it + // is through this mechanism that existing ranges are updated. Hence, the + // logging below is relatively timid. + delta := enginepb.MVCCStats(results[0].Response.Delta) + delta.LastUpdateNanos = 0 + if delta == (enginepb.MVCCStats{}) { + return roachpb.CheckConsistencyResponse{}, nil + } + + // We've found that there's something to correct; send an AdjustStatsRequest. + // Note that this code runs only on the lease holder (at the time of initiating + // the computation), so this work isn't duplicated. Also, we're essentially + // paced by the consistency checker. + log.Infof(ctx, "triggering stats recomputation to resolve delta of %+v", results[0].Response.Delta) + + req := roachpb.AdjustStatsRequest{ + Span: roachpb.Span{Key: desc.StartKey.AsRawKey()}, + } + + var b client.Batch + b.AddRawRequest(&req) + + err := r.store.db.Run(ctx, &b) + return roachpb.CheckConsistencyResponse{}, roachpb.NewError(err) } logFunc := log.Fatalf @@ -173,7 +197,8 @@ func (r *Replica) collectChecksumFromReplica( // RunConsistencyCheck carries out a round of CheckConsistency/CollectChecksum // for the members of this range, returning the results (which it does not act -// upon). The first result will belong to the local replica. +// upon). The first result will belong to the local replica, and in particular +// there is a first result when no error is returned. func (r *Replica) RunConsistencyCheck( ctx context.Context, req roachpb.ComputeChecksumRequest, ) ([]ConsistencyCheckResult, error) { @@ -312,6 +337,10 @@ func (r *Replica) computeChecksumDone( if c, ok := r.mu.checksums[id]; ok { if result != nil { c.Checksum = result.SHA512[:] + + delta := result.PersistedMS + delta.Subtract(result.RecomputedMS) + c.Delta = enginepb.MVCCNetworkStats(delta) } c.gcTimestamp = timeutil.Now().Add(batcheval.ReplicaChecksumGCInterval) c.Snapshot = snapshot diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index 28d4231ed7f7..90e4dc436071 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -8953,3 +8953,89 @@ func TestShouldReplicaQuiesce(t *testing.T) { return q }) } + +func TestReplicaAdjustStats(t *testing.T) { + defer leaktest.AfterTest(t)() + tc := testContext{} + stopper := stop.NewStopper() + defer stopper.Stop(context.TODO()) + tc.Start(t, stopper) + + key := roachpb.RKey("a") + repl := tc.store.LookupReplica(key, nil) + desc := repl.Desc() + sKey := desc.StartKey.AsRawKey() + + const errMismatch = "descriptor mismatch; range likely merged" + + type testCase struct { + name string + key roachpb.Key + expDelta enginepb.MVCCStats + expErr string + } + + runTest := func(test testCase) { + t.Run(test.name, func(t *testing.T) { + args := &roachpb.AdjustStatsRequest{ + Span: roachpb.Span{ + Key: test.key, + }, + } + + resp, pErr := tc.SendWrapped(args) + if !testutils.IsPError(pErr, test.expErr) { + t.Fatalf("got:\n%s\nexpected: %s", pErr, test.expErr) + } + if test.expErr != "" { + return + } + + delta := enginepb.MVCCStats(resp.(*roachpb.AdjustStatsResponse).AddedDelta) + delta.AgeTo(test.expDelta.LastUpdateNanos) + + if delta != test.expDelta { + t.Fatal("diff(wanted, actual) = ", strings.Join(pretty.Diff(test.expDelta, delta), "\n")) + } + }) + } + + for _, test := range []testCase{ + // Non-matching endpoints. + {"leftmismatch", roachpb.Key("a"), enginepb.MVCCStats{}, errMismatch}, + // Recomputation that shouldn't find anything. + {"noop", sKey, enginepb.MVCCStats{}, ""}, + } { + runTest(test) + } + + ctx := context.Background() + seed := randutil.NewPseudoSeed() + t.Logf("seed is %d", seed) + rnd := rand.New(rand.NewSource(seed)) + + repl.raftMu.Lock() + repl.mu.Lock() + ms := repl.mu.state.Stats // intentionally mutated below + disturbMS := enginepb.NewPopulatedMVCCStats(rnd, false) + disturbMS.ContainsEstimates = false + ms.Add(*disturbMS) + err := repl.raftMu.stateLoader.SetMVCCStats(ctx, tc.engine, ms) + repl.assertStateLocked(ctx, tc.engine) + repl.mu.Unlock() + repl.raftMu.Unlock() + + if err != nil { + t.Fatal(err) + } + + // We have `stored ms = recomputable ms + disturbMS`, and so the returned delta + // should be `recomputable ms - stored ms = -disturbMS`. + var expDelta enginepb.MVCCStats + expDelta.Subtract(*disturbMS) + + runTest(testCase{"randdelta", sKey, expDelta, ""}) + if !t.Failed() { + runTest(testCase{"noopagain", sKey, enginepb.MVCCStats{}, ""}) + } +} diff --git a/pkg/storage/spanset/batch.go b/pkg/storage/spanset/batch.go index bf7214aeba60..faef18d09919 100644 --- a/pkg/storage/spanset/batch.go +++ b/pkg/storage/spanset/batch.go @@ -313,3 +313,17 @@ func NewBatch(b engine.Batch, spans *SpanSet) engine.Batch { spans, } } + +// UnwrapBatch returns the wrapped ReadWriter if it was created via `NewBatch`, and +// the original input otherwise. +func UnwrapBatch(rw engine.ReadWriter) engine.ReadWriter { + batch, ok := rw.(engine.Batch) + if !ok { + return rw + } + ssb, ok := batch.(*spanSetBatch) + if !ok { + return batch + } + return ssb.b +} diff --git a/pkg/storage/store_test.go b/pkg/storage/store_test.go index 173a9f1a034f..9706f79d256f 100644 --- a/pkg/storage/store_test.go +++ b/pkg/storage/store_test.go @@ -41,6 +41,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/storage/abortspan" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/cockroachdb/cockroach/pkg/storage/storagebase" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -236,7 +237,7 @@ func TestStoreInitAndBootstrap(t *testing.T) { // Stats should agree with a recomputation. now := r.store.Clock().Now() - if ms, err := ComputeStatsForRange(r.Desc(), eng, now.WallTime); err != nil { + if ms, err := rditer.ComputeStatsForRange(r.Desc(), eng, now.WallTime); err != nil { t.Errorf("failure computing range's stats: %s", err) } else if ms != rs { t.Errorf("expected range's stats to agree with recomputation: %s", pretty.Diff(ms, rs))