From 7cf5d721ee21dbed77a5321c313d8cbd2a4843bb Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 18 Apr 2025 20:16:48 +0200 Subject: [PATCH] RangeStream --- .../apispec/swagger/rpc.swagger.json | 10 + api/etcdserverpb/rpc.pb.go | 1061 +++++++++++------ api/etcdserverpb/rpc.proto | 16 + client/v3/retry.go | 5 + server/etcdserver/api/v3rpc/key.go | 12 + server/etcdserver/txn/txn.go | 6 +- server/etcdserver/v3_server.go | 73 ++ .../grpcproxy/adapter/kv_client_adapter.go | 5 + server/proxy/grpcproxy/kv.go | 5 + server/storage/mvcc/kvstore_txn.go | 6 +- tools/benchmark/cmd/put.go | 19 +- tools/benchmark/cmd/range.go | 55 +- 12 files changed, 849 insertions(+), 424 deletions(-) diff --git a/Documentation/dev-guide/apispec/swagger/rpc.swagger.json b/Documentation/dev-guide/apispec/swagger/rpc.swagger.json index 34fc55dff23..319686441e1 100644 --- a/Documentation/dev-guide/apispec/swagger/rpc.swagger.json +++ b/Documentation/dev-guide/apispec/swagger/rpc.swagger.json @@ -2706,6 +2706,16 @@ } } }, + "etcdserverpbRangeStreamResponse": { + "type": "object", + "properties": { + "range_response": { + "$ref": "#/definitions/etcdserverpbRangeResponse", + "description": "range_response is a partial response for the KV.RangeStream RPC.\nThe result of proto.Merge() applied on all responses should result in the\nsame RangeResponse response as to the Range() method." + } + }, + "description": "RangeStreamResponse is the response for the RangeStream RPC.\nThis message is just a wrapper around RangeResponse but there may be a need\nin the future to add streaming specific fields (for progress status, error\npropagation, etc.)." + }, "etcdserverpbRequestOp": { "type": "object", "properties": { diff --git a/api/etcdserverpb/rpc.pb.go b/api/etcdserverpb/rpc.pb.go index 42bf641db6b..d6c9472f129 100644 --- a/api/etcdserverpb/rpc.pb.go +++ b/api/etcdserverpb/rpc.pb.go @@ -151,7 +151,7 @@ func (x Compare_CompareResult) String() string { } func (Compare_CompareResult) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{9, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{10, 0} } type Compare_CompareTarget int32 @@ -185,7 +185,7 @@ func (x Compare_CompareTarget) String() string { } func (Compare_CompareTarget) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{9, 1} + return fileDescriptor_77a6da22d6a3feb1, []int{10, 1} } type WatchCreateRequest_FilterType int32 @@ -212,7 +212,7 @@ func (x WatchCreateRequest_FilterType) String() string { } func (WatchCreateRequest_FilterType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{21, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{22, 0} } type AlarmRequest_AlarmAction int32 @@ -240,7 +240,7 @@ func (x AlarmRequest_AlarmAction) String() string { } func (AlarmRequest_AlarmAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{54, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{55, 0} } type DowngradeRequest_DowngradeAction int32 @@ -268,7 +268,7 @@ func (x DowngradeRequest_DowngradeAction) String() string { } func (DowngradeRequest_DowngradeAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{57, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{58, 0} } type ResponseHeader struct { @@ -522,6 +522,60 @@ func (m *RangeRequest) GetMaxCreateRevision() int64 { return 0 } +// RangeStreamResponse is the response for the RangeStream RPC. +// This message is just a wrapper around RangeResponse but there may be a need +// in the future to add streaming specific fields (for progress status, error +// propagation, etc.). +type RangeStreamResponse struct { + // range_response is a partial response for the KV.RangeStream RPC. + // The result of proto.Merge() applied on all responses should result in the + // same RangeResponse response as to the Range() method. + RangeResponse *RangeResponse `protobuf:"bytes,1,opt,name=range_response,json=rangeResponse,proto3" json:"range_response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RangeStreamResponse) Reset() { *m = RangeStreamResponse{} } +func (m *RangeStreamResponse) String() string { return proto.CompactTextString(m) } +func (*RangeStreamResponse) ProtoMessage() {} +func (*RangeStreamResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{2} +} +func (m *RangeStreamResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RangeStreamResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RangeStreamResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RangeStreamResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RangeStreamResponse.Merge(m, src) +} +func (m *RangeStreamResponse) XXX_Size() int { + return m.Size() +} +func (m *RangeStreamResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RangeStreamResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RangeStreamResponse proto.InternalMessageInfo + +func (m *RangeStreamResponse) GetRangeResponse() *RangeResponse { + if m != nil { + return m.RangeResponse + } + return nil +} + type RangeResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` // kvs is the list of key-value pairs matched by the range request. @@ -542,7 +596,7 @@ func (m *RangeResponse) Reset() { *m = RangeResponse{} } func (m *RangeResponse) String() string { return proto.CompactTextString(m) } func (*RangeResponse) ProtoMessage() {} func (*RangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{2} + return fileDescriptor_77a6da22d6a3feb1, []int{3} } func (m *RangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -625,7 +679,7 @@ func (m *PutRequest) Reset() { *m = PutRequest{} } func (m *PutRequest) String() string { return proto.CompactTextString(m) } func (*PutRequest) ProtoMessage() {} func (*PutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{3} + return fileDescriptor_77a6da22d6a3feb1, []int{4} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -709,7 +763,7 @@ func (m *PutResponse) Reset() { *m = PutResponse{} } func (m *PutResponse) String() string { return proto.CompactTextString(m) } func (*PutResponse) ProtoMessage() {} func (*PutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{4} + return fileDescriptor_77a6da22d6a3feb1, []int{5} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -773,7 +827,7 @@ func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRangeRequest) ProtoMessage() {} func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{5} + return fileDescriptor_77a6da22d6a3feb1, []int{6} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -838,7 +892,7 @@ func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteRangeResponse) ProtoMessage() {} func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{6} + return fileDescriptor_77a6da22d6a3feb1, []int{7} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -906,7 +960,7 @@ func (m *RequestOp) Reset() { *m = RequestOp{} } func (m *RequestOp) String() string { return proto.CompactTextString(m) } func (*RequestOp) ProtoMessage() {} func (*RequestOp) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{7} + return fileDescriptor_77a6da22d6a3feb1, []int{8} } func (m *RequestOp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1022,7 +1076,7 @@ func (m *ResponseOp) Reset() { *m = ResponseOp{} } func (m *ResponseOp) String() string { return proto.CompactTextString(m) } func (*ResponseOp) ProtoMessage() {} func (*ResponseOp) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{8} + return fileDescriptor_77a6da22d6a3feb1, []int{9} } func (m *ResponseOp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1146,7 +1200,7 @@ func (m *Compare) Reset() { *m = Compare{} } func (m *Compare) String() string { return proto.CompactTextString(m) } func (*Compare) ProtoMessage() {} func (*Compare) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{9} + return fileDescriptor_77a6da22d6a3feb1, []int{10} } func (m *Compare) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1319,7 +1373,7 @@ func (m *TxnRequest) Reset() { *m = TxnRequest{} } func (m *TxnRequest) String() string { return proto.CompactTextString(m) } func (*TxnRequest) ProtoMessage() {} func (*TxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{10} + return fileDescriptor_77a6da22d6a3feb1, []int{11} } func (m *TxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1385,7 +1439,7 @@ func (m *TxnResponse) Reset() { *m = TxnResponse{} } func (m *TxnResponse) String() string { return proto.CompactTextString(m) } func (*TxnResponse) ProtoMessage() {} func (*TxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{11} + return fileDescriptor_77a6da22d6a3feb1, []int{12} } func (m *TxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1453,7 +1507,7 @@ func (m *CompactionRequest) Reset() { *m = CompactionRequest{} } func (m *CompactionRequest) String() string { return proto.CompactTextString(m) } func (*CompactionRequest) ProtoMessage() {} func (*CompactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{12} + return fileDescriptor_77a6da22d6a3feb1, []int{13} } func (m *CompactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1507,7 +1561,7 @@ func (m *CompactionResponse) Reset() { *m = CompactionResponse{} } func (m *CompactionResponse) String() string { return proto.CompactTextString(m) } func (*CompactionResponse) ProtoMessage() {} func (*CompactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{13} + return fileDescriptor_77a6da22d6a3feb1, []int{14} } func (m *CompactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1553,7 +1607,7 @@ func (m *HashRequest) Reset() { *m = HashRequest{} } func (m *HashRequest) String() string { return proto.CompactTextString(m) } func (*HashRequest) ProtoMessage() {} func (*HashRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{14} + return fileDescriptor_77a6da22d6a3feb1, []int{15} } func (m *HashRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1594,7 +1648,7 @@ func (m *HashKVRequest) Reset() { *m = HashKVRequest{} } func (m *HashKVRequest) String() string { return proto.CompactTextString(m) } func (*HashKVRequest) ProtoMessage() {} func (*HashKVRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{15} + return fileDescriptor_77a6da22d6a3feb1, []int{16} } func (m *HashKVRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1647,7 +1701,7 @@ func (m *HashKVResponse) Reset() { *m = HashKVResponse{} } func (m *HashKVResponse) String() string { return proto.CompactTextString(m) } func (*HashKVResponse) ProtoMessage() {} func (*HashKVResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{16} + return fileDescriptor_77a6da22d6a3feb1, []int{17} } func (m *HashKVResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1717,7 +1771,7 @@ func (m *HashResponse) Reset() { *m = HashResponse{} } func (m *HashResponse) String() string { return proto.CompactTextString(m) } func (*HashResponse) ProtoMessage() {} func (*HashResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{17} + return fileDescriptor_77a6da22d6a3feb1, []int{18} } func (m *HashResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1770,7 +1824,7 @@ func (m *SnapshotRequest) Reset() { *m = SnapshotRequest{} } func (m *SnapshotRequest) String() string { return proto.CompactTextString(m) } func (*SnapshotRequest) ProtoMessage() {} func (*SnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{18} + return fileDescriptor_77a6da22d6a3feb1, []int{19} } func (m *SnapshotRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1820,7 +1874,7 @@ func (m *SnapshotResponse) Reset() { *m = SnapshotResponse{} } func (m *SnapshotResponse) String() string { return proto.CompactTextString(m) } func (*SnapshotResponse) ProtoMessage() {} func (*SnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{19} + return fileDescriptor_77a6da22d6a3feb1, []int{20} } func (m *SnapshotResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1894,7 +1948,7 @@ func (m *WatchRequest) Reset() { *m = WatchRequest{} } func (m *WatchRequest) String() string { return proto.CompactTextString(m) } func (*WatchRequest) ProtoMessage() {} func (*WatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{20} + return fileDescriptor_77a6da22d6a3feb1, []int{21} } func (m *WatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2018,7 +2072,7 @@ func (m *WatchCreateRequest) Reset() { *m = WatchCreateRequest{} } func (m *WatchCreateRequest) String() string { return proto.CompactTextString(m) } func (*WatchCreateRequest) ProtoMessage() {} func (*WatchCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{21} + return fileDescriptor_77a6da22d6a3feb1, []int{22} } func (m *WatchCreateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2115,7 +2169,7 @@ func (m *WatchCancelRequest) Reset() { *m = WatchCancelRequest{} } func (m *WatchCancelRequest) String() string { return proto.CompactTextString(m) } func (*WatchCancelRequest) ProtoMessage() {} func (*WatchCancelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{22} + return fileDescriptor_77a6da22d6a3feb1, []int{23} } func (m *WatchCancelRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2163,7 +2217,7 @@ func (m *WatchProgressRequest) Reset() { *m = WatchProgressRequest{} } func (m *WatchProgressRequest) String() string { return proto.CompactTextString(m) } func (*WatchProgressRequest) ProtoMessage() {} func (*WatchProgressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{23} + return fileDescriptor_77a6da22d6a3feb1, []int{24} } func (m *WatchProgressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2228,7 +2282,7 @@ func (m *WatchResponse) Reset() { *m = WatchResponse{} } func (m *WatchResponse) String() string { return proto.CompactTextString(m) } func (*WatchResponse) ProtoMessage() {} func (*WatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{24} + return fileDescriptor_77a6da22d6a3feb1, []int{25} } func (m *WatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2327,7 +2381,7 @@ func (m *LeaseGrantRequest) Reset() { *m = LeaseGrantRequest{} } func (m *LeaseGrantRequest) String() string { return proto.CompactTextString(m) } func (*LeaseGrantRequest) ProtoMessage() {} func (*LeaseGrantRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{25} + return fileDescriptor_77a6da22d6a3feb1, []int{26} } func (m *LeaseGrantRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2386,7 +2440,7 @@ func (m *LeaseGrantResponse) Reset() { *m = LeaseGrantResponse{} } func (m *LeaseGrantResponse) String() string { return proto.CompactTextString(m) } func (*LeaseGrantResponse) ProtoMessage() {} func (*LeaseGrantResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{26} + return fileDescriptor_77a6da22d6a3feb1, []int{27} } func (m *LeaseGrantResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2455,7 +2509,7 @@ func (m *LeaseRevokeRequest) Reset() { *m = LeaseRevokeRequest{} } func (m *LeaseRevokeRequest) String() string { return proto.CompactTextString(m) } func (*LeaseRevokeRequest) ProtoMessage() {} func (*LeaseRevokeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{27} + return fileDescriptor_77a6da22d6a3feb1, []int{28} } func (m *LeaseRevokeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2502,7 +2556,7 @@ func (m *LeaseRevokeResponse) Reset() { *m = LeaseRevokeResponse{} } func (m *LeaseRevokeResponse) String() string { return proto.CompactTextString(m) } func (*LeaseRevokeResponse) ProtoMessage() {} func (*LeaseRevokeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{28} + return fileDescriptor_77a6da22d6a3feb1, []int{29} } func (m *LeaseRevokeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2552,7 +2606,7 @@ func (m *LeaseCheckpoint) Reset() { *m = LeaseCheckpoint{} } func (m *LeaseCheckpoint) String() string { return proto.CompactTextString(m) } func (*LeaseCheckpoint) ProtoMessage() {} func (*LeaseCheckpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{29} + return fileDescriptor_77a6da22d6a3feb1, []int{30} } func (m *LeaseCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2606,7 +2660,7 @@ func (m *LeaseCheckpointRequest) Reset() { *m = LeaseCheckpointRequest{} func (m *LeaseCheckpointRequest) String() string { return proto.CompactTextString(m) } func (*LeaseCheckpointRequest) ProtoMessage() {} func (*LeaseCheckpointRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{30} + return fileDescriptor_77a6da22d6a3feb1, []int{31} } func (m *LeaseCheckpointRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2653,7 +2707,7 @@ func (m *LeaseCheckpointResponse) Reset() { *m = LeaseCheckpointResponse func (m *LeaseCheckpointResponse) String() string { return proto.CompactTextString(m) } func (*LeaseCheckpointResponse) ProtoMessage() {} func (*LeaseCheckpointResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{31} + return fileDescriptor_77a6da22d6a3feb1, []int{32} } func (m *LeaseCheckpointResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2701,7 +2755,7 @@ func (m *LeaseKeepAliveRequest) Reset() { *m = LeaseKeepAliveRequest{} } func (m *LeaseKeepAliveRequest) String() string { return proto.CompactTextString(m) } func (*LeaseKeepAliveRequest) ProtoMessage() {} func (*LeaseKeepAliveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{32} + return fileDescriptor_77a6da22d6a3feb1, []int{33} } func (m *LeaseKeepAliveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2752,7 +2806,7 @@ func (m *LeaseKeepAliveResponse) Reset() { *m = LeaseKeepAliveResponse{} func (m *LeaseKeepAliveResponse) String() string { return proto.CompactTextString(m) } func (*LeaseKeepAliveResponse) ProtoMessage() {} func (*LeaseKeepAliveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{33} + return fileDescriptor_77a6da22d6a3feb1, []int{34} } func (m *LeaseKeepAliveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2816,7 +2870,7 @@ func (m *LeaseTimeToLiveRequest) Reset() { *m = LeaseTimeToLiveRequest{} func (m *LeaseTimeToLiveRequest) String() string { return proto.CompactTextString(m) } func (*LeaseTimeToLiveRequest) ProtoMessage() {} func (*LeaseTimeToLiveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{34} + return fileDescriptor_77a6da22d6a3feb1, []int{35} } func (m *LeaseTimeToLiveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2878,7 +2932,7 @@ func (m *LeaseTimeToLiveResponse) Reset() { *m = LeaseTimeToLiveResponse func (m *LeaseTimeToLiveResponse) String() string { return proto.CompactTextString(m) } func (*LeaseTimeToLiveResponse) ProtoMessage() {} func (*LeaseTimeToLiveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{35} + return fileDescriptor_77a6da22d6a3feb1, []int{36} } func (m *LeaseTimeToLiveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2952,7 +3006,7 @@ func (m *LeaseLeasesRequest) Reset() { *m = LeaseLeasesRequest{} } func (m *LeaseLeasesRequest) String() string { return proto.CompactTextString(m) } func (*LeaseLeasesRequest) ProtoMessage() {} func (*LeaseLeasesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{36} + return fileDescriptor_77a6da22d6a3feb1, []int{37} } func (m *LeaseLeasesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2992,7 +3046,7 @@ func (m *LeaseStatus) Reset() { *m = LeaseStatus{} } func (m *LeaseStatus) String() string { return proto.CompactTextString(m) } func (*LeaseStatus) ProtoMessage() {} func (*LeaseStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{37} + return fileDescriptor_77a6da22d6a3feb1, []int{38} } func (m *LeaseStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3040,7 +3094,7 @@ func (m *LeaseLeasesResponse) Reset() { *m = LeaseLeasesResponse{} } func (m *LeaseLeasesResponse) String() string { return proto.CompactTextString(m) } func (*LeaseLeasesResponse) ProtoMessage() {} func (*LeaseLeasesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{38} + return fileDescriptor_77a6da22d6a3feb1, []int{39} } func (m *LeaseLeasesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3103,7 +3157,7 @@ func (m *Member) Reset() { *m = Member{} } func (m *Member) String() string { return proto.CompactTextString(m) } func (*Member) ProtoMessage() {} func (*Member) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{39} + return fileDescriptor_77a6da22d6a3feb1, []int{40} } func (m *Member) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3181,7 +3235,7 @@ func (m *MemberAddRequest) Reset() { *m = MemberAddRequest{} } func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) } func (*MemberAddRequest) ProtoMessage() {} func (*MemberAddRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{40} + return fileDescriptor_77a6da22d6a3feb1, []int{41} } func (m *MemberAddRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3239,7 +3293,7 @@ func (m *MemberAddResponse) Reset() { *m = MemberAddResponse{} } func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) } func (*MemberAddResponse) ProtoMessage() {} func (*MemberAddResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{41} + return fileDescriptor_77a6da22d6a3feb1, []int{42} } func (m *MemberAddResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3301,7 +3355,7 @@ func (m *MemberRemoveRequest) Reset() { *m = MemberRemoveRequest{} } func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) } func (*MemberRemoveRequest) ProtoMessage() {} func (*MemberRemoveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{42} + return fileDescriptor_77a6da22d6a3feb1, []int{43} } func (m *MemberRemoveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3350,7 +3404,7 @@ func (m *MemberRemoveResponse) Reset() { *m = MemberRemoveResponse{} } func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) } func (*MemberRemoveResponse) ProtoMessage() {} func (*MemberRemoveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{43} + return fileDescriptor_77a6da22d6a3feb1, []int{44} } func (m *MemberRemoveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3407,7 +3461,7 @@ func (m *MemberUpdateRequest) Reset() { *m = MemberUpdateRequest{} } func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) } func (*MemberUpdateRequest) ProtoMessage() {} func (*MemberUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{44} + return fileDescriptor_77a6da22d6a3feb1, []int{45} } func (m *MemberUpdateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3463,7 +3517,7 @@ func (m *MemberUpdateResponse) Reset() { *m = MemberUpdateResponse{} } func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MemberUpdateResponse) ProtoMessage() {} func (*MemberUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{45} + return fileDescriptor_77a6da22d6a3feb1, []int{46} } func (m *MemberUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3517,7 +3571,7 @@ func (m *MemberListRequest) Reset() { *m = MemberListRequest{} } func (m *MemberListRequest) String() string { return proto.CompactTextString(m) } func (*MemberListRequest) ProtoMessage() {} func (*MemberListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{46} + return fileDescriptor_77a6da22d6a3feb1, []int{47} } func (m *MemberListRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3566,7 +3620,7 @@ func (m *MemberListResponse) Reset() { *m = MemberListResponse{} } func (m *MemberListResponse) String() string { return proto.CompactTextString(m) } func (*MemberListResponse) ProtoMessage() {} func (*MemberListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{47} + return fileDescriptor_77a6da22d6a3feb1, []int{48} } func (m *MemberListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3621,7 +3675,7 @@ func (m *MemberPromoteRequest) Reset() { *m = MemberPromoteRequest{} } func (m *MemberPromoteRequest) String() string { return proto.CompactTextString(m) } func (*MemberPromoteRequest) ProtoMessage() {} func (*MemberPromoteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{48} + return fileDescriptor_77a6da22d6a3feb1, []int{49} } func (m *MemberPromoteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3670,7 +3724,7 @@ func (m *MemberPromoteResponse) Reset() { *m = MemberPromoteResponse{} } func (m *MemberPromoteResponse) String() string { return proto.CompactTextString(m) } func (*MemberPromoteResponse) ProtoMessage() {} func (*MemberPromoteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{49} + return fileDescriptor_77a6da22d6a3feb1, []int{50} } func (m *MemberPromoteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3723,7 +3777,7 @@ func (m *DefragmentRequest) Reset() { *m = DefragmentRequest{} } func (m *DefragmentRequest) String() string { return proto.CompactTextString(m) } func (*DefragmentRequest) ProtoMessage() {} func (*DefragmentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{50} + return fileDescriptor_77a6da22d6a3feb1, []int{51} } func (m *DefragmentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3763,7 +3817,7 @@ func (m *DefragmentResponse) Reset() { *m = DefragmentResponse{} } func (m *DefragmentResponse) String() string { return proto.CompactTextString(m) } func (*DefragmentResponse) ProtoMessage() {} func (*DefragmentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{51} + return fileDescriptor_77a6da22d6a3feb1, []int{52} } func (m *DefragmentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3811,7 +3865,7 @@ func (m *MoveLeaderRequest) Reset() { *m = MoveLeaderRequest{} } func (m *MoveLeaderRequest) String() string { return proto.CompactTextString(m) } func (*MoveLeaderRequest) ProtoMessage() {} func (*MoveLeaderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{52} + return fileDescriptor_77a6da22d6a3feb1, []int{53} } func (m *MoveLeaderRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3858,7 +3912,7 @@ func (m *MoveLeaderResponse) Reset() { *m = MoveLeaderResponse{} } func (m *MoveLeaderResponse) String() string { return proto.CompactTextString(m) } func (*MoveLeaderResponse) ProtoMessage() {} func (*MoveLeaderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{53} + return fileDescriptor_77a6da22d6a3feb1, []int{54} } func (m *MoveLeaderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3913,7 +3967,7 @@ func (m *AlarmRequest) Reset() { *m = AlarmRequest{} } func (m *AlarmRequest) String() string { return proto.CompactTextString(m) } func (*AlarmRequest) ProtoMessage() {} func (*AlarmRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{54} + return fileDescriptor_77a6da22d6a3feb1, []int{55} } func (m *AlarmRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3977,7 +4031,7 @@ func (m *AlarmMember) Reset() { *m = AlarmMember{} } func (m *AlarmMember) String() string { return proto.CompactTextString(m) } func (*AlarmMember) ProtoMessage() {} func (*AlarmMember) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{55} + return fileDescriptor_77a6da22d6a3feb1, []int{56} } func (m *AlarmMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4033,7 +4087,7 @@ func (m *AlarmResponse) Reset() { *m = AlarmResponse{} } func (m *AlarmResponse) String() string { return proto.CompactTextString(m) } func (*AlarmResponse) ProtoMessage() {} func (*AlarmResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{56} + return fileDescriptor_77a6da22d6a3feb1, []int{57} } func (m *AlarmResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4092,7 +4146,7 @@ func (m *DowngradeRequest) Reset() { *m = DowngradeRequest{} } func (m *DowngradeRequest) String() string { return proto.CompactTextString(m) } func (*DowngradeRequest) ProtoMessage() {} func (*DowngradeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{57} + return fileDescriptor_77a6da22d6a3feb1, []int{58} } func (m *DowngradeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4148,7 +4202,7 @@ func (m *DowngradeResponse) Reset() { *m = DowngradeResponse{} } func (m *DowngradeResponse) String() string { return proto.CompactTextString(m) } func (*DowngradeResponse) ProtoMessage() {} func (*DowngradeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{58} + return fileDescriptor_77a6da22d6a3feb1, []int{59} } func (m *DowngradeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4206,7 +4260,7 @@ func (m *DowngradeVersionTestRequest) Reset() { *m = DowngradeVersionTes func (m *DowngradeVersionTestRequest) String() string { return proto.CompactTextString(m) } func (*DowngradeVersionTestRequest) ProtoMessage() {} func (*DowngradeVersionTestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{59} + return fileDescriptor_77a6da22d6a3feb1, []int{60} } func (m *DowngradeVersionTestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4252,7 +4306,7 @@ func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (m *StatusRequest) String() string { return proto.CompactTextString(m) } func (*StatusRequest) ProtoMessage() {} func (*StatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{60} + return fileDescriptor_77a6da22d6a3feb1, []int{61} } func (m *StatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4316,7 +4370,7 @@ func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (m *StatusResponse) String() string { return proto.CompactTextString(m) } func (*StatusResponse) ProtoMessage() {} func (*StatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{61} + return fileDescriptor_77a6da22d6a3feb1, []int{62} } func (m *StatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4450,7 +4504,7 @@ func (m *DowngradeInfo) Reset() { *m = DowngradeInfo{} } func (m *DowngradeInfo) String() string { return proto.CompactTextString(m) } func (*DowngradeInfo) ProtoMessage() {} func (*DowngradeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{62} + return fileDescriptor_77a6da22d6a3feb1, []int{63} } func (m *DowngradeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4503,7 +4557,7 @@ func (m *AuthEnableRequest) Reset() { *m = AuthEnableRequest{} } func (m *AuthEnableRequest) String() string { return proto.CompactTextString(m) } func (*AuthEnableRequest) ProtoMessage() {} func (*AuthEnableRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{63} + return fileDescriptor_77a6da22d6a3feb1, []int{64} } func (m *AuthEnableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4542,7 +4596,7 @@ func (m *AuthDisableRequest) Reset() { *m = AuthDisableRequest{} } func (m *AuthDisableRequest) String() string { return proto.CompactTextString(m) } func (*AuthDisableRequest) ProtoMessage() {} func (*AuthDisableRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64} + return fileDescriptor_77a6da22d6a3feb1, []int{65} } func (m *AuthDisableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4581,7 +4635,7 @@ func (m *AuthStatusRequest) Reset() { *m = AuthStatusRequest{} } func (m *AuthStatusRequest) String() string { return proto.CompactTextString(m) } func (*AuthStatusRequest) ProtoMessage() {} func (*AuthStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{65} + return fileDescriptor_77a6da22d6a3feb1, []int{66} } func (m *AuthStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4622,7 +4676,7 @@ func (m *AuthenticateRequest) Reset() { *m = AuthenticateRequest{} } func (m *AuthenticateRequest) String() string { return proto.CompactTextString(m) } func (*AuthenticateRequest) ProtoMessage() {} func (*AuthenticateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{66} + return fileDescriptor_77a6da22d6a3feb1, []int{67} } func (m *AuthenticateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4679,7 +4733,7 @@ func (m *AuthUserAddRequest) Reset() { *m = AuthUserAddRequest{} } func (m *AuthUserAddRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserAddRequest) ProtoMessage() {} func (*AuthUserAddRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{67} + return fileDescriptor_77a6da22d6a3feb1, []int{68} } func (m *AuthUserAddRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4747,7 +4801,7 @@ func (m *AuthUserGetRequest) Reset() { *m = AuthUserGetRequest{} } func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserGetRequest) ProtoMessage() {} func (*AuthUserGetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{68} + return fileDescriptor_77a6da22d6a3feb1, []int{69} } func (m *AuthUserGetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4795,7 +4849,7 @@ func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} } func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserDeleteRequest) ProtoMessage() {} func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{69} + return fileDescriptor_77a6da22d6a3feb1, []int{70} } func (m *AuthUserDeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4847,7 +4901,7 @@ func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePas func (m *AuthUserChangePasswordRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserChangePasswordRequest) ProtoMessage() {} func (*AuthUserChangePasswordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{70} + return fileDescriptor_77a6da22d6a3feb1, []int{71} } func (m *AuthUserChangePasswordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4911,7 +4965,7 @@ func (m *AuthUserGrantRoleRequest) Reset() { *m = AuthUserGrantRoleReque func (m *AuthUserGrantRoleRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserGrantRoleRequest) ProtoMessage() {} func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{71} + return fileDescriptor_77a6da22d6a3feb1, []int{72} } func (m *AuthUserGrantRoleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4966,7 +5020,7 @@ func (m *AuthUserRevokeRoleRequest) Reset() { *m = AuthUserRevokeRoleReq func (m *AuthUserRevokeRoleRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserRevokeRoleRequest) ProtoMessage() {} func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{72} + return fileDescriptor_77a6da22d6a3feb1, []int{73} } func (m *AuthUserRevokeRoleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5021,7 +5075,7 @@ func (m *AuthRoleAddRequest) Reset() { *m = AuthRoleAddRequest{} } func (m *AuthRoleAddRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleAddRequest) ProtoMessage() {} func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{73} + return fileDescriptor_77a6da22d6a3feb1, []int{74} } func (m *AuthRoleAddRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5068,7 +5122,7 @@ func (m *AuthRoleGetRequest) Reset() { *m = AuthRoleGetRequest{} } func (m *AuthRoleGetRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleGetRequest) ProtoMessage() {} func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{74} + return fileDescriptor_77a6da22d6a3feb1, []int{75} } func (m *AuthRoleGetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5114,7 +5168,7 @@ func (m *AuthUserListRequest) Reset() { *m = AuthUserListRequest{} } func (m *AuthUserListRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserListRequest) ProtoMessage() {} func (*AuthUserListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{75} + return fileDescriptor_77a6da22d6a3feb1, []int{76} } func (m *AuthUserListRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5153,7 +5207,7 @@ func (m *AuthRoleListRequest) Reset() { *m = AuthRoleListRequest{} } func (m *AuthRoleListRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleListRequest) ProtoMessage() {} func (*AuthRoleListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{76} + return fileDescriptor_77a6da22d6a3feb1, []int{77} } func (m *AuthRoleListRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5193,7 +5247,7 @@ func (m *AuthRoleDeleteRequest) Reset() { *m = AuthRoleDeleteRequest{} } func (m *AuthRoleDeleteRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleDeleteRequest) ProtoMessage() {} func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{77} + return fileDescriptor_77a6da22d6a3feb1, []int{78} } func (m *AuthRoleDeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5243,7 +5297,7 @@ func (m *AuthRoleGrantPermissionRequest) Reset() { *m = AuthRoleGrantPer func (m *AuthRoleGrantPermissionRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleGrantPermissionRequest) ProtoMessage() {} func (*AuthRoleGrantPermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{78} + return fileDescriptor_77a6da22d6a3feb1, []int{79} } func (m *AuthRoleGrantPermissionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5299,7 +5353,7 @@ func (m *AuthRoleRevokePermissionRequest) Reset() { *m = AuthRoleRevokeP func (m *AuthRoleRevokePermissionRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleRevokePermissionRequest) ProtoMessage() {} func (*AuthRoleRevokePermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{79} + return fileDescriptor_77a6da22d6a3feb1, []int{80} } func (m *AuthRoleRevokePermissionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5360,7 +5414,7 @@ func (m *AuthEnableResponse) Reset() { *m = AuthEnableResponse{} } func (m *AuthEnableResponse) String() string { return proto.CompactTextString(m) } func (*AuthEnableResponse) ProtoMessage() {} func (*AuthEnableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{80} + return fileDescriptor_77a6da22d6a3feb1, []int{81} } func (m *AuthEnableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5407,7 +5461,7 @@ func (m *AuthDisableResponse) Reset() { *m = AuthDisableResponse{} } func (m *AuthDisableResponse) String() string { return proto.CompactTextString(m) } func (*AuthDisableResponse) ProtoMessage() {} func (*AuthDisableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{81} + return fileDescriptor_77a6da22d6a3feb1, []int{82} } func (m *AuthDisableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5457,7 +5511,7 @@ func (m *AuthStatusResponse) Reset() { *m = AuthStatusResponse{} } func (m *AuthStatusResponse) String() string { return proto.CompactTextString(m) } func (*AuthStatusResponse) ProtoMessage() {} func (*AuthStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{82} + return fileDescriptor_77a6da22d6a3feb1, []int{83} } func (m *AuthStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5520,7 +5574,7 @@ func (m *AuthenticateResponse) Reset() { *m = AuthenticateResponse{} } func (m *AuthenticateResponse) String() string { return proto.CompactTextString(m) } func (*AuthenticateResponse) ProtoMessage() {} func (*AuthenticateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{83} + return fileDescriptor_77a6da22d6a3feb1, []int{84} } func (m *AuthenticateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5574,7 +5628,7 @@ func (m *AuthUserAddResponse) Reset() { *m = AuthUserAddResponse{} } func (m *AuthUserAddResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserAddResponse) ProtoMessage() {} func (*AuthUserAddResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{84} + return fileDescriptor_77a6da22d6a3feb1, []int{85} } func (m *AuthUserAddResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5622,7 +5676,7 @@ func (m *AuthUserGetResponse) Reset() { *m = AuthUserGetResponse{} } func (m *AuthUserGetResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserGetResponse) ProtoMessage() {} func (*AuthUserGetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{85} + return fileDescriptor_77a6da22d6a3feb1, []int{86} } func (m *AuthUserGetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5676,7 +5730,7 @@ func (m *AuthUserDeleteResponse) Reset() { *m = AuthUserDeleteResponse{} func (m *AuthUserDeleteResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserDeleteResponse) ProtoMessage() {} func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{86} + return fileDescriptor_77a6da22d6a3feb1, []int{87} } func (m *AuthUserDeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5723,7 +5777,7 @@ func (m *AuthUserChangePasswordResponse) Reset() { *m = AuthUserChangePa func (m *AuthUserChangePasswordResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserChangePasswordResponse) ProtoMessage() {} func (*AuthUserChangePasswordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{87} + return fileDescriptor_77a6da22d6a3feb1, []int{88} } func (m *AuthUserChangePasswordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5770,7 +5824,7 @@ func (m *AuthUserGrantRoleResponse) Reset() { *m = AuthUserGrantRoleResp func (m *AuthUserGrantRoleResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserGrantRoleResponse) ProtoMessage() {} func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{88} + return fileDescriptor_77a6da22d6a3feb1, []int{89} } func (m *AuthUserGrantRoleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5817,7 +5871,7 @@ func (m *AuthUserRevokeRoleResponse) Reset() { *m = AuthUserRevokeRoleRe func (m *AuthUserRevokeRoleResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserRevokeRoleResponse) ProtoMessage() {} func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{89} + return fileDescriptor_77a6da22d6a3feb1, []int{90} } func (m *AuthUserRevokeRoleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5864,7 +5918,7 @@ func (m *AuthRoleAddResponse) Reset() { *m = AuthRoleAddResponse{} } func (m *AuthRoleAddResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleAddResponse) ProtoMessage() {} func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{90} + return fileDescriptor_77a6da22d6a3feb1, []int{91} } func (m *AuthRoleAddResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5912,7 +5966,7 @@ func (m *AuthRoleGetResponse) Reset() { *m = AuthRoleGetResponse{} } func (m *AuthRoleGetResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleGetResponse) ProtoMessage() {} func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{91} + return fileDescriptor_77a6da22d6a3feb1, []int{92} } func (m *AuthRoleGetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5967,7 +6021,7 @@ func (m *AuthRoleListResponse) Reset() { *m = AuthRoleListResponse{} } func (m *AuthRoleListResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleListResponse) ProtoMessage() {} func (*AuthRoleListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{92} + return fileDescriptor_77a6da22d6a3feb1, []int{93} } func (m *AuthRoleListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6022,7 +6076,7 @@ func (m *AuthUserListResponse) Reset() { *m = AuthUserListResponse{} } func (m *AuthUserListResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserListResponse) ProtoMessage() {} func (*AuthUserListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{93} + return fileDescriptor_77a6da22d6a3feb1, []int{94} } func (m *AuthUserListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6076,7 +6130,7 @@ func (m *AuthRoleDeleteResponse) Reset() { *m = AuthRoleDeleteResponse{} func (m *AuthRoleDeleteResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleDeleteResponse) ProtoMessage() {} func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{94} + return fileDescriptor_77a6da22d6a3feb1, []int{95} } func (m *AuthRoleDeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6123,7 +6177,7 @@ func (m *AuthRoleGrantPermissionResponse) Reset() { *m = AuthRoleGrantPe func (m *AuthRoleGrantPermissionResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleGrantPermissionResponse) ProtoMessage() {} func (*AuthRoleGrantPermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{95} + return fileDescriptor_77a6da22d6a3feb1, []int{96} } func (m *AuthRoleGrantPermissionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6170,7 +6224,7 @@ func (m *AuthRoleRevokePermissionResponse) Reset() { *m = AuthRoleRevoke func (m *AuthRoleRevokePermissionResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleRevokePermissionResponse) ProtoMessage() {} func (*AuthRoleRevokePermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{96} + return fileDescriptor_77a6da22d6a3feb1, []int{97} } func (m *AuthRoleRevokePermissionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6217,6 +6271,7 @@ func init() { proto.RegisterEnum("etcdserverpb.DowngradeRequest_DowngradeAction", DowngradeRequest_DowngradeAction_name, DowngradeRequest_DowngradeAction_value) proto.RegisterType((*ResponseHeader)(nil), "etcdserverpb.ResponseHeader") proto.RegisterType((*RangeRequest)(nil), "etcdserverpb.RangeRequest") + proto.RegisterType((*RangeStreamResponse)(nil), "etcdserverpb.RangeStreamResponse") proto.RegisterType((*RangeResponse)(nil), "etcdserverpb.RangeResponse") proto.RegisterType((*PutRequest)(nil), "etcdserverpb.PutRequest") proto.RegisterType((*PutResponse)(nil), "etcdserverpb.PutResponse") @@ -6317,293 +6372,297 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 4574 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3c, 0x5d, 0x6f, 0x1b, 0x57, - 0x76, 0x1a, 0x92, 0x12, 0xc9, 0xc3, 0x0f, 0xd1, 0xd7, 0xb2, 0x4d, 0xd3, 0xb6, 0xac, 0x8c, 0xed, - 0xc4, 0x71, 0x62, 0xd1, 0x96, 0xec, 0x64, 0xeb, 0x22, 0xe9, 0xd2, 0x12, 0x63, 0x6b, 0x2d, 0x4b, - 0xca, 0x88, 0x76, 0x36, 0x2e, 0xb0, 0xea, 0x88, 0xbc, 0xa6, 0x66, 0x45, 0xce, 0x70, 0x67, 0x86, - 0xb4, 0x94, 0x3e, 0x6c, 0xba, 0xed, 0x76, 0xb1, 0x2d, 0xb0, 0x40, 0x53, 0xa0, 0x58, 0x14, 0xed, - 0x4b, 0x5b, 0xa0, 0x7d, 0x68, 0x8b, 0xf6, 0xa1, 0x0f, 0x45, 0x0b, 0xf4, 0xa1, 0x7d, 0x68, 0x1f, - 0x0a, 0x14, 0xe8, 0x1f, 0x68, 0xd3, 0x7d, 0xea, 0xaf, 0x58, 0xdc, 0xaf, 0xb9, 0x77, 0xbe, 0x24, - 0x67, 0xa5, 0x60, 0x5f, 0x62, 0xce, 0x3d, 0x9f, 0xf7, 0x9c, 0x7b, 0xcf, 0xb9, 0xf7, 0x9c, 0x1b, - 0x41, 0xd1, 0x1d, 0x75, 0x17, 0x47, 0xae, 0xe3, 0x3b, 0xa8, 0x8c, 0xfd, 0x6e, 0xcf, 0xc3, 0xee, - 0x04, 0xbb, 0xa3, 0xdd, 0xc6, 0x5c, 0xdf, 0xe9, 0x3b, 0x14, 0xd0, 0x24, 0xbf, 0x18, 0x4e, 0xa3, - 0x4e, 0x70, 0x9a, 0xe6, 0xc8, 0x6a, 0x0e, 0x27, 0xdd, 0xee, 0x68, 0xb7, 0xb9, 0x3f, 0xe1, 0x90, - 0x46, 0x00, 0x31, 0xc7, 0xfe, 0xde, 0x68, 0x97, 0xfe, 0xc3, 0x61, 0x0b, 0x01, 0x6c, 0x82, 0x5d, - 0xcf, 0x72, 0xec, 0xd1, 0xae, 0xf8, 0xc5, 0x31, 0x2e, 0xf7, 0x1d, 0xa7, 0x3f, 0xc0, 0x8c, 0xde, - 0xb6, 0x1d, 0xdf, 0xf4, 0x2d, 0xc7, 0xf6, 0x38, 0x94, 0xfd, 0xd3, 0xbd, 0xdd, 0xc7, 0xf6, 0x6d, - 0x67, 0x84, 0x6d, 0x73, 0x64, 0x4d, 0x96, 0x9a, 0xce, 0x88, 0xe2, 0xc4, 0xf1, 0xf5, 0x9f, 0x68, - 0x50, 0x35, 0xb0, 0x37, 0x72, 0x6c, 0x0f, 0x3f, 0xc6, 0x66, 0x0f, 0xbb, 0xe8, 0x0a, 0x40, 0x77, - 0x30, 0xf6, 0x7c, 0xec, 0xee, 0x58, 0xbd, 0xba, 0xb6, 0xa0, 0xdd, 0xcc, 0x19, 0x45, 0x3e, 0xb2, - 0xd6, 0x43, 0x97, 0xa0, 0x38, 0xc4, 0xc3, 0x5d, 0x06, 0xcd, 0x50, 0x68, 0x81, 0x0d, 0xac, 0xf5, - 0x50, 0x03, 0x0a, 0x2e, 0x9e, 0x58, 0x44, 0xdd, 0x7a, 0x76, 0x41, 0xbb, 0x99, 0x35, 0x82, 0x6f, - 0x42, 0xe8, 0x9a, 0x2f, 0xfd, 0x1d, 0x1f, 0xbb, 0xc3, 0x7a, 0x8e, 0x11, 0x92, 0x81, 0x0e, 0x76, - 0x87, 0x0f, 0xf2, 0x3f, 0xf8, 0x87, 0x7a, 0x76, 0x79, 0xf1, 0x8e, 0xfe, 0xaf, 0xd3, 0x50, 0x36, - 0x4c, 0xbb, 0x8f, 0x0d, 0xfc, 0xbd, 0x31, 0xf6, 0x7c, 0x54, 0x83, 0xec, 0x3e, 0x3e, 0xa4, 0x7a, - 0x94, 0x0d, 0xf2, 0x93, 0x31, 0xb2, 0xfb, 0x78, 0x07, 0xdb, 0x4c, 0x83, 0x32, 0x61, 0x64, 0xf7, - 0x71, 0xdb, 0xee, 0xa1, 0x39, 0x98, 0x1e, 0x58, 0x43, 0xcb, 0xe7, 0xe2, 0xd9, 0x47, 0x48, 0xaf, - 0x5c, 0x44, 0xaf, 0x15, 0x00, 0xcf, 0x71, 0xfd, 0x1d, 0xc7, 0xed, 0x61, 0xb7, 0x3e, 0xbd, 0xa0, - 0xdd, 0xac, 0x2e, 0x5d, 0x5f, 0x54, 0x3d, 0xbc, 0xa8, 0x2a, 0xb4, 0xb8, 0xed, 0xb8, 0xfe, 0x26, - 0xc1, 0x35, 0x8a, 0x9e, 0xf8, 0x89, 0x3e, 0x82, 0x12, 0x65, 0xe2, 0x9b, 0x6e, 0x1f, 0xfb, 0xf5, - 0x19, 0xca, 0xe5, 0xc6, 0x31, 0x5c, 0x3a, 0x14, 0xd9, 0xa0, 0xe2, 0xd9, 0x6f, 0xa4, 0x43, 0xd9, - 0xc3, 0xae, 0x65, 0x0e, 0xac, 0xcf, 0xcc, 0xdd, 0x01, 0xae, 0xe7, 0x17, 0xb4, 0x9b, 0x05, 0x23, - 0x34, 0x46, 0xe6, 0xbf, 0x8f, 0x0f, 0xbd, 0x1d, 0xc7, 0x1e, 0x1c, 0xd6, 0x0b, 0x14, 0xa1, 0x40, - 0x06, 0x36, 0xed, 0xc1, 0x21, 0xf5, 0x9e, 0x33, 0xb6, 0x7d, 0x06, 0x2d, 0x52, 0x68, 0x91, 0x8e, - 0x50, 0xf0, 0x5d, 0xa8, 0x0d, 0x2d, 0x7b, 0x67, 0xe8, 0xf4, 0x76, 0x02, 0x83, 0x00, 0x31, 0xc8, - 0xc3, 0xfc, 0xef, 0x51, 0x0f, 0xdc, 0x35, 0xaa, 0x43, 0xcb, 0x7e, 0xea, 0xf4, 0x0c, 0x61, 0x1f, - 0x42, 0x62, 0x1e, 0x84, 0x49, 0x4a, 0x51, 0x12, 0xf3, 0x40, 0x25, 0x79, 0x1f, 0xce, 0x12, 0x29, - 0x5d, 0x17, 0x9b, 0x3e, 0x96, 0x54, 0xe5, 0x30, 0xd5, 0x99, 0xa1, 0x65, 0xaf, 0x50, 0x94, 0x10, - 0xa1, 0x79, 0x10, 0x23, 0xac, 0x44, 0x09, 0xcd, 0x83, 0x30, 0xa1, 0xfe, 0x3e, 0x14, 0x03, 0xbf, - 0xa0, 0x02, 0xe4, 0x36, 0x36, 0x37, 0xda, 0xb5, 0x29, 0x04, 0x30, 0xd3, 0xda, 0x5e, 0x69, 0x6f, - 0xac, 0xd6, 0x34, 0x54, 0x82, 0xfc, 0x6a, 0x9b, 0x7d, 0x64, 0x1a, 0xf9, 0x2f, 0xf8, 0x7a, 0x7b, - 0x02, 0x20, 0x5d, 0x81, 0xf2, 0x90, 0x7d, 0xd2, 0xfe, 0xb4, 0x36, 0x45, 0x90, 0x9f, 0xb7, 0x8d, - 0xed, 0xb5, 0xcd, 0x8d, 0x9a, 0x46, 0xb8, 0xac, 0x18, 0xed, 0x56, 0xa7, 0x5d, 0xcb, 0x10, 0x8c, - 0xa7, 0x9b, 0xab, 0xb5, 0x2c, 0x2a, 0xc2, 0xf4, 0xf3, 0xd6, 0xfa, 0xb3, 0x76, 0x2d, 0x17, 0x30, - 0x93, 0xab, 0xf8, 0x4f, 0x34, 0xa8, 0x70, 0x77, 0xb3, 0xbd, 0x85, 0xee, 0xc1, 0xcc, 0x1e, 0xdd, - 0x5f, 0x74, 0x25, 0x97, 0x96, 0x2e, 0x47, 0xd6, 0x46, 0x68, 0x0f, 0x1a, 0x1c, 0x17, 0xe9, 0x90, - 0xdd, 0x9f, 0x78, 0xf5, 0xcc, 0x42, 0xf6, 0x66, 0x69, 0xa9, 0xb6, 0xc8, 0x22, 0xc9, 0xe2, 0x13, - 0x7c, 0xf8, 0xdc, 0x1c, 0x8c, 0xb1, 0x41, 0x80, 0x08, 0x41, 0x6e, 0xe8, 0xb8, 0x98, 0x2e, 0xf8, - 0x82, 0x41, 0x7f, 0x93, 0x5d, 0x40, 0x7d, 0xce, 0x17, 0x3b, 0xfb, 0x90, 0xea, 0xfd, 0xa7, 0x06, - 0xb0, 0x35, 0xf6, 0xd3, 0xb7, 0xd8, 0x1c, 0x4c, 0x4f, 0x88, 0x04, 0xbe, 0xbd, 0xd8, 0x07, 0xdd, - 0x5b, 0xd8, 0xf4, 0x70, 0xb0, 0xb7, 0xc8, 0x07, 0x5a, 0x80, 0xfc, 0xc8, 0xc5, 0x93, 0x9d, 0xfd, - 0x09, 0x95, 0x56, 0x90, 0x7e, 0x9a, 0x21, 0xe3, 0x4f, 0x26, 0xe8, 0x16, 0x94, 0xad, 0xbe, 0xed, - 0xb8, 0x78, 0x87, 0x31, 0x9d, 0x56, 0xd1, 0x96, 0x8c, 0x12, 0x03, 0xd2, 0x29, 0x29, 0xb8, 0x4c, - 0xd4, 0x4c, 0x22, 0xee, 0x3a, 0x81, 0xc9, 0xf9, 0x7c, 0xae, 0x41, 0x89, 0xce, 0xe7, 0x44, 0xc6, - 0x5e, 0x92, 0x13, 0xc9, 0x50, 0xb2, 0x98, 0xc1, 0x63, 0x53, 0x93, 0x2a, 0xd8, 0x80, 0x56, 0xf1, - 0x00, 0xfb, 0xf8, 0x24, 0xc1, 0x4b, 0x31, 0x65, 0x36, 0xd1, 0x94, 0x52, 0xde, 0x5f, 0x68, 0x70, - 0x36, 0x24, 0xf0, 0x44, 0x53, 0xaf, 0x43, 0xbe, 0x47, 0x99, 0x31, 0x9d, 0xb2, 0x86, 0xf8, 0x44, - 0xf7, 0xa0, 0xc0, 0x55, 0xf2, 0xea, 0xd9, 0xe4, 0x65, 0x28, 0xb5, 0xcc, 0x33, 0x2d, 0x3d, 0xa9, - 0xe6, 0x3f, 0x65, 0xa0, 0xc8, 0x8d, 0xb1, 0x39, 0x42, 0x2d, 0xa8, 0xb8, 0xec, 0x63, 0x87, 0xce, - 0x99, 0xeb, 0xd8, 0x48, 0x8f, 0x93, 0x8f, 0xa7, 0x8c, 0x32, 0x27, 0xa1, 0xc3, 0xe8, 0x57, 0xa1, - 0x24, 0x58, 0x8c, 0xc6, 0x3e, 0x77, 0x54, 0x3d, 0xcc, 0x40, 0x2e, 0xed, 0xc7, 0x53, 0x06, 0x70, - 0xf4, 0xad, 0xb1, 0x8f, 0x3a, 0x30, 0x27, 0x88, 0xd9, 0xfc, 0xb8, 0x1a, 0x59, 0xca, 0x65, 0x21, - 0xcc, 0x25, 0xee, 0xce, 0xc7, 0x53, 0x06, 0xe2, 0xf4, 0x0a, 0x10, 0xad, 0x4a, 0x95, 0xfc, 0x03, - 0x96, 0x5f, 0x62, 0x2a, 0x75, 0x0e, 0x6c, 0xce, 0x44, 0x58, 0x6b, 0x59, 0xd1, 0xad, 0x73, 0x60, - 0x07, 0x26, 0x7b, 0x58, 0x84, 0x3c, 0x1f, 0xd6, 0xff, 0x23, 0x03, 0x20, 0x3c, 0xb6, 0x39, 0x42, - 0xab, 0x50, 0x75, 0xf9, 0x57, 0xc8, 0x7e, 0x97, 0x12, 0xed, 0xc7, 0x1d, 0x3d, 0x65, 0x54, 0x04, - 0x11, 0x53, 0xf7, 0x43, 0x28, 0x07, 0x5c, 0xa4, 0x09, 0x2f, 0x26, 0x98, 0x30, 0xe0, 0x50, 0x12, - 0x04, 0xc4, 0x88, 0x9f, 0xc0, 0xb9, 0x80, 0x3e, 0xc1, 0x8a, 0x6f, 0x1c, 0x61, 0xc5, 0x80, 0xe1, - 0x59, 0xc1, 0x41, 0xb5, 0xe3, 0x23, 0x45, 0x31, 0x69, 0xc8, 0x8b, 0x09, 0x86, 0x64, 0x48, 0xaa, - 0x25, 0x03, 0x0d, 0x43, 0xa6, 0x04, 0x92, 0xf6, 0xd9, 0xb8, 0xfe, 0x57, 0x39, 0xc8, 0xaf, 0x38, - 0xc3, 0x91, 0xe9, 0x92, 0x45, 0x34, 0xe3, 0x62, 0x6f, 0x3c, 0xf0, 0xa9, 0x01, 0xab, 0x4b, 0xd7, - 0xc2, 0x32, 0x38, 0x9a, 0xf8, 0xd7, 0xa0, 0xa8, 0x06, 0x27, 0x21, 0xc4, 0x3c, 0xcb, 0x67, 0x5e, - 0x83, 0x98, 0xe7, 0x78, 0x4e, 0x22, 0x02, 0x42, 0x56, 0x06, 0x84, 0x06, 0xe4, 0xf9, 0x01, 0x8f, - 0x05, 0xeb, 0xc7, 0x53, 0x86, 0x18, 0x40, 0x6f, 0xc3, 0x6c, 0x34, 0x15, 0x4e, 0x73, 0x9c, 0x6a, - 0x37, 0x9c, 0x39, 0xaf, 0x41, 0x39, 0x94, 0xa1, 0x67, 0x38, 0x5e, 0x69, 0xa8, 0xe4, 0xe5, 0xf3, - 0x22, 0xac, 0x93, 0x63, 0x45, 0xf9, 0xf1, 0x94, 0x08, 0xec, 0x57, 0x45, 0x60, 0x2f, 0xa8, 0x89, - 0x96, 0xd8, 0x95, 0xc7, 0xf8, 0xeb, 0x6a, 0xd4, 0xfa, 0x26, 0x21, 0x0e, 0x90, 0x64, 0xf8, 0xd2, - 0x0d, 0xa8, 0x84, 0x4c, 0x46, 0x72, 0x64, 0xfb, 0xe3, 0x67, 0xad, 0x75, 0x96, 0x50, 0x1f, 0xd1, - 0x1c, 0x6a, 0xd4, 0x34, 0x92, 0xa0, 0xd7, 0xdb, 0xdb, 0xdb, 0xb5, 0x0c, 0x3a, 0x0f, 0xc5, 0x8d, - 0xcd, 0xce, 0x0e, 0xc3, 0xca, 0x36, 0xf2, 0x7f, 0xcc, 0x22, 0x89, 0xcc, 0xcf, 0x9f, 0x06, 0x3c, - 0x79, 0x8a, 0x56, 0x32, 0xf3, 0x94, 0x92, 0x99, 0x35, 0x91, 0x99, 0x33, 0x32, 0x33, 0x67, 0x11, - 0x82, 0xe9, 0xf5, 0x76, 0x6b, 0x9b, 0x26, 0x69, 0xc6, 0x7a, 0x39, 0x9e, 0xad, 0x1f, 0x56, 0xa1, - 0xcc, 0xdc, 0xb3, 0x33, 0xb6, 0xc9, 0x61, 0xe2, 0xaf, 0x35, 0x00, 0xb9, 0x61, 0x51, 0x13, 0xf2, - 0x5d, 0xa6, 0x42, 0x5d, 0xa3, 0x11, 0xf0, 0x5c, 0xa2, 0xc7, 0x0d, 0x81, 0x85, 0xee, 0x42, 0xde, - 0x1b, 0x77, 0xbb, 0xd8, 0x13, 0x99, 0xfb, 0x42, 0x34, 0x08, 0xf3, 0x80, 0x68, 0x08, 0x3c, 0x42, - 0xf2, 0xd2, 0xb4, 0x06, 0x63, 0x9a, 0xc7, 0x8f, 0x26, 0xe1, 0x78, 0x32, 0xc6, 0xfe, 0x99, 0x06, - 0x25, 0x65, 0x5b, 0xfc, 0x82, 0x29, 0xe0, 0x32, 0x14, 0xa9, 0x32, 0xb8, 0xc7, 0x93, 0x40, 0xc1, - 0x90, 0x03, 0xe8, 0x3d, 0x28, 0x8a, 0x9d, 0x24, 0xf2, 0x40, 0x3d, 0x99, 0xed, 0xe6, 0xc8, 0x90, - 0xa8, 0x52, 0xc9, 0x0e, 0x9c, 0xa1, 0x76, 0xea, 0x92, 0xdb, 0x87, 0xb0, 0xac, 0x7a, 0x2c, 0xd7, - 0x22, 0xc7, 0xf2, 0x06, 0x14, 0x46, 0x7b, 0x87, 0x9e, 0xd5, 0x35, 0x07, 0x5c, 0x9d, 0xe0, 0x5b, - 0x72, 0xdd, 0x06, 0xa4, 0x72, 0x3d, 0x89, 0x01, 0x24, 0xd3, 0xf3, 0x50, 0x7a, 0x6c, 0x7a, 0x7b, - 0x5c, 0x49, 0x39, 0x7e, 0x0f, 0x2a, 0x64, 0xfc, 0xc9, 0xf3, 0xd7, 0x50, 0x5f, 0x50, 0x2d, 0xeb, - 0xff, 0xac, 0x41, 0x55, 0x90, 0x9d, 0xc8, 0x41, 0x08, 0x72, 0x7b, 0xa6, 0xb7, 0x47, 0x8d, 0x51, - 0x31, 0xe8, 0x6f, 0xf4, 0x36, 0xd4, 0xba, 0x6c, 0xfe, 0x3b, 0x91, 0x7b, 0xd7, 0x2c, 0x1f, 0x0f, - 0xf6, 0xfe, 0xbb, 0x50, 0x21, 0x24, 0x3b, 0xe1, 0x7b, 0x90, 0xd8, 0xc6, 0xef, 0x19, 0xe5, 0x3d, - 0x3a, 0xe7, 0xa8, 0xfa, 0x26, 0x94, 0x99, 0x31, 0x4e, 0x5b, 0x77, 0x69, 0xd7, 0x06, 0xcc, 0x6e, - 0xdb, 0xe6, 0xc8, 0xdb, 0x73, 0xfc, 0x88, 0xcd, 0x97, 0xf5, 0xbf, 0xd7, 0xa0, 0x26, 0x81, 0x27, - 0xd2, 0xe1, 0x2d, 0x98, 0x75, 0xf1, 0xd0, 0xb4, 0x6c, 0xcb, 0xee, 0xef, 0xec, 0x1e, 0xfa, 0xd8, - 0xe3, 0xd7, 0xd7, 0x6a, 0x30, 0xfc, 0x90, 0x8c, 0x12, 0x65, 0x77, 0x07, 0xce, 0x2e, 0x0f, 0xd2, - 0xf4, 0x37, 0x7a, 0x23, 0x1c, 0xa5, 0x8b, 0xd2, 0x6e, 0x62, 0x5c, 0xea, 0xfc, 0xd3, 0x0c, 0x94, - 0x3f, 0x31, 0xfd, 0xae, 0x58, 0x41, 0x68, 0x0d, 0xaa, 0x41, 0x18, 0xa7, 0x23, 0x5c, 0xef, 0xc8, - 0x81, 0x83, 0xd2, 0x88, 0x7b, 0x8d, 0x38, 0x70, 0x54, 0xba, 0xea, 0x00, 0x65, 0x65, 0xda, 0x5d, - 0x3c, 0x08, 0x58, 0x65, 0xd2, 0x59, 0x51, 0x44, 0x95, 0x95, 0x3a, 0x80, 0xbe, 0x0d, 0xb5, 0x91, - 0xeb, 0xf4, 0x5d, 0xec, 0x79, 0x01, 0x33, 0x96, 0xc2, 0xf5, 0x04, 0x66, 0x5b, 0x1c, 0x35, 0x72, - 0x8a, 0xb9, 0xf7, 0x78, 0xca, 0x98, 0x1d, 0x85, 0x61, 0x32, 0xb0, 0xce, 0xca, 0xf3, 0x1e, 0x8b, - 0xac, 0x3f, 0xca, 0x02, 0x8a, 0x4f, 0xf3, 0xab, 0x1e, 0x93, 0x6f, 0x40, 0xd5, 0xf3, 0x4d, 0x37, - 0xb6, 0xe6, 0x2b, 0x74, 0x34, 0x58, 0xf1, 0x6f, 0x41, 0xa0, 0xd9, 0x8e, 0xed, 0xf8, 0xd6, 0xcb, - 0x43, 0x76, 0x41, 0x31, 0xaa, 0x62, 0x78, 0x83, 0x8e, 0xa2, 0x0d, 0xc8, 0xbf, 0xb4, 0x06, 0x3e, - 0x76, 0xbd, 0xfa, 0xf4, 0x42, 0xf6, 0x66, 0x75, 0xe9, 0x9d, 0xe3, 0x1c, 0xb3, 0xf8, 0x11, 0xc5, - 0xef, 0x1c, 0x8e, 0xd4, 0xd3, 0x2f, 0x67, 0xa2, 0x1e, 0xe3, 0x67, 0x92, 0x6f, 0x44, 0x3a, 0x14, - 0x5e, 0x11, 0xa6, 0x3b, 0x56, 0x8f, 0xe6, 0xe2, 0x60, 0x1f, 0xde, 0x33, 0xf2, 0x14, 0xb0, 0xd6, - 0x43, 0xd7, 0xa0, 0xf0, 0xd2, 0x35, 0xfb, 0x43, 0x6c, 0xfb, 0xec, 0x96, 0x2f, 0x71, 0x02, 0x80, - 0xbe, 0x08, 0x20, 0x55, 0x21, 0x99, 0x6f, 0x63, 0x73, 0xeb, 0x59, 0xa7, 0x36, 0x85, 0xca, 0x50, - 0xd8, 0xd8, 0x5c, 0x6d, 0xaf, 0xb7, 0x49, 0x6e, 0x14, 0x39, 0xef, 0xae, 0xdc, 0x74, 0x2d, 0xe1, - 0x88, 0xd0, 0x9a, 0x50, 0xf5, 0xd2, 0xc2, 0x97, 0x6e, 0xa1, 0x97, 0x60, 0x71, 0x57, 0xbf, 0x0a, - 0x73, 0x49, 0x4b, 0x43, 0x20, 0xdc, 0xd3, 0xff, 0x2d, 0x03, 0x15, 0xbe, 0x11, 0x4e, 0xb4, 0x73, - 0x2f, 0x2a, 0x5a, 0xf1, 0xeb, 0x89, 0x30, 0x52, 0x1d, 0xf2, 0x6c, 0x83, 0xf4, 0xf8, 0xfd, 0x57, - 0x7c, 0x92, 0xe0, 0xcc, 0xd6, 0x3b, 0xee, 0x71, 0xb7, 0x07, 0xdf, 0x89, 0x61, 0x73, 0x3a, 0x35, - 0x6c, 0x06, 0x1b, 0xce, 0xf4, 0xf8, 0xc1, 0xaa, 0x28, 0x5d, 0x51, 0x16, 0x9b, 0x8a, 0x00, 0x43, - 0x3e, 0xcb, 0xa7, 0xf8, 0x0c, 0xdd, 0x80, 0x19, 0x3c, 0xc1, 0xb6, 0xef, 0xd5, 0x4b, 0x34, 0x91, - 0x56, 0xc4, 0x85, 0xaa, 0x4d, 0x46, 0x0d, 0x0e, 0x94, 0xae, 0xfa, 0x10, 0xce, 0xd0, 0xfb, 0xee, - 0x23, 0xd7, 0xb4, 0xd5, 0x3b, 0x7b, 0xa7, 0xb3, 0xce, 0xd3, 0x0e, 0xf9, 0x89, 0xaa, 0x90, 0x59, - 0x5b, 0xe5, 0xf6, 0xc9, 0xac, 0xad, 0x4a, 0xfa, 0xdf, 0xd7, 0x00, 0xa9, 0x0c, 0x4e, 0xe4, 0x8b, - 0x88, 0x14, 0xa1, 0x47, 0x56, 0xea, 0x31, 0x07, 0xd3, 0xd8, 0x75, 0x1d, 0x97, 0x05, 0x4a, 0x83, - 0x7d, 0x48, 0x6d, 0x6e, 0x73, 0x65, 0x0c, 0x3c, 0x71, 0xf6, 0x83, 0x08, 0xc0, 0xd8, 0x6a, 0x71, - 0xe5, 0x3b, 0x70, 0x36, 0x84, 0x7e, 0x3a, 0x29, 0x7e, 0x13, 0x66, 0x29, 0xd7, 0x95, 0x3d, 0xdc, - 0xdd, 0x1f, 0x39, 0x96, 0x1d, 0xd3, 0x00, 0x5d, 0x23, 0xb1, 0x4b, 0xa4, 0x0b, 0x32, 0x45, 0x36, - 0xe7, 0x72, 0x30, 0xd8, 0xe9, 0xac, 0xcb, 0xa5, 0xbe, 0x0b, 0xe7, 0x23, 0x0c, 0xc5, 0xcc, 0x7e, - 0x0d, 0x4a, 0xdd, 0x60, 0xd0, 0xe3, 0x27, 0xc8, 0x2b, 0x61, 0x75, 0xa3, 0xa4, 0x2a, 0x85, 0x94, - 0xf1, 0x6d, 0xb8, 0x10, 0x93, 0x71, 0x1a, 0xe6, 0xb8, 0xa7, 0xdf, 0x81, 0x73, 0x94, 0xf3, 0x13, - 0x8c, 0x47, 0xad, 0x81, 0x35, 0x39, 0xde, 0x2d, 0x87, 0x7c, 0xbe, 0x0a, 0xc5, 0xd7, 0xbb, 0xac, - 0xa4, 0xe8, 0x36, 0x17, 0xdd, 0xb1, 0x86, 0xb8, 0xe3, 0xac, 0xa7, 0x6b, 0x4b, 0x12, 0xf9, 0x3e, - 0x3e, 0xf4, 0xf8, 0xf1, 0x91, 0xfe, 0x96, 0xd1, 0xeb, 0x6f, 0x35, 0x6e, 0x4e, 0x95, 0xcf, 0xd7, - 0xbc, 0x35, 0xe6, 0x01, 0xfa, 0x64, 0x0f, 0xe2, 0x1e, 0x01, 0xb0, 0xda, 0x9c, 0x32, 0x12, 0x28, - 0x4c, 0xb2, 0x50, 0x39, 0xaa, 0xf0, 0x15, 0xbe, 0x71, 0xe8, 0x7f, 0xbc, 0xd8, 0x49, 0xe9, 0x4d, - 0x28, 0x51, 0xc8, 0xb6, 0x6f, 0xfa, 0x63, 0x2f, 0xcd, 0x73, 0xcb, 0xfa, 0x8f, 0x34, 0xbe, 0xa3, - 0x04, 0x9f, 0x13, 0xcd, 0xf9, 0x2e, 0xcc, 0xd0, 0x1b, 0xa2, 0xb8, 0xe9, 0x5c, 0x4c, 0x58, 0xd8, - 0x4c, 0x23, 0x83, 0x23, 0x2a, 0xe7, 0x24, 0x0d, 0x66, 0x9e, 0xd2, 0xce, 0x81, 0xa2, 0x6d, 0x4e, - 0x78, 0xce, 0x36, 0x87, 0xac, 0xfc, 0x58, 0x34, 0xe8, 0x6f, 0x7a, 0x21, 0xc0, 0xd8, 0x7d, 0x66, - 0xac, 0xb3, 0x1b, 0x48, 0xd1, 0x08, 0xbe, 0x89, 0x61, 0xbb, 0x03, 0x0b, 0xdb, 0x3e, 0x85, 0xe6, - 0x28, 0x54, 0x19, 0x41, 0x37, 0xa0, 0x68, 0x79, 0xeb, 0xd8, 0x74, 0x6d, 0x5e, 0xe2, 0x57, 0x02, - 0xb3, 0x84, 0xc8, 0x35, 0xf6, 0x1d, 0xa8, 0x31, 0xcd, 0x5a, 0xbd, 0x9e, 0x72, 0xda, 0x0f, 0xe4, - 0x6b, 0x11, 0xf9, 0x21, 0xfe, 0x99, 0xe3, 0xf9, 0xff, 0x9d, 0x06, 0x67, 0x14, 0x01, 0x27, 0x72, - 0xc1, 0xbb, 0x30, 0xc3, 0xfa, 0x2f, 0xfc, 0x28, 0x38, 0x17, 0xa6, 0x62, 0x62, 0x0c, 0x8e, 0x83, - 0x16, 0x21, 0xcf, 0x7e, 0x89, 0x6b, 0x5c, 0x32, 0xba, 0x40, 0x92, 0x2a, 0x2f, 0xc2, 0x59, 0x0e, - 0xc3, 0x43, 0x27, 0x69, 0xcf, 0xe5, 0xc2, 0x11, 0xe2, 0x87, 0x1a, 0xcc, 0x85, 0x09, 0x4e, 0x34, - 0x4b, 0x45, 0xef, 0xcc, 0x57, 0xd2, 0xfb, 0x5b, 0x42, 0xef, 0x67, 0xa3, 0x9e, 0x72, 0xe4, 0x8c, - 0xae, 0x38, 0xd5, 0xbb, 0x99, 0xb0, 0x77, 0x25, 0xaf, 0x9f, 0x04, 0x73, 0x12, 0xcc, 0x4e, 0x34, - 0xa7, 0xf7, 0x5f, 0x6b, 0x4e, 0xca, 0x11, 0x2c, 0x36, 0xb9, 0x35, 0xb1, 0x8c, 0xd6, 0x2d, 0x2f, - 0xc8, 0x38, 0xef, 0x40, 0x79, 0x60, 0xd9, 0xd8, 0x74, 0x79, 0x0f, 0x49, 0x53, 0xd7, 0xe3, 0x7d, - 0x23, 0x04, 0x94, 0xac, 0x7e, 0x5b, 0x03, 0xa4, 0xf2, 0xfa, 0xe5, 0x78, 0xab, 0x29, 0x0c, 0xbc, - 0xe5, 0x3a, 0x43, 0xc7, 0x3f, 0x6e, 0x99, 0xdd, 0xd3, 0x7f, 0x57, 0x83, 0x73, 0x11, 0x8a, 0x5f, - 0x86, 0xe6, 0xf7, 0xf4, 0xcb, 0x70, 0x66, 0x15, 0x8b, 0x33, 0x5e, 0xac, 0x76, 0xb0, 0x0d, 0x48, - 0x85, 0x9e, 0xce, 0x29, 0xe6, 0x1b, 0x70, 0xe6, 0xa9, 0x33, 0x21, 0x81, 0x9c, 0x80, 0x65, 0x98, - 0x62, 0xc5, 0xac, 0xc0, 0x5e, 0xc1, 0xb7, 0x0c, 0xbd, 0xdb, 0x80, 0x54, 0xca, 0xd3, 0x50, 0x67, - 0x59, 0xff, 0x5f, 0x0d, 0xca, 0xad, 0x81, 0xe9, 0x0e, 0x85, 0x2a, 0x1f, 0xc2, 0x0c, 0xab, 0xcc, - 0xf0, 0x32, 0xeb, 0x9b, 0x61, 0x7e, 0x2a, 0x2e, 0xfb, 0x68, 0xb1, 0x3a, 0x0e, 0xa7, 0x22, 0x53, - 0xe1, 0x9d, 0xe5, 0xd5, 0x48, 0xa7, 0x79, 0x15, 0xdd, 0x86, 0x69, 0x93, 0x90, 0xd0, 0xf4, 0x5a, - 0x8d, 0x96, 0xcb, 0x28, 0x37, 0x72, 0x25, 0x32, 0x18, 0x96, 0xfe, 0x01, 0x94, 0x14, 0x09, 0x28, - 0x0f, 0xd9, 0x47, 0x6d, 0x7e, 0x4d, 0x6a, 0xad, 0x74, 0xd6, 0x9e, 0xb3, 0x12, 0x62, 0x15, 0x60, - 0xb5, 0x1d, 0x7c, 0x67, 0x12, 0x1a, 0x7b, 0x26, 0xe7, 0xc3, 0xf3, 0x96, 0xaa, 0xa1, 0x96, 0xa6, - 0x61, 0xe6, 0x75, 0x34, 0x94, 0x22, 0x7e, 0x4b, 0x83, 0x0a, 0x37, 0xcd, 0x49, 0x53, 0x33, 0xe5, - 0x9c, 0x92, 0x9a, 0x95, 0x69, 0x18, 0x1c, 0x51, 0xea, 0xf0, 0x2f, 0x1a, 0xd4, 0x56, 0x9d, 0x57, - 0x76, 0xdf, 0x35, 0x7b, 0xc1, 0x1e, 0xfc, 0x28, 0xe2, 0xce, 0xc5, 0x48, 0xa5, 0x3f, 0x82, 0x2f, - 0x07, 0x22, 0x6e, 0xad, 0xcb, 0x5a, 0x0a, 0xcb, 0xef, 0xe2, 0x53, 0xff, 0x26, 0xcc, 0x46, 0x88, - 0x88, 0x83, 0x9e, 0xb7, 0xd6, 0xd7, 0x56, 0x89, 0x43, 0x68, 0xbd, 0xb7, 0xbd, 0xd1, 0x7a, 0xb8, - 0xde, 0xe6, 0x5d, 0xd9, 0xd6, 0xc6, 0x4a, 0x7b, 0x5d, 0x3a, 0xea, 0xbe, 0x98, 0xc1, 0x7d, 0x7d, - 0x00, 0x67, 0x14, 0x85, 0x4e, 0xda, 0x1c, 0x4b, 0xd6, 0x57, 0x4a, 0xfb, 0x06, 0x5c, 0x0a, 0xa4, - 0x3d, 0x67, 0xc0, 0x0e, 0xf6, 0xd4, 0xcb, 0xda, 0x84, 0x0b, 0x2d, 0x1a, 0xe4, 0xa7, 0xa0, 0x7c, - 0x4f, 0xaf, 0x43, 0x85, 0x9f, 0x8f, 0xa2, 0x21, 0xe3, 0xcf, 0x73, 0x50, 0x15, 0xa0, 0xaf, 0x47, - 0x7f, 0x74, 0x1e, 0x66, 0x7a, 0xbb, 0xdb, 0xd6, 0x67, 0xa2, 0xa3, 0xcb, 0xbf, 0xc8, 0xf8, 0x80, - 0xc9, 0x61, 0xef, 0x34, 0xf8, 0x17, 0xba, 0xcc, 0x9e, 0x70, 0xac, 0xd9, 0x3d, 0x7c, 0x40, 0x8f, - 0x51, 0x39, 0x43, 0x0e, 0xd0, 0x72, 0x28, 0x7f, 0xcf, 0x41, 0x6f, 0xc9, 0xca, 0xfb, 0x0e, 0xb4, - 0x0c, 0x35, 0xf2, 0xbb, 0x35, 0x1a, 0x0d, 0x2c, 0xdc, 0x63, 0x0c, 0xc8, 0x05, 0x39, 0x27, 0xcf, - 0x49, 0x31, 0x04, 0x74, 0x15, 0x66, 0xe8, 0xe5, 0xd1, 0xab, 0x17, 0x48, 0x46, 0x96, 0xa8, 0x7c, - 0x18, 0xbd, 0x0d, 0x25, 0xa6, 0xf1, 0x9a, 0xfd, 0xcc, 0xc3, 0xf4, 0xb5, 0x83, 0x52, 0x49, 0x51, - 0x61, 0xe1, 0x13, 0x1a, 0xa4, 0x9d, 0xd0, 0x50, 0x13, 0xaa, 0x9e, 0xef, 0xb8, 0x66, 0x5f, 0xb8, - 0x91, 0x3e, 0x75, 0x50, 0xca, 0x7d, 0x11, 0xb0, 0x54, 0xe1, 0xe3, 0xb1, 0xe3, 0x9b, 0xe1, 0x27, - 0x0e, 0xef, 0x19, 0x2a, 0x0c, 0x7d, 0x0b, 0x2a, 0x3d, 0xb1, 0x48, 0xd6, 0xec, 0x97, 0x0e, 0x7d, - 0xd6, 0x10, 0xeb, 0xde, 0xad, 0xaa, 0x28, 0x92, 0x53, 0x98, 0x54, 0xbd, 0xc9, 0x56, 0x42, 0x14, - 0xc4, 0xdb, 0xd8, 0x26, 0xa9, 0x9d, 0x55, 0x70, 0x0a, 0x86, 0xf8, 0x44, 0xd7, 0xa1, 0xc2, 0x32, - 0xc1, 0xf3, 0xd0, 0x6a, 0x08, 0x0f, 0x92, 0x3c, 0xd6, 0x1a, 0xfb, 0x7b, 0x6d, 0x4a, 0x14, 0x5b, - 0x94, 0x57, 0x00, 0x11, 0xe8, 0xaa, 0xe5, 0x25, 0x82, 0x39, 0x71, 0xe2, 0x8a, 0xbe, 0xaf, 0x6f, - 0xc0, 0x59, 0x02, 0xc5, 0xb6, 0x6f, 0x75, 0x95, 0xa3, 0x98, 0x38, 0xec, 0x6b, 0x91, 0xc3, 0xbe, - 0xe9, 0x79, 0xaf, 0x1c, 0xb7, 0xc7, 0xd5, 0x0c, 0xbe, 0xa5, 0xb4, 0x7f, 0xd4, 0x98, 0x36, 0xcf, - 0xbc, 0xd0, 0x41, 0xfd, 0x2b, 0xf2, 0x43, 0xbf, 0x02, 0x79, 0xfe, 0x40, 0x8a, 0xd7, 0x3f, 0xcf, - 0x2f, 0xb2, 0x87, 0x59, 0x8b, 0x9c, 0xf1, 0x26, 0x83, 0x2a, 0x35, 0x3a, 0x8e, 0x4f, 0x96, 0xcb, - 0x9e, 0xe9, 0xed, 0xe1, 0xde, 0x96, 0x60, 0x1e, 0xaa, 0x0e, 0xdf, 0x37, 0x22, 0x60, 0xa9, 0xfb, - 0x5d, 0xa9, 0xfa, 0x23, 0xec, 0x1f, 0xa1, 0xba, 0xda, 0x7f, 0x38, 0x27, 0x48, 0x78, 0xdb, 0xf4, - 0x75, 0xa8, 0x7e, 0xac, 0xc1, 0x15, 0x41, 0xb6, 0xb2, 0x67, 0xda, 0x7d, 0x2c, 0x94, 0xf9, 0x45, - 0xed, 0x15, 0x9f, 0x74, 0xf6, 0x35, 0x27, 0xfd, 0x04, 0xea, 0xc1, 0xa4, 0x69, 0x2d, 0xca, 0x19, - 0xa8, 0x93, 0x18, 0x7b, 0x41, 0x90, 0xa4, 0xbf, 0xc9, 0x98, 0xeb, 0x0c, 0x82, 0x6b, 0x20, 0xf9, - 0x2d, 0x99, 0xad, 0xc3, 0x45, 0xc1, 0x8c, 0x17, 0x87, 0xc2, 0xdc, 0x62, 0x73, 0x3a, 0x92, 0x1b, - 0xf7, 0x07, 0xe1, 0x71, 0xf4, 0x52, 0x4a, 0x24, 0x09, 0xbb, 0x90, 0x4a, 0xd1, 0x92, 0xa4, 0xcc, - 0xb3, 0x1d, 0x40, 0x74, 0x56, 0x4e, 0xec, 0x31, 0x38, 0x61, 0x99, 0x08, 0xe7, 0x4b, 0x80, 0xc0, - 0x63, 0x4b, 0x20, 0x5d, 0x2a, 0x86, 0xf9, 0x40, 0x51, 0x62, 0xf6, 0x2d, 0xec, 0x0e, 0x2d, 0xcf, - 0x53, 0x1a, 0x71, 0x49, 0xe6, 0x7a, 0x13, 0x72, 0x23, 0xcc, 0x8f, 0x2f, 0xa5, 0x25, 0x24, 0xf6, - 0x84, 0x42, 0x4c, 0xe1, 0x52, 0xcc, 0x10, 0xae, 0x0a, 0x31, 0xcc, 0x21, 0x89, 0x72, 0xa2, 0x6a, - 0x8a, 0xe2, 0x7f, 0x26, 0xa5, 0xf8, 0x9f, 0x0d, 0x17, 0xff, 0x43, 0x47, 0x6a, 0x35, 0x50, 0x9d, - 0xce, 0x91, 0xba, 0xc3, 0x1c, 0x10, 0xc4, 0xb7, 0xd3, 0xe1, 0xfa, 0x07, 0x3c, 0x50, 0x9d, 0x56, - 0x3a, 0x17, 0x01, 0x3e, 0x13, 0x0e, 0xf0, 0x3a, 0x94, 0x89, 0x93, 0x0c, 0xb5, 0x2b, 0x92, 0x33, - 0x42, 0x63, 0x32, 0x18, 0xef, 0xc3, 0x5c, 0x38, 0x18, 0x9f, 0x48, 0xa9, 0x39, 0x98, 0xf6, 0x9d, - 0x7d, 0x2c, 0x72, 0x0a, 0xfb, 0x88, 0x99, 0x35, 0x08, 0xd4, 0xa7, 0x63, 0xd6, 0xef, 0x4a, 0xae, - 0x74, 0x03, 0x9e, 0x74, 0x06, 0x64, 0x39, 0x8a, 0xdb, 0x3f, 0xfb, 0x90, 0xb2, 0x3e, 0x81, 0xf3, - 0xd1, 0xe0, 0x7b, 0x3a, 0x93, 0xd8, 0x61, 0x9b, 0x33, 0x29, 0x3c, 0x9f, 0x8e, 0x80, 0x17, 0x32, - 0x4e, 0x2a, 0x41, 0xf7, 0x74, 0x78, 0xff, 0x3a, 0x34, 0x92, 0x62, 0xf0, 0xa9, 0xee, 0xc5, 0x20, - 0x24, 0x9f, 0x0e, 0xd7, 0x1f, 0x6a, 0x92, 0xad, 0xba, 0x6a, 0x3e, 0xf8, 0x2a, 0x6c, 0x45, 0xae, - 0xbb, 0x13, 0x2c, 0x9f, 0x66, 0x10, 0x2d, 0xb3, 0xc9, 0xd1, 0x52, 0x92, 0x50, 0x44, 0xb1, 0xff, - 0x64, 0xa8, 0xff, 0x3a, 0x57, 0x2f, 0x17, 0x26, 0xf3, 0xce, 0x49, 0x85, 0x91, 0xf4, 0x1c, 0x08, - 0xa3, 0x1f, 0xb1, 0xad, 0xa2, 0x26, 0xa9, 0xd3, 0x71, 0xdd, 0x6f, 0xc8, 0x04, 0x13, 0xcb, 0x63, - 0xa7, 0x23, 0xc1, 0x84, 0x85, 0xf4, 0x14, 0x76, 0x2a, 0x22, 0x6e, 0xb5, 0xa0, 0x18, 0xdc, 0xfd, - 0x95, 0x97, 0xca, 0x25, 0xc8, 0x6f, 0x6c, 0x6e, 0x6f, 0xb5, 0x56, 0xc8, 0xd5, 0x76, 0x0e, 0xf2, - 0x2b, 0x9b, 0x86, 0xf1, 0x6c, 0xab, 0x43, 0xee, 0xb6, 0xd1, 0x87, 0x4b, 0x4b, 0x3f, 0xcb, 0x42, - 0xe6, 0xc9, 0x73, 0xf4, 0x29, 0x4c, 0xb3, 0x87, 0x73, 0x47, 0xbc, 0x9f, 0x6c, 0x1c, 0xf5, 0x36, - 0x50, 0xbf, 0xf0, 0x83, 0xff, 0xfe, 0xd9, 0x1f, 0x66, 0xce, 0xe8, 0xe5, 0xe6, 0x64, 0xb9, 0xb9, - 0x3f, 0x69, 0xd2, 0x24, 0xfb, 0x40, 0xbb, 0x85, 0x3e, 0x86, 0xec, 0xd6, 0xd8, 0x47, 0xa9, 0xef, - 0x2a, 0x1b, 0xe9, 0xcf, 0x05, 0xf5, 0x73, 0x94, 0xe9, 0xac, 0x0e, 0x9c, 0xe9, 0x68, 0xec, 0x13, - 0x96, 0xdf, 0x83, 0x92, 0xfa, 0xd8, 0xef, 0xd8, 0xc7, 0x96, 0x8d, 0xe3, 0x1f, 0x12, 0xea, 0x57, - 0xa8, 0xa8, 0x0b, 0x3a, 0xe2, 0xa2, 0xd8, 0x73, 0x44, 0x75, 0x16, 0x9d, 0x03, 0x1b, 0xa5, 0x3e, - 0xc5, 0x6c, 0xa4, 0xbf, 0x2d, 0x8c, 0xcd, 0xc2, 0x3f, 0xb0, 0x09, 0xcb, 0xef, 0xf2, 0x47, 0x84, - 0x5d, 0x1f, 0x5d, 0x4d, 0x78, 0x05, 0xa6, 0xbe, 0x6e, 0x6a, 0x2c, 0xa4, 0x23, 0x70, 0x21, 0x97, - 0xa9, 0x90, 0xf3, 0xfa, 0x19, 0x2e, 0xa4, 0x1b, 0xa0, 0x3c, 0xd0, 0x6e, 0x2d, 0x75, 0x61, 0x9a, - 0x76, 0xcf, 0xd1, 0x0b, 0xf1, 0xa3, 0x91, 0xf0, 0x2e, 0x21, 0xc5, 0xd1, 0xa1, 0xbe, 0xbb, 0x3e, - 0x47, 0x05, 0x55, 0xf5, 0x22, 0x11, 0x44, 0x7b, 0xe7, 0x0f, 0xb4, 0x5b, 0x37, 0xb5, 0x3b, 0xda, - 0xd2, 0xdf, 0x4c, 0xc3, 0x34, 0xed, 0xd2, 0xa0, 0x7d, 0x00, 0xd9, 0x25, 0x8e, 0xce, 0x2e, 0xd6, - 0x80, 0x8e, 0xce, 0x2e, 0xde, 0x60, 0xd6, 0x1b, 0x54, 0xe8, 0x9c, 0x3e, 0x4b, 0x84, 0xd2, 0xe6, - 0x4f, 0x93, 0xf6, 0xba, 0x88, 0x1d, 0x7f, 0xac, 0xf1, 0x76, 0x15, 0xdb, 0x66, 0x28, 0x89, 0x5b, - 0xa8, 0x43, 0x1c, 0x5d, 0x0e, 0x09, 0x4d, 0x61, 0xfd, 0x3e, 0x15, 0xd8, 0xd4, 0x6b, 0x52, 0xa0, - 0x4b, 0x31, 0x1e, 0x68, 0xb7, 0x5e, 0xd4, 0xf5, 0xb3, 0xdc, 0xca, 0x11, 0x08, 0xfa, 0x3e, 0x54, - 0xc3, 0xbd, 0x4c, 0x74, 0x2d, 0x41, 0x56, 0xb4, 0x37, 0xda, 0xb8, 0x7e, 0x34, 0x12, 0xd7, 0x69, - 0x9e, 0xea, 0xc4, 0x85, 0x33, 0xc9, 0xfb, 0x18, 0x8f, 0x4c, 0x82, 0xc4, 0x7d, 0x80, 0xfe, 0x54, - 0xe3, 0xed, 0x68, 0xd9, 0x8a, 0x44, 0x49, 0xdc, 0x63, 0x1d, 0xcf, 0xc6, 0x8d, 0x63, 0xb0, 0xb8, - 0x12, 0x1f, 0x50, 0x25, 0xde, 0xd7, 0xe7, 0xa4, 0x12, 0xbe, 0x35, 0xc4, 0xbe, 0xc3, 0xb5, 0x78, - 0x71, 0x59, 0xbf, 0x10, 0x32, 0x4e, 0x08, 0x2a, 0x9d, 0xc5, 0x5a, 0x86, 0x89, 0xce, 0x0a, 0x75, - 0x25, 0x13, 0x9d, 0x15, 0xee, 0x37, 0x26, 0x39, 0x8b, 0x37, 0x08, 0x13, 0x9c, 0x15, 0x40, 0x96, - 0xfe, 0x3f, 0x07, 0xf9, 0x15, 0xf6, 0x3f, 0x23, 0x21, 0x07, 0x8a, 0x41, 0x13, 0x0d, 0xcd, 0x27, - 0xd5, 0xe9, 0xe5, 0x55, 0xae, 0x71, 0x35, 0x15, 0xce, 0x15, 0x7a, 0x83, 0x2a, 0x74, 0x49, 0x3f, - 0x4f, 0x24, 0xf3, 0xff, 0xdf, 0xa9, 0xc9, 0xaa, 0xb9, 0x4d, 0xb3, 0xd7, 0x23, 0x86, 0xf8, 0x4d, - 0x28, 0xab, 0x2d, 0x2d, 0xf4, 0x46, 0x62, 0x6f, 0x40, 0xed, 0x8f, 0x35, 0xf4, 0xa3, 0x50, 0xb8, - 0xe4, 0xeb, 0x54, 0xf2, 0xbc, 0x7e, 0x31, 0x41, 0xb2, 0x4b, 0x51, 0x43, 0xc2, 0x59, 0xef, 0x29, - 0x59, 0x78, 0xa8, 0xc9, 0x95, 0x2c, 0x3c, 0xdc, 0xba, 0x3a, 0x52, 0xf8, 0x98, 0xa2, 0x12, 0xe1, - 0x1e, 0x80, 0x6c, 0x0e, 0xa1, 0x44, 0x5b, 0x2a, 0x17, 0xd6, 0x68, 0x70, 0x88, 0xf7, 0x95, 0x74, - 0x9d, 0x8a, 0xe5, 0xeb, 0x2e, 0x22, 0x76, 0x60, 0x79, 0x3e, 0xdb, 0x98, 0x95, 0x50, 0x6b, 0x07, - 0x25, 0xce, 0x27, 0xdc, 0x29, 0x6a, 0x5c, 0x3b, 0x12, 0x87, 0x4b, 0xbf, 0x41, 0xa5, 0x5f, 0xd5, - 0x1b, 0x09, 0xd2, 0x47, 0x0c, 0x97, 0x2c, 0xb6, 0xcf, 0xf3, 0x50, 0x7a, 0x6a, 0x5a, 0xb6, 0x8f, - 0x6d, 0xd3, 0xee, 0x62, 0xb4, 0x0b, 0xd3, 0x34, 0x77, 0x47, 0x03, 0xb1, 0xda, 0xc9, 0x88, 0x06, - 0xe2, 0x50, 0x29, 0x5f, 0x5f, 0xa0, 0x82, 0x1b, 0xfa, 0x39, 0x22, 0x78, 0x28, 0x59, 0x37, 0x59, - 0x13, 0x40, 0xbb, 0x85, 0x5e, 0xc2, 0x0c, 0x6f, 0xe1, 0x47, 0x18, 0x85, 0x8a, 0x6a, 0x8d, 0xcb, - 0xc9, 0xc0, 0xa4, 0xb5, 0xac, 0x8a, 0xf1, 0x28, 0x1e, 0x91, 0x33, 0x01, 0x90, 0x1d, 0xa9, 0xa8, - 0x47, 0x63, 0x9d, 0xac, 0xc6, 0x42, 0x3a, 0x42, 0x92, 0x4d, 0x55, 0x99, 0xbd, 0x00, 0x97, 0xc8, - 0xfd, 0x0e, 0xe4, 0x1e, 0x9b, 0xde, 0x1e, 0x8a, 0xe4, 0x5e, 0xe5, 0xc5, 0x6d, 0xa3, 0x91, 0x04, - 0xe2, 0x52, 0xae, 0x52, 0x29, 0x17, 0x59, 0x28, 0x53, 0xa5, 0xd0, 0x37, 0xa5, 0xcc, 0x7e, 0xec, - 0xb9, 0x6d, 0xd4, 0x7e, 0xa1, 0xb7, 0xbb, 0x51, 0xfb, 0x85, 0x5f, 0xe8, 0xa6, 0xdb, 0x8f, 0x48, - 0xd9, 0x9f, 0x10, 0x39, 0x23, 0x28, 0x88, 0x87, 0xa9, 0x28, 0xf2, 0x9c, 0x27, 0xf2, 0x9a, 0xb5, - 0x31, 0x9f, 0x06, 0xe6, 0xd2, 0xae, 0x51, 0x69, 0x57, 0xf4, 0x7a, 0xcc, 0x5b, 0x1c, 0xf3, 0x81, - 0x76, 0xeb, 0x8e, 0x86, 0xbe, 0x0f, 0x20, 0x9b, 0x76, 0xb1, 0x3d, 0x18, 0x6d, 0x04, 0xc6, 0xf6, - 0x60, 0xac, 0xdf, 0xa7, 0x2f, 0x52, 0xb9, 0x37, 0xf5, 0x6b, 0x51, 0xb9, 0xbe, 0x6b, 0xda, 0xde, - 0x4b, 0xec, 0xde, 0x66, 0x75, 0x7f, 0x6f, 0xcf, 0x1a, 0x91, 0x29, 0xbb, 0x50, 0x0c, 0x6a, 0xcd, - 0xd1, 0x78, 0x1b, 0xed, 0xfe, 0x44, 0xe3, 0x6d, 0xac, 0x19, 0x13, 0x0e, 0x3c, 0xa1, 0xf5, 0x22, - 0x50, 0xc9, 0x16, 0xfc, 0xcb, 0x1a, 0xe4, 0xc8, 0x91, 0x9c, 0x1c, 0x4f, 0x64, 0xb9, 0x27, 0x3a, - 0xfb, 0x58, 0xc5, 0x3a, 0x3a, 0xfb, 0x78, 0xa5, 0x28, 0x7c, 0x3c, 0x21, 0xd7, 0xb5, 0x26, 0xab, - 0xa3, 0x90, 0x99, 0x3a, 0x50, 0x52, 0xca, 0x40, 0x28, 0x81, 0x59, 0xb8, 0x02, 0x1e, 0x4d, 0x78, - 0x09, 0x35, 0x24, 0xfd, 0x12, 0x95, 0x77, 0x8e, 0x25, 0x3c, 0x2a, 0xaf, 0xc7, 0x30, 0x88, 0x40, - 0x3e, 0x3b, 0xbe, 0xf3, 0x13, 0x66, 0x17, 0xde, 0xfd, 0x0b, 0xe9, 0x08, 0xa9, 0xb3, 0x93, 0x5b, - 0xff, 0x15, 0x94, 0xd5, 0xd2, 0x0f, 0x4a, 0x50, 0x3e, 0x52, 0xa3, 0x8f, 0x66, 0x92, 0xa4, 0xca, - 0x51, 0x38, 0xb6, 0x51, 0x91, 0xa6, 0x82, 0x46, 0x04, 0x0f, 0x20, 0xcf, 0x4b, 0x40, 0x49, 0x26, - 0x0d, 0x97, 0xf1, 0x93, 0x4c, 0x1a, 0xa9, 0x1f, 0x85, 0xcf, 0xcf, 0x54, 0x22, 0xb9, 0x8a, 0x8a, - 0x6c, 0xcd, 0xa5, 0x3d, 0xc2, 0x7e, 0x9a, 0x34, 0x59, 0xb6, 0x4d, 0x93, 0xa6, 0x54, 0x08, 0xd2, - 0xa4, 0xf5, 0xb1, 0xcf, 0xe3, 0x81, 0xb8, 0x5e, 0xa3, 0x14, 0x66, 0x6a, 0x86, 0xd4, 0x8f, 0x42, - 0x49, 0xba, 0xde, 0x48, 0x81, 0x22, 0x3d, 0x1e, 0x00, 0xc8, 0x72, 0x54, 0xf4, 0xcc, 0x9a, 0xd8, - 0x29, 0x88, 0x9e, 0x59, 0x93, 0x2b, 0x5a, 0xe1, 0x18, 0x2b, 0xe5, 0xb2, 0xdb, 0x15, 0x91, 0xfc, - 0x85, 0x06, 0x28, 0x5e, 0xb0, 0x42, 0xef, 0x24, 0x73, 0x4f, 0xec, 0x3a, 0x34, 0xde, 0x7d, 0x3d, - 0xe4, 0xa4, 0x80, 0x2c, 0x55, 0xea, 0x52, 0xec, 0xd1, 0x2b, 0xa2, 0xd4, 0xe7, 0x1a, 0x54, 0x42, - 0x45, 0x2e, 0xf4, 0x66, 0x8a, 0x4f, 0x23, 0xad, 0x87, 0xc6, 0x5b, 0xc7, 0xe2, 0x25, 0x1d, 0xe6, - 0x95, 0x15, 0x20, 0x6e, 0x35, 0xbf, 0xa3, 0x41, 0x35, 0x5c, 0x0b, 0x43, 0x29, 0xbc, 0x63, 0x1d, - 0x8b, 0xc6, 0xcd, 0xe3, 0x11, 0x8f, 0x76, 0x8f, 0xbc, 0xd0, 0x0c, 0x20, 0xcf, 0x8b, 0x66, 0x49, - 0x0b, 0x3f, 0xdc, 0xe2, 0x48, 0x5a, 0xf8, 0x91, 0x8a, 0x5b, 0xc2, 0xc2, 0x77, 0x9d, 0x01, 0x56, - 0xb6, 0x19, 0xaf, 0xa5, 0xa5, 0x49, 0x3b, 0x7a, 0x9b, 0x45, 0x0a, 0x71, 0x69, 0xd2, 0xe4, 0x36, - 0x13, 0x25, 0x33, 0x94, 0xc2, 0xec, 0x98, 0x6d, 0x16, 0xad, 0xb8, 0x25, 0x6c, 0x33, 0x2a, 0x50, - 0xd9, 0x66, 0xb2, 0x94, 0x95, 0xb4, 0xcd, 0x62, 0xdd, 0x98, 0xa4, 0x6d, 0x16, 0xaf, 0x86, 0x25, - 0xf8, 0x91, 0xca, 0x0d, 0x6d, 0xb3, 0xb3, 0x09, 0xc5, 0x2e, 0xf4, 0x6e, 0x8a, 0x11, 0x13, 0x7b, - 0x3b, 0x8d, 0xdb, 0xaf, 0x89, 0x9d, 0xba, 0xc6, 0x99, 0xf9, 0xc5, 0x1a, 0xff, 0x23, 0x0d, 0xe6, - 0x92, 0xea, 0x63, 0x28, 0x45, 0x4e, 0x4a, 0x2b, 0xa8, 0xb1, 0xf8, 0xba, 0xe8, 0x47, 0x5b, 0x2b, - 0x58, 0xf5, 0x0f, 0xfb, 0x5f, 0xb4, 0x9a, 0x2f, 0xae, 0xc2, 0x15, 0x98, 0x69, 0x8d, 0xac, 0x27, - 0xf8, 0x10, 0x9d, 0x2d, 0x64, 0x1a, 0x15, 0xc2, 0xd7, 0x71, 0xad, 0xcf, 0xe8, 0x5f, 0xbd, 0x58, - 0xc8, 0xec, 0x96, 0x01, 0x02, 0x84, 0xa9, 0x7f, 0xff, 0x72, 0x5e, 0xfb, 0xaf, 0x2f, 0xe7, 0xb5, - 0xff, 0xf9, 0x72, 0x5e, 0xfb, 0xe9, 0xff, 0xcd, 0x4f, 0xbd, 0xb8, 0xd6, 0x77, 0xa8, 0x5a, 0x8b, - 0x96, 0xd3, 0x94, 0x7f, 0x89, 0x63, 0xb9, 0xa9, 0xaa, 0xba, 0x3b, 0x43, 0xff, 0x74, 0xc6, 0xf2, - 0xcf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x82, 0x9b, 0xab, 0xde, 0x11, 0x44, 0x00, 0x00, + // 4629 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3c, 0xdf, 0x6f, 0x1b, 0x47, + 0x7a, 0x5a, 0x92, 0x12, 0xc5, 0x8f, 0x3f, 0x44, 0x8f, 0x64, 0x87, 0x66, 0x6c, 0x59, 0x59, 0xc7, + 0x89, 0xe3, 0xc4, 0xa2, 0x2d, 0xd9, 0xc9, 0xd5, 0x45, 0xd2, 0xa3, 0x25, 0xc6, 0xd2, 0x59, 0x91, + 0x94, 0x15, 0xed, 0x5c, 0x5c, 0xe0, 0xd4, 0x15, 0x39, 0xa6, 0xf6, 0x44, 0xee, 0xf2, 0x76, 0x57, + 0xb4, 0x94, 0x3e, 0x5c, 0x7a, 0xed, 0xf5, 0x70, 0x2d, 0x70, 0x40, 0x53, 0xa0, 0x38, 0x14, 0xed, + 0x4b, 0x5b, 0xa0, 0x7d, 0x68, 0x8b, 0xf6, 0xa1, 0x05, 0x8a, 0x16, 0xe8, 0x43, 0xfb, 0xd0, 0x3e, + 0x14, 0x28, 0xd0, 0x7f, 0xa0, 0x4d, 0xfb, 0xd4, 0xbf, 0xe2, 0x30, 0xbf, 0x76, 0x66, 0x76, 0x97, + 0x92, 0x73, 0x52, 0x70, 0x2f, 0x31, 0x77, 0xe6, 0xfb, 0x35, 0xdf, 0xcc, 0xf7, 0x63, 0xbe, 0x6f, + 0x22, 0x28, 0xf8, 0xc3, 0xce, 0xe2, 0xd0, 0xf7, 0x42, 0x0f, 0x95, 0x70, 0xd8, 0xe9, 0x06, 0xd8, + 0x1f, 0x61, 0x7f, 0xb8, 0x57, 0x9f, 0xeb, 0x79, 0x3d, 0x8f, 0x4e, 0x34, 0xc8, 0x2f, 0x06, 0x53, + 0xaf, 0x11, 0x98, 0x86, 0x3d, 0x74, 0x1a, 0x83, 0x51, 0xa7, 0x33, 0xdc, 0x6b, 0x1c, 0x8c, 0xf8, + 0x4c, 0x3d, 0x9a, 0xb1, 0x0f, 0xc3, 0xfd, 0xe1, 0x1e, 0xfd, 0x87, 0xcf, 0x2d, 0x44, 0x73, 0x23, + 0xec, 0x07, 0x8e, 0xe7, 0x0e, 0xf7, 0xc4, 0x2f, 0x0e, 0x71, 0xa5, 0xe7, 0x79, 0xbd, 0x3e, 0x66, + 0xf8, 0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0xc0, 0x67, 0xd9, 0x3f, 0x9d, 0xdb, 0x3d, 0xec, + 0xde, 0xf6, 0x86, 0xd8, 0xb5, 0x87, 0xce, 0x68, 0xa9, 0xe1, 0x0d, 0x29, 0x4c, 0x12, 0xde, 0xfc, + 0x89, 0x01, 0x15, 0x0b, 0x07, 0x43, 0xcf, 0x0d, 0xf0, 0x1a, 0xb6, 0xbb, 0xd8, 0x47, 0x57, 0x01, + 0x3a, 0xfd, 0xc3, 0x20, 0xc4, 0xfe, 0xae, 0xd3, 0xad, 0x19, 0x0b, 0xc6, 0xcd, 0x9c, 0x55, 0xe0, + 0x23, 0xeb, 0x5d, 0xf4, 0x2a, 0x14, 0x06, 0x78, 0xb0, 0xc7, 0x66, 0x33, 0x74, 0x76, 0x9a, 0x0d, + 0xac, 0x77, 0x51, 0x1d, 0xa6, 0x7d, 0x3c, 0x72, 0x88, 0xb8, 0xb5, 0xec, 0x82, 0x71, 0x33, 0x6b, + 0x45, 0xdf, 0x04, 0xd1, 0xb7, 0x9f, 0x87, 0xbb, 0x21, 0xf6, 0x07, 0xb5, 0x1c, 0x43, 0x24, 0x03, + 0x6d, 0xec, 0x0f, 0x1e, 0xe4, 0x7f, 0xf0, 0x77, 0xb5, 0xec, 0xf2, 0xe2, 0x1d, 0xf3, 0x5f, 0x26, + 0xa1, 0x64, 0xd9, 0x6e, 0x0f, 0x5b, 0xf8, 0x7b, 0x87, 0x38, 0x08, 0x51, 0x15, 0xb2, 0x07, 0xf8, + 0x98, 0xca, 0x51, 0xb2, 0xc8, 0x4f, 0x46, 0xc8, 0xed, 0xe1, 0x5d, 0xec, 0x32, 0x09, 0x4a, 0x84, + 0x90, 0xdb, 0xc3, 0x2d, 0xb7, 0x8b, 0xe6, 0x60, 0xb2, 0xef, 0x0c, 0x9c, 0x90, 0xb3, 0x67, 0x1f, + 0x9a, 0x5c, 0xb9, 0x98, 0x5c, 0x2b, 0x00, 0x81, 0xe7, 0x87, 0xbb, 0x9e, 0xdf, 0xc5, 0x7e, 0x6d, + 0x72, 0xc1, 0xb8, 0x59, 0x59, 0x7a, 0x7d, 0x51, 0xdd, 0xe1, 0x45, 0x55, 0xa0, 0xc5, 0x1d, 0xcf, + 0x0f, 0xb7, 0x08, 0xac, 0x55, 0x08, 0xc4, 0x4f, 0xf4, 0x21, 0x14, 0x29, 0x91, 0xd0, 0xf6, 0x7b, + 0x38, 0xac, 0x4d, 0x51, 0x2a, 0x37, 0x4e, 0xa1, 0xd2, 0xa6, 0xc0, 0x16, 0x65, 0xcf, 0x7e, 0x23, + 0x13, 0x4a, 0x01, 0xf6, 0x1d, 0xbb, 0xef, 0x7c, 0x66, 0xef, 0xf5, 0x71, 0x2d, 0xbf, 0x60, 0xdc, + 0x9c, 0xb6, 0xb4, 0x31, 0xb2, 0xfe, 0x03, 0x7c, 0x1c, 0xec, 0x7a, 0x6e, 0xff, 0xb8, 0x36, 0x4d, + 0x01, 0xa6, 0xc9, 0xc0, 0x96, 0xdb, 0x3f, 0xa6, 0xbb, 0xe7, 0x1d, 0xba, 0x21, 0x9b, 0x2d, 0xd0, + 0xd9, 0x02, 0x1d, 0xa1, 0xd3, 0x77, 0xa1, 0x3a, 0x70, 0xdc, 0xdd, 0x81, 0xd7, 0xdd, 0x8d, 0x14, + 0x02, 0x44, 0x21, 0x0f, 0xf3, 0xbf, 0x43, 0x77, 0xe0, 0xae, 0x55, 0x19, 0x38, 0xee, 0x47, 0x5e, + 0xd7, 0x12, 0xfa, 0x21, 0x28, 0xf6, 0x91, 0x8e, 0x52, 0x8c, 0xa3, 0xd8, 0x47, 0x2a, 0xca, 0x7b, + 0x30, 0x4b, 0xb8, 0x74, 0x7c, 0x6c, 0x87, 0x58, 0x62, 0x95, 0x74, 0xac, 0x0b, 0x03, 0xc7, 0x5d, + 0xa1, 0x20, 0x1a, 0xa2, 0x7d, 0x94, 0x40, 0x2c, 0xc7, 0x11, 0xed, 0x23, 0x1d, 0xd1, 0x7c, 0x0f, + 0x0a, 0xd1, 0xbe, 0xa0, 0x69, 0xc8, 0x6d, 0x6e, 0x6d, 0xb6, 0xaa, 0x13, 0x08, 0x60, 0xaa, 0xb9, + 0xb3, 0xd2, 0xda, 0x5c, 0xad, 0x1a, 0xa8, 0x08, 0xf9, 0xd5, 0x16, 0xfb, 0xc8, 0xd4, 0xf3, 0x5f, + 0xf0, 0xf3, 0xf6, 0x18, 0x40, 0x6e, 0x05, 0xca, 0x43, 0xf6, 0x71, 0xeb, 0xd3, 0xea, 0x04, 0x01, + 0x7e, 0xda, 0xb2, 0x76, 0xd6, 0xb7, 0x36, 0xab, 0x06, 0xa1, 0xb2, 0x62, 0xb5, 0x9a, 0xed, 0x56, + 0x35, 0x43, 0x20, 0x3e, 0xda, 0x5a, 0xad, 0x66, 0x51, 0x01, 0x26, 0x9f, 0x36, 0x37, 0x9e, 0xb4, + 0xaa, 0xb9, 0x88, 0x98, 0x3c, 0xc5, 0x7b, 0x30, 0x4b, 0x77, 0x7b, 0x27, 0xf4, 0xb1, 0x3d, 0x10, + 0x06, 0x86, 0x1e, 0x42, 0x85, 0x9d, 0x5c, 0x9f, 0x8f, 0xd0, 0x63, 0x5d, 0x5c, 0x7a, 0x35, 0xf5, + 0xa0, 0x30, 0x10, 0xab, 0xec, 0xab, 0x9f, 0x82, 0xc7, 0x7b, 0xe6, 0x1f, 0x19, 0x50, 0xd6, 0x20, + 0xd1, 0x3d, 0x98, 0xda, 0xa7, 0x36, 0xcc, 0xc9, 0x5e, 0x89, 0x91, 0xd5, 0xec, 0xdc, 0xe2, 0xb0, + 0xc8, 0x84, 0xec, 0xc1, 0x28, 0xa8, 0x65, 0x16, 0xb2, 0x37, 0x8b, 0x4b, 0xd5, 0x45, 0xe6, 0xad, + 0x16, 0x1f, 0xe3, 0xe3, 0xa7, 0x76, 0xff, 0x10, 0x5b, 0x64, 0x12, 0x21, 0xc8, 0x0d, 0x3c, 0x1f, + 0x53, 0xa3, 0x9a, 0xb6, 0xe8, 0x6f, 0x62, 0x69, 0xf4, 0x5c, 0x71, 0x83, 0x62, 0x1f, 0x52, 0x05, + 0xff, 0x61, 0x00, 0x6c, 0x1f, 0x86, 0xe3, 0xcd, 0x78, 0x0e, 0x26, 0x47, 0x84, 0x03, 0x37, 0x61, + 0xf6, 0x41, 0xed, 0x17, 0xdb, 0x01, 0x8e, 0xec, 0x97, 0x7c, 0xa0, 0x05, 0xc8, 0x0f, 0x7d, 0x3c, + 0xda, 0x3d, 0x18, 0x51, 0x6e, 0xd3, 0xf2, 0x2c, 0x4c, 0x91, 0xf1, 0xc7, 0x23, 0x74, 0x0b, 0x4a, + 0x4e, 0xcf, 0xf5, 0x7c, 0xbc, 0xcb, 0x88, 0x4e, 0xaa, 0x60, 0x4b, 0x56, 0x91, 0x4d, 0xd2, 0x25, + 0x29, 0xb0, 0x8c, 0xd5, 0x54, 0x2a, 0xec, 0x06, 0x99, 0x93, 0xeb, 0xf9, 0xdc, 0x80, 0x22, 0x5d, + 0xcf, 0x99, 0x94, 0xbd, 0x24, 0x17, 0x92, 0xa1, 0x68, 0x09, 0x85, 0x27, 0x96, 0x26, 0x45, 0x70, + 0x01, 0xad, 0xe2, 0x3e, 0x0e, 0xf1, 0x59, 0x1c, 0xa4, 0xa2, 0xca, 0x6c, 0xaa, 0x2a, 0x25, 0xbf, + 0x3f, 0x33, 0x60, 0x56, 0x63, 0x78, 0xa6, 0xa5, 0xd7, 0x20, 0xdf, 0xa5, 0xc4, 0x98, 0x4c, 0x59, + 0x4b, 0x7c, 0xa2, 0x7b, 0x30, 0xcd, 0x45, 0x0a, 0x6a, 0xd9, 0xf4, 0x63, 0x28, 0xa5, 0xcc, 0x33, + 0x29, 0x03, 0x29, 0xe6, 0x3f, 0x66, 0xa0, 0xc0, 0x95, 0xb1, 0x35, 0x44, 0x4d, 0x28, 0xfb, 0xec, + 0x63, 0x97, 0xae, 0x99, 0xcb, 0x58, 0x1f, 0xef, 0x8b, 0xd7, 0x26, 0xac, 0x12, 0x47, 0xa1, 0xc3, + 0xe8, 0x97, 0xa1, 0x28, 0x48, 0x0c, 0x0f, 0x43, 0xbe, 0x51, 0x35, 0x9d, 0x80, 0x3c, 0xda, 0x6b, + 0x13, 0x16, 0x70, 0xf0, 0xed, 0xc3, 0x10, 0xb5, 0x61, 0x4e, 0x20, 0xb3, 0xf5, 0x71, 0x31, 0xb2, + 0x94, 0xca, 0x82, 0x4e, 0x25, 0xb9, 0x9d, 0x6b, 0x13, 0x16, 0xe2, 0xf8, 0xca, 0x24, 0x5a, 0x95, + 0x22, 0x85, 0x47, 0x2c, 0x86, 0x25, 0x44, 0x6a, 0x1f, 0xb9, 0x9c, 0x88, 0xd0, 0xd6, 0xb2, 0x22, + 0x5b, 0xfb, 0xc8, 0x8d, 0x54, 0xf6, 0xb0, 0x00, 0x79, 0x3e, 0x6c, 0xfe, 0x7b, 0x06, 0x40, 0xec, + 0xd8, 0xd6, 0x10, 0xad, 0x42, 0x45, 0x38, 0x27, 0x4d, 0x7f, 0x27, 0xb9, 0xa8, 0xb5, 0x09, 0xab, + 0x2c, 0x90, 0x98, 0xb8, 0x1f, 0x40, 0x29, 0xa2, 0x22, 0x55, 0x78, 0x39, 0x45, 0x85, 0x11, 0x85, + 0xa2, 0x40, 0x20, 0x4a, 0xfc, 0x04, 0x2e, 0x46, 0xf8, 0x29, 0x5a, 0x7c, 0xed, 0x04, 0x2d, 0x46, + 0x04, 0x67, 0x05, 0x05, 0x55, 0x8f, 0x8f, 0x14, 0xc1, 0xa4, 0x22, 0x2f, 0xa7, 0x28, 0x92, 0x01, + 0xa9, 0x9a, 0x8c, 0x24, 0xd4, 0x54, 0x09, 0x24, 0xb5, 0x60, 0xe3, 0xe6, 0x5f, 0xe4, 0x20, 0xbf, + 0xe2, 0x0d, 0x86, 0xb6, 0x4f, 0x0e, 0xd1, 0x94, 0x8f, 0x83, 0xc3, 0x7e, 0x48, 0x15, 0x58, 0x59, + 0xba, 0xae, 0xf3, 0xe0, 0x60, 0xe2, 0x5f, 0x8b, 0x82, 0x5a, 0x1c, 0x85, 0x20, 0xf3, 0x4c, 0x22, + 0xf3, 0x12, 0xc8, 0x3c, 0x8f, 0xe0, 0x28, 0xc2, 0x21, 0x64, 0xa5, 0x43, 0xa8, 0x43, 0x9e, 0x27, + 0x91, 0xcc, 0x59, 0xaf, 0x4d, 0x58, 0x62, 0x00, 0xbd, 0x05, 0x33, 0xf1, 0x70, 0x3b, 0xc9, 0x61, + 0x2a, 0x1d, 0x3d, 0x3a, 0x5f, 0x87, 0x92, 0x96, 0x05, 0x4c, 0x71, 0xb8, 0xe2, 0x40, 0x89, 0xfd, + 0x97, 0x84, 0x5b, 0x27, 0xa9, 0x4b, 0x69, 0x6d, 0x42, 0x38, 0xf6, 0x6b, 0xc2, 0xb1, 0x4f, 0xab, + 0xc1, 0x9c, 0xe8, 0x95, 0xfb, 0xf8, 0xd7, 0x55, 0xaf, 0xf5, 0x4d, 0x82, 0x1c, 0x01, 0x49, 0xf7, + 0x65, 0x5a, 0x50, 0xd6, 0x54, 0x46, 0xe2, 0x70, 0xeb, 0xe3, 0x27, 0xcd, 0x0d, 0x16, 0xb4, 0x1f, + 0xd1, 0x38, 0x6d, 0x55, 0x0d, 0x92, 0x04, 0x6c, 0xb4, 0x76, 0x76, 0xaa, 0x19, 0x74, 0x09, 0x0a, + 0x9b, 0x5b, 0xed, 0x5d, 0x06, 0x95, 0xad, 0xe7, 0xff, 0x90, 0x79, 0x12, 0x99, 0x03, 0x7c, 0x1a, + 0xd1, 0xe4, 0x69, 0x80, 0x12, 0xfd, 0x27, 0x94, 0xe8, 0x6f, 0x88, 0xe8, 0x9f, 0x91, 0xd1, 0x3f, + 0x8b, 0x10, 0x4c, 0x6e, 0xb4, 0x9a, 0x3b, 0x34, 0x11, 0x60, 0xa4, 0x97, 0x93, 0x19, 0xc1, 0xc3, + 0x0a, 0x94, 0xd8, 0xf6, 0xec, 0x1e, 0xba, 0x24, 0x61, 0xf9, 0x4b, 0x03, 0x40, 0x1a, 0x2c, 0x6a, + 0x40, 0xbe, 0xc3, 0x44, 0xa8, 0x19, 0xd4, 0x03, 0x5e, 0x4c, 0xdd, 0x71, 0x4b, 0x40, 0xa1, 0xbb, + 0x90, 0x0f, 0x0e, 0x3b, 0x1d, 0x1c, 0x88, 0xc8, 0xfd, 0x4a, 0xdc, 0x09, 0x73, 0x87, 0x68, 0x09, + 0x38, 0x82, 0xf2, 0xdc, 0x76, 0xfa, 0x87, 0x34, 0x8e, 0x9f, 0x8c, 0xc2, 0xe1, 0xa4, 0x8f, 0xfd, + 0x13, 0x03, 0x8a, 0x8a, 0x59, 0xfc, 0x9c, 0x21, 0xe0, 0x0a, 0x14, 0xa8, 0x30, 0xb8, 0xcb, 0x83, + 0xc0, 0xb4, 0x25, 0x07, 0xd0, 0xbb, 0x50, 0x10, 0x96, 0x24, 0xe2, 0x40, 0x2d, 0x9d, 0xec, 0xd6, + 0xd0, 0x92, 0xa0, 0x52, 0xc8, 0x36, 0x5c, 0xa0, 0x7a, 0xea, 0x90, 0x1b, 0x8e, 0xd0, 0xac, 0x9a, + 0xfa, 0x1b, 0xb1, 0xd4, 0xbf, 0x0e, 0xd3, 0xc3, 0xfd, 0xe3, 0xc0, 0xe9, 0xd8, 0x7d, 0x2e, 0x4e, + 0xf4, 0x2d, 0xa9, 0xee, 0x00, 0x52, 0xa9, 0x9e, 0x45, 0x01, 0x92, 0xe8, 0x25, 0x28, 0xae, 0xd9, + 0xc1, 0x3e, 0x17, 0x52, 0x8e, 0xdf, 0x83, 0x32, 0x19, 0x7f, 0xfc, 0xf4, 0x25, 0xc4, 0x17, 0x58, + 0xcb, 0xe6, 0x3f, 0x19, 0x50, 0x11, 0x68, 0x67, 0xda, 0x20, 0x04, 0xb9, 0x7d, 0x3b, 0xd8, 0xa7, + 0xca, 0x28, 0x5b, 0xf4, 0x37, 0x7a, 0x0b, 0xaa, 0x1d, 0xb6, 0xfe, 0xdd, 0xd8, 0xdd, 0x6e, 0x86, + 0x8f, 0x47, 0xb6, 0xff, 0x0e, 0x94, 0x09, 0xca, 0xae, 0x7e, 0xd7, 0x12, 0x66, 0xfc, 0xae, 0x55, + 0xda, 0xa7, 0x6b, 0x8e, 0x8b, 0x6f, 0x43, 0x89, 0x29, 0xe3, 0xbc, 0x65, 0x97, 0x7a, 0xad, 0xc3, + 0xcc, 0x8e, 0x6b, 0x0f, 0x83, 0x7d, 0x2f, 0x8c, 0xe9, 0x7c, 0xd9, 0xfc, 0x5b, 0x03, 0xaa, 0x72, + 0xf2, 0x4c, 0x32, 0xbc, 0x09, 0x33, 0x3e, 0x1e, 0xd8, 0x8e, 0xeb, 0xb8, 0xbd, 0xdd, 0xbd, 0xe3, + 0x10, 0x07, 0xfc, 0x8a, 0x5c, 0x89, 0x86, 0x1f, 0x92, 0x51, 0x22, 0xec, 0x5e, 0xdf, 0xdb, 0xe3, + 0x4e, 0x9a, 0xfe, 0x46, 0xaf, 0xe9, 0x5e, 0xba, 0x20, 0xf5, 0x26, 0xc6, 0xa5, 0xcc, 0x3f, 0xcd, + 0x40, 0xe9, 0x13, 0x3b, 0xec, 0x88, 0x13, 0x84, 0xd6, 0xa1, 0x12, 0xb9, 0x71, 0x3a, 0xc2, 0xe5, + 0x8e, 0x25, 0x1c, 0x14, 0x47, 0xdc, 0x9d, 0x44, 0xc2, 0x51, 0xee, 0xa8, 0x03, 0x94, 0x94, 0xed, + 0x76, 0x70, 0x3f, 0x22, 0x95, 0x19, 0x4f, 0x8a, 0x02, 0xaa, 0xa4, 0xd4, 0x01, 0xf4, 0x6d, 0xa8, + 0x0e, 0x7d, 0xaf, 0xe7, 0xe3, 0x20, 0x88, 0x88, 0xb1, 0x10, 0x6e, 0xa6, 0x10, 0xdb, 0xe6, 0xa0, + 0xb1, 0x2c, 0xe6, 0xde, 0xda, 0x84, 0x35, 0x33, 0xd4, 0xe7, 0xa4, 0x63, 0x9d, 0x91, 0xf9, 0x1e, + 0xf3, 0xac, 0x3f, 0xca, 0x02, 0x4a, 0x2e, 0xf3, 0xab, 0xa6, 0xc9, 0x37, 0xa0, 0x12, 0x84, 0xb6, + 0x9f, 0x38, 0xf3, 0x65, 0x3a, 0x1a, 0x9d, 0xf8, 0x37, 0x21, 0x92, 0x6c, 0xd7, 0xf5, 0x42, 0xe7, + 0xf9, 0x31, 0xbb, 0xa0, 0x58, 0x15, 0x31, 0xbc, 0x49, 0x47, 0xd1, 0x26, 0xe4, 0x9f, 0x3b, 0xfd, + 0x10, 0xfb, 0x41, 0x6d, 0x72, 0x21, 0x7b, 0xb3, 0xb2, 0xf4, 0xf6, 0x69, 0x1b, 0xb3, 0xf8, 0x21, + 0x85, 0x6f, 0x1f, 0x0f, 0xd5, 0xec, 0x97, 0x13, 0x51, 0xd3, 0xf8, 0xa9, 0xf4, 0x1b, 0x91, 0x09, + 0xd3, 0x2f, 0x08, 0xd1, 0x5d, 0xa7, 0x4b, 0x63, 0x71, 0x64, 0x87, 0xf7, 0xac, 0x3c, 0x9d, 0x58, + 0xef, 0xa2, 0xeb, 0x30, 0xfd, 0xdc, 0xb7, 0x7b, 0x03, 0xec, 0x86, 0xac, 0x92, 0x20, 0x61, 0xa2, + 0x09, 0x73, 0x11, 0x40, 0x8a, 0x42, 0x22, 0xdf, 0xe6, 0xd6, 0xf6, 0x93, 0x76, 0x75, 0x02, 0x95, + 0x60, 0x7a, 0x73, 0x6b, 0xb5, 0xb5, 0xd1, 0x22, 0xb1, 0x51, 0xc4, 0xbc, 0xbb, 0xd2, 0xe8, 0x9a, + 0x62, 0x23, 0xb4, 0x33, 0xa1, 0xca, 0x65, 0xe8, 0x17, 0x7b, 0x21, 0x97, 0x20, 0x71, 0xd7, 0xbc, + 0x06, 0x73, 0x69, 0x47, 0x43, 0x00, 0xdc, 0x33, 0xff, 0x35, 0x03, 0x65, 0x6e, 0x08, 0x67, 0xb2, + 0xdc, 0xcb, 0x8a, 0x54, 0xfc, 0x7a, 0x22, 0x94, 0x54, 0x83, 0x3c, 0x33, 0x90, 0x2e, 0xbf, 0xff, + 0x8a, 0x4f, 0xe2, 0x9c, 0xd9, 0x79, 0xc7, 0x5d, 0xbe, 0xed, 0xd1, 0x77, 0xaa, 0xdb, 0x9c, 0x1c, + 0xeb, 0x36, 0x23, 0x83, 0xb3, 0x03, 0x9e, 0x58, 0x15, 0xe4, 0x56, 0x94, 0x84, 0x51, 0x91, 0x49, + 0x6d, 0xcf, 0xf2, 0x63, 0xf6, 0x0c, 0xdd, 0x80, 0x29, 0x3c, 0xc2, 0x6e, 0x18, 0xd4, 0x8a, 0x34, + 0x90, 0x96, 0xc5, 0x85, 0xaa, 0x45, 0x46, 0x2d, 0x3e, 0x29, 0xb7, 0xea, 0x03, 0xb8, 0x40, 0xef, + 0xbb, 0x8f, 0x7c, 0xdb, 0x55, 0xef, 0xec, 0xed, 0xf6, 0x06, 0x0f, 0x3b, 0xe4, 0x27, 0xaa, 0x40, + 0x66, 0x7d, 0x95, 0xeb, 0x27, 0xb3, 0xbe, 0x2a, 0xf1, 0x7f, 0xd7, 0x00, 0xa4, 0x12, 0x38, 0xd3, + 0x5e, 0xc4, 0xb8, 0x08, 0x39, 0xb2, 0x52, 0x8e, 0x39, 0x98, 0xc4, 0xbe, 0xef, 0xf9, 0xcc, 0x51, + 0x5a, 0xec, 0x43, 0x4a, 0x73, 0x9b, 0x0b, 0x63, 0xe1, 0x91, 0x77, 0x10, 0x79, 0x00, 0x46, 0xd6, + 0x48, 0x0a, 0xdf, 0x86, 0x59, 0x0d, 0xfc, 0x7c, 0x42, 0xfc, 0x16, 0xcc, 0x50, 0xaa, 0x2b, 0xfb, + 0xb8, 0x73, 0x30, 0xf4, 0x1c, 0x37, 0x21, 0x01, 0xba, 0x4e, 0x7c, 0x97, 0x08, 0x17, 0x64, 0x89, + 0x6c, 0xcd, 0xa5, 0x68, 0xb0, 0xdd, 0xde, 0x90, 0x47, 0x7d, 0x0f, 0x2e, 0xc5, 0x08, 0x8a, 0x95, + 0xfd, 0x0a, 0x14, 0x3b, 0xd1, 0x60, 0xc0, 0x33, 0xc8, 0xab, 0xba, 0xb8, 0x71, 0x54, 0x15, 0x43, + 0xf2, 0xf8, 0x36, 0xbc, 0x92, 0xe0, 0x71, 0x1e, 0xea, 0xb8, 0x67, 0xde, 0x81, 0x8b, 0x94, 0xf2, + 0x63, 0x8c, 0x87, 0xcd, 0xbe, 0x33, 0x3a, 0x7d, 0x5b, 0x8e, 0xf9, 0x7a, 0x15, 0x8c, 0xaf, 0xf7, + 0x58, 0x49, 0xd6, 0x2d, 0xce, 0xba, 0xed, 0x0c, 0x70, 0xdb, 0xdb, 0x18, 0x2f, 0x2d, 0x09, 0xe4, + 0x07, 0xf8, 0x38, 0xe0, 0xe9, 0x23, 0xfd, 0x2d, 0xbd, 0xd7, 0x5f, 0x1b, 0x5c, 0x9d, 0x2a, 0x9d, + 0xaf, 0xd9, 0x34, 0xe6, 0x01, 0x7a, 0xc4, 0x06, 0x71, 0x97, 0x4c, 0xb0, 0xda, 0x9c, 0x32, 0x12, + 0x09, 0x4c, 0xa2, 0x50, 0x29, 0x2e, 0xf0, 0x55, 0x6e, 0x38, 0xf4, 0x3f, 0x41, 0x22, 0x53, 0x7a, + 0x03, 0x8a, 0x74, 0x66, 0x27, 0xb4, 0xc3, 0xc3, 0x60, 0xdc, 0xce, 0x2d, 0x9b, 0x3f, 0x32, 0xb8, + 0x45, 0x09, 0x3a, 0x67, 0x5a, 0xf3, 0x5d, 0x98, 0xa2, 0x37, 0x44, 0x71, 0xd3, 0xb9, 0x9c, 0x72, + 0xb0, 0x99, 0x44, 0x16, 0x07, 0x54, 0xf2, 0x24, 0x03, 0xa6, 0x3e, 0xa2, 0xdd, 0x09, 0x45, 0xda, + 0x9c, 0xd8, 0x39, 0xd7, 0x1e, 0xb0, 0xf2, 0x63, 0xc1, 0xa2, 0xbf, 0xe9, 0x85, 0x00, 0x63, 0xff, + 0x89, 0xb5, 0xc1, 0x6e, 0x20, 0x05, 0x2b, 0xfa, 0x26, 0x8a, 0xed, 0xf4, 0x1d, 0xec, 0x86, 0x74, + 0x36, 0x47, 0x67, 0x95, 0x11, 0x74, 0x03, 0x0a, 0x4e, 0xb0, 0x81, 0x6d, 0xdf, 0xe5, 0x6d, 0x04, + 0xc5, 0x31, 0xcb, 0x19, 0x79, 0xc6, 0xbe, 0x03, 0x55, 0x26, 0x59, 0xb3, 0xdb, 0x55, 0xb2, 0xfd, + 0x88, 0xbf, 0x11, 0xe3, 0xaf, 0xd1, 0xcf, 0x9c, 0x4e, 0xff, 0x6f, 0x0c, 0xb8, 0xa0, 0x30, 0x38, + 0xd3, 0x16, 0xbc, 0x03, 0x53, 0xac, 0xc7, 0xc3, 0x53, 0xc1, 0x39, 0x1d, 0x8b, 0xb1, 0xb1, 0x38, + 0x0c, 0x5a, 0x84, 0x3c, 0xfb, 0x25, 0xae, 0x71, 0xe9, 0xe0, 0x02, 0x48, 0x8a, 0xbc, 0x08, 0xb3, + 0x7c, 0x0e, 0x0f, 0xbc, 0x34, 0x9b, 0xcb, 0xe9, 0x1e, 0xe2, 0x87, 0x06, 0xcc, 0xe9, 0x08, 0x67, + 0x5a, 0xa5, 0x22, 0x77, 0xe6, 0x2b, 0xc9, 0xfd, 0x2d, 0x21, 0xf7, 0x93, 0x61, 0x57, 0x49, 0x39, + 0xe3, 0x27, 0x4e, 0xdd, 0xdd, 0x8c, 0xbe, 0xbb, 0x92, 0xd6, 0x4f, 0xa2, 0x35, 0x09, 0x62, 0x67, + 0x5a, 0xd3, 0x7b, 0x2f, 0xb5, 0x26, 0x25, 0x05, 0x4b, 0x2c, 0x6e, 0x5d, 0x1c, 0xa3, 0x0d, 0x27, + 0x88, 0x22, 0xce, 0xdb, 0x50, 0xea, 0x3b, 0x2e, 0xb6, 0x7d, 0xde, 0xa7, 0x32, 0xd4, 0xf3, 0x78, + 0xdf, 0xd2, 0x26, 0x25, 0xa9, 0xdf, 0x34, 0x00, 0xa9, 0xb4, 0x7e, 0x31, 0xbb, 0xd5, 0x10, 0x0a, + 0xde, 0xf6, 0xbd, 0x81, 0x17, 0x9e, 0x76, 0xcc, 0xee, 0x99, 0xbf, 0x6d, 0xc0, 0xc5, 0x18, 0xc6, + 0x2f, 0x42, 0xf2, 0x7b, 0xe6, 0x15, 0xb8, 0xb0, 0x8a, 0x45, 0x8e, 0x97, 0xa8, 0x1d, 0xec, 0x00, + 0x52, 0x67, 0xcf, 0x27, 0x8b, 0xf9, 0x06, 0x5c, 0xf8, 0xc8, 0x1b, 0x11, 0x47, 0x4e, 0xa6, 0xa5, + 0x9b, 0x62, 0xc5, 0xac, 0x48, 0x5f, 0xd1, 0xb7, 0x74, 0xbd, 0x3b, 0x80, 0x54, 0xcc, 0xf3, 0x10, + 0x67, 0xd9, 0xfc, 0x1f, 0x03, 0x4a, 0xcd, 0xbe, 0xed, 0x0f, 0x84, 0x28, 0x1f, 0xc0, 0x14, 0xab, + 0xcc, 0xf0, 0x32, 0xeb, 0x1b, 0x3a, 0x3d, 0x15, 0x96, 0x7d, 0x34, 0x59, 0x1d, 0x87, 0x63, 0x91, + 0xa5, 0xf0, 0xee, 0xf5, 0x6a, 0xac, 0x9b, 0xbd, 0x8a, 0x6e, 0xc3, 0xa4, 0x4d, 0x50, 0x68, 0x78, + 0xad, 0xc4, 0xcb, 0x65, 0x94, 0x1a, 0xb9, 0x12, 0x59, 0x0c, 0xca, 0x7c, 0x1f, 0x8a, 0x0a, 0x07, + 0x94, 0x87, 0xec, 0xa3, 0x16, 0xbf, 0x26, 0x35, 0x57, 0xda, 0xeb, 0x4f, 0x59, 0x09, 0xb1, 0x02, + 0xb0, 0xda, 0x8a, 0xbe, 0x33, 0x29, 0xcd, 0x43, 0x9b, 0xd3, 0xe1, 0x71, 0x4b, 0x95, 0xd0, 0x18, + 0x27, 0x61, 0xe6, 0x65, 0x24, 0x94, 0x2c, 0x7e, 0xc3, 0x80, 0x32, 0x57, 0xcd, 0x59, 0x43, 0x33, + 0xa5, 0x3c, 0x26, 0x34, 0x2b, 0xcb, 0xb0, 0x38, 0xa0, 0x94, 0xe1, 0x9f, 0x0d, 0xa8, 0xae, 0x7a, + 0x2f, 0xdc, 0x9e, 0x6f, 0x77, 0x23, 0x1b, 0xfc, 0x30, 0xb6, 0x9d, 0x8b, 0xb1, 0x4a, 0x7f, 0x0c, + 0x5e, 0x0e, 0xc4, 0xb6, 0xb5, 0x26, 0x6b, 0x29, 0x2c, 0xbe, 0x8b, 0x4f, 0xf3, 0x9b, 0x30, 0x13, + 0x43, 0x22, 0x1b, 0xf4, 0xb4, 0xb9, 0xb1, 0xbe, 0x4a, 0x36, 0x84, 0xd6, 0x7b, 0x5b, 0x9b, 0xcd, + 0x87, 0x1b, 0x2d, 0xde, 0xf9, 0x6d, 0x6e, 0xae, 0xb4, 0x36, 0xe4, 0x46, 0xdd, 0x17, 0x2b, 0xb8, + 0x6f, 0xf6, 0xe1, 0x82, 0x22, 0xd0, 0x59, 0x9b, 0x63, 0xe9, 0xf2, 0x4a, 0x6e, 0xdf, 0x80, 0x57, + 0x23, 0x6e, 0x4f, 0xd9, 0x64, 0x1b, 0x07, 0xea, 0x65, 0x6d, 0xc4, 0x99, 0x16, 0x2c, 0xf2, 0x53, + 0x60, 0xbe, 0x6b, 0xd6, 0xa0, 0xcc, 0xf3, 0xa3, 0xb8, 0xcb, 0xf8, 0xd3, 0x1c, 0x54, 0xc4, 0xd4, + 0xd7, 0x23, 0x3f, 0xba, 0x04, 0x53, 0xdd, 0xbd, 0x1d, 0xe7, 0x33, 0xd1, 0xd1, 0xe5, 0x5f, 0x64, + 0xbc, 0xcf, 0xf8, 0xb0, 0xb7, 0x20, 0xfc, 0x0b, 0x5d, 0x61, 0xcf, 0x44, 0xd6, 0xdd, 0x2e, 0x3e, + 0xa2, 0x69, 0x54, 0xce, 0x92, 0x03, 0xb4, 0x1c, 0xca, 0xdf, 0x8c, 0xd0, 0x5b, 0xb2, 0xf2, 0x86, + 0x04, 0x2d, 0x43, 0x95, 0xfc, 0x6e, 0x0e, 0x87, 0x7d, 0x07, 0x77, 0x19, 0x01, 0x72, 0x41, 0xce, + 0xc9, 0x3c, 0x29, 0x01, 0x80, 0xae, 0xc1, 0x14, 0xbd, 0x3c, 0x06, 0xb5, 0x69, 0x12, 0x91, 0x25, + 0x28, 0x1f, 0x46, 0x6f, 0x41, 0x91, 0x49, 0xbc, 0xee, 0x3e, 0x09, 0x30, 0x7d, 0x51, 0xa1, 0x54, + 0x52, 0xd4, 0x39, 0x3d, 0x43, 0x83, 0x71, 0x19, 0x1a, 0x6a, 0x40, 0x25, 0x08, 0x3d, 0xdf, 0xee, + 0x89, 0x6d, 0xa4, 0xcf, 0x29, 0x94, 0x72, 0x5f, 0x6c, 0x5a, 0x8a, 0xf0, 0xf1, 0xa1, 0x17, 0xda, + 0xfa, 0x33, 0x8a, 0x77, 0x2d, 0x75, 0x0e, 0x7d, 0x0b, 0xca, 0x5d, 0x71, 0x48, 0xd6, 0xdd, 0xe7, + 0x1e, 0x7d, 0x3a, 0x91, 0xe8, 0xde, 0xad, 0xaa, 0x20, 0x92, 0x92, 0x8e, 0xaa, 0xde, 0x64, 0xcb, + 0x1a, 0x06, 0xd9, 0x6d, 0xec, 0x92, 0xd0, 0xce, 0x2a, 0x38, 0xd3, 0x96, 0xf8, 0x44, 0xaf, 0x43, + 0x99, 0x45, 0x82, 0xa7, 0xda, 0x69, 0xd0, 0x07, 0x49, 0x1c, 0x6b, 0x1e, 0x86, 0xfb, 0x2d, 0x8a, + 0x94, 0x38, 0x94, 0x57, 0x01, 0x91, 0xd9, 0x55, 0x27, 0x48, 0x9d, 0xe6, 0xc8, 0xa9, 0x27, 0xfa, + 0xbe, 0xb9, 0x09, 0xb3, 0x64, 0x16, 0xbb, 0xa1, 0xd3, 0x51, 0x52, 0x31, 0x91, 0xec, 0x1b, 0xb1, + 0x64, 0xdf, 0x0e, 0x82, 0x17, 0x9e, 0xdf, 0xe5, 0x62, 0x46, 0xdf, 0x92, 0xdb, 0x3f, 0x18, 0x4c, + 0x9a, 0x27, 0x81, 0x96, 0xa8, 0x7f, 0x45, 0x7a, 0xe8, 0x97, 0x20, 0xcf, 0x1f, 0x61, 0xf1, 0xfa, + 0xe7, 0xa5, 0x45, 0xf6, 0xf8, 0x6b, 0x91, 0x13, 0xde, 0x62, 0xb3, 0x4a, 0x8d, 0x8e, 0xc3, 0x93, + 0xe3, 0xb2, 0x6f, 0x07, 0xfb, 0xb8, 0xbb, 0x2d, 0x88, 0x6b, 0xd5, 0xe1, 0xfb, 0x56, 0x6c, 0x5a, + 0xca, 0x7e, 0x57, 0x8a, 0xfe, 0x08, 0x87, 0x27, 0x88, 0xae, 0xf6, 0x1f, 0x2e, 0x0a, 0x14, 0xde, + 0x36, 0x7d, 0x19, 0xac, 0x1f, 0x1b, 0x70, 0x55, 0xa0, 0xad, 0xec, 0xdb, 0x6e, 0x0f, 0x0b, 0x61, + 0x7e, 0x5e, 0x7d, 0x25, 0x17, 0x9d, 0x7d, 0xc9, 0x45, 0x3f, 0x86, 0x5a, 0xb4, 0x68, 0x5a, 0x8b, + 0xf2, 0xfa, 0xea, 0x22, 0x0e, 0x83, 0xc8, 0x49, 0xd2, 0xdf, 0x64, 0xcc, 0xf7, 0xfa, 0xd1, 0x35, + 0x90, 0xfc, 0x96, 0xc4, 0x36, 0xe0, 0xb2, 0x20, 0xc6, 0x8b, 0x43, 0x3a, 0xb5, 0xc4, 0x9a, 0x4e, + 0xa4, 0xc6, 0xf7, 0x83, 0xd0, 0x38, 0xf9, 0x28, 0xa5, 0xa2, 0xe8, 0x5b, 0x48, 0xb9, 0x18, 0x69, + 0x5c, 0xe6, 0x99, 0x05, 0x10, 0x99, 0x95, 0x8c, 0x3d, 0x31, 0x4f, 0x48, 0xa6, 0xce, 0xf3, 0x23, + 0x40, 0xe6, 0x13, 0x47, 0x60, 0x3c, 0x57, 0x0c, 0xf3, 0x91, 0xa0, 0x44, 0xed, 0xdb, 0xd8, 0x1f, + 0x38, 0x41, 0xa0, 0x34, 0xe2, 0xd2, 0xd4, 0xf5, 0x06, 0xe4, 0x86, 0x98, 0xa7, 0x2f, 0xc5, 0x25, + 0x24, 0x6c, 0x42, 0x41, 0xa6, 0xf3, 0x92, 0xcd, 0x00, 0xae, 0x09, 0x36, 0x6c, 0x43, 0x52, 0xf9, + 0xc4, 0xc5, 0x14, 0xc5, 0xff, 0xcc, 0x98, 0xe2, 0x7f, 0x56, 0x2f, 0xfe, 0x6b, 0x29, 0xb5, 0xea, + 0xa8, 0xce, 0x27, 0xa5, 0x6e, 0xb3, 0x0d, 0x88, 0xfc, 0xdb, 0xf9, 0x50, 0xfd, 0x3d, 0xee, 0xa8, + 0xce, 0x2b, 0x9c, 0x0b, 0x07, 0x9f, 0xd1, 0x1d, 0xbc, 0x09, 0x25, 0xb2, 0x49, 0x96, 0xda, 0x15, + 0xc9, 0x59, 0xda, 0x98, 0x74, 0xc6, 0x07, 0x30, 0xa7, 0x3b, 0xe3, 0x33, 0x09, 0x35, 0x07, 0x93, + 0xa1, 0x77, 0x80, 0x45, 0x4c, 0x61, 0x1f, 0x09, 0xb5, 0x46, 0x8e, 0xfa, 0x7c, 0xd4, 0xfa, 0x5d, + 0x49, 0x95, 0x1a, 0xe0, 0x59, 0x57, 0x40, 0x8e, 0xa3, 0xb8, 0xfd, 0xb3, 0x0f, 0xc9, 0xeb, 0x13, + 0xb8, 0x14, 0x77, 0xbe, 0xe7, 0xb3, 0x88, 0x5d, 0x66, 0x9c, 0x69, 0xee, 0xf9, 0x7c, 0x18, 0x3c, + 0x93, 0x7e, 0x52, 0x71, 0xba, 0xe7, 0x43, 0xfb, 0x57, 0xa1, 0x9e, 0xe6, 0x83, 0xcf, 0xd5, 0x16, + 0x23, 0x97, 0x7c, 0x3e, 0x54, 0x7f, 0x68, 0x48, 0xb2, 0xea, 0xa9, 0x79, 0xff, 0xab, 0x90, 0x15, + 0xb1, 0xee, 0x4e, 0x74, 0x7c, 0x1a, 0x91, 0xb7, 0xcc, 0xa6, 0x7b, 0x4b, 0x89, 0x42, 0x01, 0x85, + 0xfd, 0x49, 0x57, 0xff, 0x75, 0x9e, 0x5e, 0xce, 0x4c, 0xc6, 0x9d, 0xb3, 0x32, 0x23, 0xe1, 0x39, + 0x62, 0x46, 0x3f, 0x12, 0xa6, 0xa2, 0x06, 0xa9, 0xf3, 0xd9, 0xba, 0x5f, 0x93, 0x01, 0x26, 0x11, + 0xc7, 0xce, 0x87, 0x83, 0x0d, 0x0b, 0xe3, 0x43, 0xd8, 0xb9, 0xb0, 0xb8, 0xd5, 0x84, 0x42, 0x74, + 0xf7, 0x57, 0x5e, 0x43, 0x17, 0x21, 0xbf, 0xb9, 0xb5, 0xb3, 0xdd, 0x5c, 0x21, 0x57, 0xdb, 0x39, + 0xc8, 0xaf, 0x6c, 0x59, 0xd6, 0x93, 0xed, 0x36, 0xb9, 0xdb, 0xc6, 0x1f, 0x2e, 0x2d, 0xfd, 0x7d, + 0x0e, 0x32, 0x8f, 0x9f, 0xa2, 0x4f, 0x61, 0x92, 0x3d, 0x9c, 0x3b, 0xe1, 0xfd, 0x64, 0xfd, 0xa4, + 0xb7, 0x81, 0xe6, 0x2b, 0x3f, 0xf8, 0xaf, 0xff, 0xfb, 0xfd, 0xcc, 0x05, 0xb3, 0xd4, 0x18, 0x2d, + 0x37, 0x0e, 0x46, 0x0d, 0x1a, 0x64, 0x1f, 0x18, 0xb7, 0xd0, 0x36, 0x14, 0x95, 0x37, 0xd2, 0x27, + 0x32, 0x78, 0x2d, 0x65, 0x4e, 0x7f, 0x5a, 0x6d, 0x4e, 0xdc, 0x31, 0xd0, 0xc7, 0x90, 0xdd, 0x3e, + 0x0c, 0xd1, 0xd8, 0x97, 0x9a, 0xf5, 0xf1, 0x0f, 0x10, 0xcd, 0x8b, 0x54, 0xcc, 0x19, 0x13, 0xb8, + 0x98, 0xc3, 0xc3, 0x90, 0x08, 0xf9, 0x3d, 0x28, 0xaa, 0xcf, 0x07, 0x4f, 0x7d, 0xbe, 0x59, 0x3f, + 0xfd, 0x69, 0xa2, 0x79, 0x95, 0xb2, 0x7a, 0xc5, 0x44, 0x9c, 0x15, 0x7b, 0xe0, 0x18, 0xe9, 0xe5, + 0x63, 0xc8, 0xb6, 0x8f, 0x5c, 0x34, 0xf6, 0x71, 0x67, 0x7d, 0xfc, 0x6b, 0xc5, 0xc4, 0x2a, 0xc2, + 0x23, 0x97, 0x90, 0xfc, 0x2e, 0x7f, 0x96, 0xd8, 0x09, 0xd1, 0xb5, 0x94, 0x77, 0x65, 0xea, 0x7b, + 0xa9, 0xfa, 0xc2, 0x78, 0x00, 0xce, 0xe4, 0x0a, 0x65, 0x72, 0xc9, 0xbc, 0xc0, 0x99, 0x74, 0x22, + 0x90, 0x07, 0xc6, 0xad, 0xa5, 0x0e, 0x4c, 0xd2, 0x7e, 0x3c, 0x7a, 0x26, 0x7e, 0xd4, 0x53, 0x5e, + 0x3a, 0x8c, 0x39, 0x3a, 0x5a, 0x27, 0xdf, 0x9c, 0xa3, 0x8c, 0x2a, 0x66, 0x81, 0x30, 0xa2, 0xdd, + 0xf8, 0x07, 0xc6, 0xad, 0x9b, 0xc6, 0x1d, 0x63, 0xe9, 0xaf, 0x26, 0x61, 0x92, 0xf6, 0x7d, 0xd0, + 0x01, 0x80, 0xec, 0x3b, 0xc7, 0x57, 0x97, 0x68, 0x69, 0xc7, 0x57, 0x97, 0x6c, 0x59, 0x9b, 0x75, + 0xca, 0x74, 0xce, 0x9c, 0x21, 0x4c, 0x69, 0x3b, 0xa9, 0x41, 0xbb, 0x67, 0x44, 0x8f, 0x3f, 0x36, + 0x78, 0x03, 0x8c, 0x19, 0x2e, 0x4a, 0xa3, 0xa6, 0xf5, 0x9c, 0xe3, 0xc7, 0x21, 0xa5, 0xcd, 0x6c, + 0xde, 0xa7, 0x0c, 0x1b, 0x66, 0x55, 0x32, 0xf4, 0x29, 0xc4, 0x03, 0xe3, 0xd6, 0xb3, 0x9a, 0x39, + 0xcb, 0xb5, 0x1c, 0x9b, 0x41, 0xdf, 0x87, 0x8a, 0xde, 0x1d, 0x45, 0xd7, 0x53, 0x78, 0xc5, 0xbb, + 0xad, 0xf5, 0xd7, 0x4f, 0x06, 0xe2, 0x32, 0xcd, 0x53, 0x99, 0x38, 0x73, 0xc6, 0xf9, 0x00, 0xe3, + 0xa1, 0x4d, 0x80, 0xf8, 0x1e, 0xa0, 0x3f, 0x36, 0x78, 0x83, 0x5b, 0x36, 0x37, 0x51, 0x1a, 0xf5, + 0x44, 0x0f, 0xb5, 0x7e, 0xe3, 0x14, 0x28, 0x2e, 0xc4, 0xfb, 0x54, 0x88, 0xf7, 0xcc, 0x39, 0x29, + 0x44, 0xe8, 0x0c, 0x70, 0xe8, 0x71, 0x29, 0x9e, 0x5d, 0x31, 0x5f, 0xd1, 0x94, 0xa3, 0xcd, 0xca, + 0xcd, 0x62, 0x4d, 0xc8, 0xd4, 0xcd, 0xd2, 0xfa, 0x9c, 0xa9, 0x9b, 0xa5, 0x77, 0x30, 0xd3, 0x36, + 0x8b, 0xb7, 0x1c, 0x53, 0x36, 0x2b, 0x9a, 0x59, 0xfa, 0xff, 0x1c, 0xe4, 0x57, 0xd8, 0xff, 0x42, + 0x85, 0x3c, 0x28, 0x44, 0x6d, 0x39, 0x34, 0x9f, 0x56, 0xf9, 0x97, 0x97, 0xc3, 0xfa, 0xb5, 0xb1, + 0xf3, 0x5c, 0xa0, 0xd7, 0xa8, 0x40, 0xaf, 0x9a, 0x97, 0x08, 0x67, 0xfe, 0x7f, 0x69, 0x35, 0x58, + 0x7d, 0xb8, 0x61, 0x77, 0xbb, 0x44, 0x11, 0xbf, 0x0e, 0x25, 0xb5, 0x49, 0x86, 0x5e, 0x4b, 0xed, + 0x36, 0xa8, 0x1d, 0xb7, 0xba, 0x79, 0x12, 0x08, 0xe7, 0xfc, 0x3a, 0xe5, 0x3c, 0x6f, 0x5e, 0x4e, + 0xe1, 0xec, 0x53, 0x50, 0x8d, 0x39, 0xeb, 0x66, 0xa5, 0x33, 0xd7, 0xda, 0x66, 0xe9, 0xcc, 0xf5, + 0x66, 0xd8, 0x89, 0xcc, 0x0f, 0x29, 0x28, 0x61, 0x1e, 0x00, 0xc8, 0x76, 0x13, 0x4a, 0xd5, 0xa5, + 0x72, 0x05, 0x8e, 0x3b, 0x87, 0x64, 0xa7, 0xca, 0x34, 0x29, 0x5b, 0x7e, 0xee, 0x62, 0x6c, 0xfb, + 0x4e, 0x10, 0x32, 0xc3, 0x2c, 0x6b, 0xcd, 0x22, 0x94, 0xba, 0x1e, 0xbd, 0xf7, 0x54, 0xbf, 0x7e, + 0x22, 0x0c, 0xe7, 0x7e, 0x83, 0x72, 0xbf, 0x66, 0xd6, 0x53, 0xb8, 0x0f, 0x19, 0x2c, 0x39, 0x6c, + 0x9f, 0xe7, 0xa1, 0xf8, 0x91, 0xed, 0xb8, 0x21, 0x76, 0x6d, 0xb7, 0x83, 0xd1, 0x1e, 0x4c, 0xd2, + 0x6c, 0x20, 0xee, 0x88, 0xd5, 0xde, 0x48, 0xdc, 0x11, 0x6b, 0xcd, 0x01, 0x73, 0x81, 0x32, 0xae, + 0x9b, 0x17, 0x09, 0xe3, 0x81, 0x24, 0xdd, 0x60, 0x6d, 0x05, 0xe3, 0x16, 0x7a, 0x0e, 0x53, 0xfc, + 0x51, 0x40, 0x8c, 0x90, 0x56, 0xa6, 0xab, 0x5f, 0x49, 0x9f, 0x4c, 0x3b, 0xcb, 0x2a, 0x9b, 0x80, + 0xc2, 0x11, 0x3e, 0x23, 0x00, 0xd9, 0xe3, 0x8a, 0xef, 0x68, 0xa2, 0x37, 0x56, 0x5f, 0x18, 0x0f, + 0x90, 0xa6, 0x53, 0x95, 0x67, 0x37, 0x82, 0x25, 0x7c, 0xbf, 0x03, 0xb9, 0x35, 0x3b, 0xd8, 0x47, + 0xb1, 0xd8, 0xab, 0xbc, 0xe1, 0xad, 0xd7, 0xd3, 0xa6, 0x38, 0x97, 0x6b, 0x94, 0xcb, 0x65, 0xe6, + 0xca, 0x54, 0x2e, 0xf4, 0x95, 0x2a, 0xd3, 0x1f, 0x7b, 0xc0, 0x1b, 0xd7, 0x9f, 0xf6, 0x1a, 0x38, + 0xae, 0x3f, 0xfd, 0xcd, 0xef, 0x78, 0xfd, 0x11, 0x2e, 0x07, 0x23, 0xc2, 0x67, 0x08, 0xd3, 0xe2, + 0xa9, 0x2b, 0x8a, 0x3d, 0x10, 0x8a, 0xbd, 0x8f, 0xad, 0xcf, 0x8f, 0x9b, 0xe6, 0xdc, 0xae, 0x53, + 0x6e, 0x57, 0xcd, 0x5a, 0x62, 0xb7, 0x38, 0xe4, 0x03, 0xe3, 0xd6, 0x1d, 0x03, 0x7d, 0x1f, 0x40, + 0xb6, 0x01, 0x13, 0x36, 0x18, 0x6f, 0x2d, 0x26, 0x6c, 0x30, 0xd1, 0x41, 0x34, 0x17, 0x29, 0xdf, + 0x9b, 0xe6, 0xf5, 0x38, 0xdf, 0xd0, 0xb7, 0xdd, 0xe0, 0x39, 0xf6, 0x6f, 0xb3, 0x4e, 0x42, 0xb0, + 0xef, 0x0c, 0xc9, 0x92, 0x7d, 0x28, 0x44, 0xd5, 0xeb, 0xb8, 0xbf, 0x8d, 0xf7, 0x93, 0xe2, 0xfe, + 0x36, 0xd1, 0xde, 0xd1, 0x1d, 0x8f, 0x76, 0x5e, 0x04, 0x28, 0x31, 0xc1, 0x3f, 0xaf, 0x42, 0x8e, + 0x24, 0xf9, 0x24, 0x3d, 0x91, 0x05, 0xa4, 0xf8, 0xea, 0x13, 0x35, 0xf0, 0xf8, 0xea, 0x93, 0xb5, + 0x27, 0x3d, 0x3d, 0x21, 0x17, 0xc0, 0x06, 0xab, 0xcc, 0x90, 0x95, 0x7a, 0x50, 0x54, 0x0a, 0x4b, + 0x28, 0x85, 0x98, 0x5e, 0x53, 0x8f, 0x07, 0xbc, 0x94, 0xaa, 0x94, 0xf9, 0x2a, 0xe5, 0x77, 0x91, + 0x05, 0x3c, 0xca, 0xaf, 0xcb, 0x20, 0x08, 0x43, 0xbe, 0x3a, 0x6e, 0xf9, 0x29, 0xab, 0xd3, 0xad, + 0x7f, 0x61, 0x3c, 0xc0, 0xd8, 0xd5, 0x49, 0xd3, 0x7f, 0x01, 0x25, 0xb5, 0x98, 0x84, 0x52, 0x84, + 0x8f, 0x55, 0xfd, 0xe3, 0x91, 0x24, 0xad, 0x16, 0xa5, 0xfb, 0x36, 0xca, 0xd2, 0x56, 0xc0, 0x08, + 0xe3, 0x3e, 0xe4, 0x79, 0x51, 0x29, 0x4d, 0xa5, 0x7a, 0x63, 0x20, 0x4d, 0xa5, 0xb1, 0x8a, 0x94, + 0x9e, 0x3f, 0x53, 0x8e, 0xe4, 0x72, 0x2b, 0xa2, 0x35, 0xe7, 0xf6, 0x08, 0x87, 0xe3, 0xb8, 0xc9, + 0x42, 0xf0, 0x38, 0x6e, 0x4a, 0xcd, 0x61, 0x1c, 0xb7, 0x1e, 0x0e, 0xb9, 0x3f, 0x10, 0x17, 0x76, + 0x34, 0x86, 0x98, 0x1a, 0x21, 0xcd, 0x93, 0x40, 0xd2, 0xae, 0x37, 0x92, 0xa1, 0x08, 0x8f, 0x47, + 0x00, 0xb2, 0xc0, 0x15, 0xcf, 0x59, 0x53, 0x7b, 0x0f, 0xf1, 0x9c, 0x35, 0xbd, 0x46, 0xa6, 0xfb, + 0x58, 0xc9, 0x97, 0xdd, 0xae, 0x08, 0xe7, 0x2f, 0x0c, 0x40, 0xc9, 0x12, 0x18, 0x7a, 0x3b, 0x9d, + 0x7a, 0x6a, 0x1f, 0xa3, 0xfe, 0xce, 0xcb, 0x01, 0xa7, 0x39, 0x64, 0x29, 0x52, 0x87, 0x42, 0x0f, + 0x5f, 0x10, 0xa1, 0x3e, 0x37, 0xa0, 0xac, 0x95, 0xcd, 0xd0, 0x1b, 0x63, 0xf6, 0x34, 0xd6, 0xcc, + 0xa8, 0xbf, 0x79, 0x2a, 0x5c, 0x5a, 0x32, 0xaf, 0x9c, 0x00, 0x71, 0xab, 0xf9, 0x2d, 0x03, 0x2a, + 0x7a, 0x75, 0x0d, 0x8d, 0xa1, 0x9d, 0xe8, 0x81, 0xd4, 0x6f, 0x9e, 0x0e, 0x78, 0xf2, 0xf6, 0xc8, + 0x0b, 0x4d, 0x1f, 0xf2, 0xbc, 0x0c, 0x97, 0x76, 0xf0, 0xf5, 0xa6, 0x49, 0xda, 0xc1, 0x8f, 0xd5, + 0xf0, 0x52, 0x0e, 0xbe, 0xef, 0xf5, 0xb1, 0x62, 0x66, 0xbc, 0x3a, 0x37, 0x8e, 0xdb, 0xc9, 0x66, + 0x16, 0x2b, 0xed, 0x8d, 0xe3, 0x26, 0xcd, 0x4c, 0x14, 0xe1, 0xd0, 0x18, 0x62, 0xa7, 0x98, 0x59, + 0xbc, 0x86, 0x97, 0x62, 0x66, 0x94, 0xa1, 0x62, 0x66, 0xb2, 0x38, 0x96, 0x66, 0x66, 0x89, 0xfe, + 0x4e, 0x9a, 0x99, 0x25, 0xeb, 0x6b, 0x29, 0xfb, 0x48, 0xf9, 0x6a, 0x66, 0x36, 0x9b, 0x52, 0x3e, + 0x43, 0xef, 0x8c, 0x51, 0x62, 0x6a, 0xb7, 0xa8, 0x7e, 0xfb, 0x25, 0xa1, 0xc7, 0x9e, 0x71, 0xa6, + 0x7e, 0x71, 0xc6, 0xff, 0xc0, 0x80, 0xb9, 0xb4, 0x8a, 0x1b, 0x1a, 0xc3, 0x67, 0x4c, 0x73, 0xa9, + 0xbe, 0xf8, 0xb2, 0xe0, 0x27, 0x6b, 0x2b, 0x3a, 0xf5, 0x0f, 0x7b, 0x5f, 0x34, 0x1b, 0xcf, 0xae, + 0xc1, 0x55, 0x98, 0x6a, 0x0e, 0x9d, 0xc7, 0xf8, 0x18, 0xcd, 0x4e, 0x67, 0xea, 0x65, 0x42, 0xd7, + 0xf3, 0x9d, 0xcf, 0xe8, 0xdf, 0xea, 0x58, 0xc8, 0xec, 0x95, 0x00, 0x22, 0x80, 0x89, 0x7f, 0xfb, + 0x72, 0xde, 0xf8, 0xcf, 0x2f, 0xe7, 0x8d, 0xff, 0xfe, 0x72, 0xde, 0xf8, 0xe9, 0xff, 0xce, 0x4f, + 0x3c, 0xbb, 0xde, 0xf3, 0xa8, 0x58, 0x8b, 0x8e, 0xd7, 0x90, 0x7f, 0x3f, 0x64, 0xb9, 0xa1, 0x8a, + 0xba, 0x37, 0x45, 0xff, 0xe0, 0xc7, 0xf2, 0xcf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4d, 0x4c, 0x6d, + 0x5c, 0xc7, 0x44, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6620,6 +6679,8 @@ const _ = grpc.SupportPackageIsVersion4 type KVClient interface { // Range gets the keys in the range from the key-value store. Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) + // Range gets the keys in the range from the key-value store. + RangeStream(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (KV_RangeStreamClient, error) // Put puts the given key into the key-value store. // A put request increments the revision of the key-value store // and generates one event in the event history. @@ -6656,6 +6717,38 @@ func (c *kVClient) Range(ctx context.Context, in *RangeRequest, opts ...grpc.Cal return out, nil } +func (c *kVClient) RangeStream(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (KV_RangeStreamClient, error) { + stream, err := c.cc.NewStream(ctx, &_KV_serviceDesc.Streams[0], "/etcdserverpb.KV/RangeStream", opts...) + if err != nil { + return nil, err + } + x := &kVRangeStreamClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type KV_RangeStreamClient interface { + Recv() (*RangeStreamResponse, error) + grpc.ClientStream +} + +type kVRangeStreamClient struct { + grpc.ClientStream +} + +func (x *kVRangeStreamClient) Recv() (*RangeStreamResponse, error) { + m := new(RangeStreamResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *kVClient) Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) { out := new(PutResponse) err := c.cc.Invoke(ctx, "/etcdserverpb.KV/Put", in, out, opts...) @@ -6696,6 +6789,8 @@ func (c *kVClient) Compact(ctx context.Context, in *CompactionRequest, opts ...g type KVServer interface { // Range gets the keys in the range from the key-value store. Range(context.Context, *RangeRequest) (*RangeResponse, error) + // Range gets the keys in the range from the key-value store. + RangeStream(*RangeRequest, KV_RangeStreamServer) error // Put puts the given key into the key-value store. // A put request increments the revision of the key-value store // and generates one event in the event history. @@ -6722,6 +6817,9 @@ type UnimplementedKVServer struct { func (*UnimplementedKVServer) Range(ctx context.Context, req *RangeRequest) (*RangeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Range not implemented") } +func (*UnimplementedKVServer) RangeStream(req *RangeRequest, srv KV_RangeStreamServer) error { + return status.Errorf(codes.Unimplemented, "method RangeStream not implemented") +} func (*UnimplementedKVServer) Put(ctx context.Context, req *PutRequest) (*PutResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Put not implemented") } @@ -6757,6 +6855,27 @@ func _KV_Range_Handler(srv interface{}, ctx context.Context, dec func(interface{ return interceptor(ctx, in, info, handler) } +func _KV_RangeStream_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(RangeRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(KVServer).RangeStream(m, &kVRangeStreamServer{stream}) +} + +type KV_RangeStreamServer interface { + Send(*RangeStreamResponse) error + grpc.ServerStream +} + +type kVRangeStreamServer struct { + grpc.ServerStream +} + +func (x *kVRangeStreamServer) Send(m *RangeStreamResponse) error { + return x.ServerStream.SendMsg(m) +} + func _KV_Put_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(PutRequest) if err := dec(in); err != nil { @@ -6854,7 +6973,13 @@ var _KV_serviceDesc = grpc.ServiceDesc{ Handler: _KV_Compact_Handler, }, }, - Streams: []grpc.StreamDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "RangeStream", + Handler: _KV_RangeStream_Handler, + ServerStreams: true, + }, + }, Metadata: "rpc.proto", } @@ -8687,6 +8812,45 @@ func (m *RangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *RangeStreamResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RangeStreamResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RangeStreamResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.RangeResponse != nil { + { + size, err := m.RangeResponse.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRpc(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *RangeResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9961,20 +10125,20 @@ func (m *WatchCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x30 } if len(m.Filters) > 0 { - dAtA22 := make([]byte, len(m.Filters)*10) - var j21 int + dAtA23 := make([]byte, len(m.Filters)*10) + var j22 int for _, num := range m.Filters { for num >= 1<<7 { - dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80) + dAtA23[j22] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j21++ + j22++ } - dAtA22[j21] = uint8(num) - j21++ + dAtA23[j22] = uint8(num) + j22++ } - i -= j21 - copy(dAtA[i:], dAtA22[:j21]) - i = encodeVarintRpc(dAtA, i, uint64(j21)) + i -= j22 + copy(dAtA[i:], dAtA23[:j22]) + i = encodeVarintRpc(dAtA, i, uint64(j22)) i-- dAtA[i] = 0x2a } @@ -13302,6 +13466,22 @@ func (m *RangeRequest) Size() (n int) { return n } +func (m *RangeStreamResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RangeResponse != nil { + l = m.RangeResponse.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *RangeResponse) Size() (n int) { if m == nil { return 0 @@ -15820,6 +16000,93 @@ func (m *RangeRequest) Unmarshal(dAtA []byte) error { } return nil } +func (m *RangeStreamResponse) 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 ErrIntOverflowRpc + } + 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: RangeStreamResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeStreamResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeResponse", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRpc + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RangeResponse == nil { + m.RangeResponse = &RangeResponse{} + } + if err := m.RangeResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RangeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/api/etcdserverpb/rpc.proto b/api/etcdserverpb/rpc.proto index 983dc01725f..aa02346203a 100644 --- a/api/etcdserverpb/rpc.proto +++ b/api/etcdserverpb/rpc.proto @@ -43,6 +43,10 @@ service KV { }; } + // Range gets the keys in the range from the key-value store. + rpc RangeStream(RangeRequest) returns (stream RangeStreamResponse) { + } + // Put puts the given key into the key-value store. // A put request increments the revision of the key-value store // and generates one event in the event history. @@ -498,6 +502,18 @@ message RangeRequest { int64 max_create_revision = 13 [(versionpb.etcd_version_field)="3.1"]; } +// RangeStreamResponse is the response for the RangeStream RPC. +// This message is just a wrapper around RangeResponse but there may be a need +// in the future to add streaming specific fields (for progress status, error +// propagation, etc.). +message RangeStreamResponse { + option (versionpb.etcd_version_msg) = "3.7"; + // range_response is a partial response for the KV.RangeStream RPC. + // The result of proto.Merge() applied on all responses should result in the + // same RangeResponse response as to the Range() method. + RangeResponse range_response = 1; +} + message RangeResponse { option (versionpb.etcd_version_msg) = "3.0"; diff --git a/client/v3/retry.go b/client/v3/retry.go index 9152c53a7d4..5e6dbe17754 100644 --- a/client/v3/retry.go +++ b/client/v3/retry.go @@ -108,6 +108,11 @@ func (rkv *retryKVClient) Range(ctx context.Context, in *pb.RangeRequest, opts . return rkv.kc.Range(ctx, in, append(opts, withRepeatablePolicy())...) } +func (rkv *retryKVClient) RangeStream(ctx context.Context, in *pb.RangeRequest, opts ...grpc.CallOption) (resp pb.KV_RangeStreamClient, err error) { + panic("to be implented") + return nil, nil +} + func (rkv *retryKVClient) Put(ctx context.Context, in *pb.PutRequest, opts ...grpc.CallOption) (resp *pb.PutResponse, err error) { return rkv.kc.Put(ctx, in, opts...) } diff --git a/server/etcdserver/api/v3rpc/key.go b/server/etcdserver/api/v3rpc/key.go index 2c1de2a90de..7026ea713e1 100644 --- a/server/etcdserver/api/v3rpc/key.go +++ b/server/etcdserver/api/v3rpc/key.go @@ -52,6 +52,18 @@ func (s *kvServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResp return resp, nil } +func (s *kvServer) RangeStream(r *pb.RangeRequest, rs pb.KV_RangeStreamServer) error { + if err := checkRangeRequest(r); err != nil { + return err + } + //TODO: Fill header + err := s.kv.RangeStream(r, rs) + if err != nil { + return togRPCError(err) + } + return nil +} + func (s *kvServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) { if err := checkPutRequest(r); err != nil { return nil, err diff --git a/server/etcdserver/txn/txn.go b/server/etcdserver/txn/txn.go index 51f70a06a42..22531887d34 100644 --- a/server/etcdserver/txn/txn.go +++ b/server/etcdserver/txn/txn.go @@ -150,7 +150,7 @@ func Range(ctx context.Context, lg *zap.Logger, kv mvcc.KV, r *pb.RangeRequest) } func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r *pb.RangeRequest) (*pb.RangeResponse, error) { - trace := traceutil.Get(ctx) + // trace := traceutil.Get(ctx) resp := &pb.RangeResponse{} resp.Header = &pb.ResponseHeader{} @@ -235,7 +235,7 @@ func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r * rr.KVs = rr.KVs[:r.Limit] resp.More = true } - trace.Step("filter and sort the key-value pairs") + // trace.Step("filter and sort the key-value pairs") resp.Header.Revision = rr.Rev resp.Count = int64(rr.Count) resp.Kvs = make([]*mvccpb.KeyValue, len(rr.KVs)) @@ -245,7 +245,7 @@ func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r * } resp.Kvs[i] = &rr.KVs[i] } - trace.Step("assemble the response") + // trace.Step("assemble the response") return resp, nil } diff --git a/server/etcdserver/v3_server.go b/server/etcdserver/v3_server.go index c6953604aa2..c649c695749 100644 --- a/server/etcdserver/v3_server.go +++ b/server/etcdserver/v3_server.go @@ -58,6 +58,7 @@ const ( type RaftKV interface { Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResponse, error) + RangeStream(r *pb.RangeRequest, rs pb.KV_RangeStreamServer) error Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error) @@ -141,6 +142,78 @@ func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRe return resp, err } +func (s *EtcdServer) RangeStream(r *pb.RangeRequest, rs pb.KV_RangeStreamServer) error { + trace := traceutil.New("rangeStream", + s.Logger(), + traceutil.Field{Key: "range_begin", Value: string(r.Key)}, + traceutil.Field{Key: "range_end", Value: string(r.RangeEnd)}, + ) + ctx := context.WithValue(rs.Context(), traceutil.TraceKey{}, trace) + + var resp *pb.RangeResponse + var err error + count := 0 + defer func(start time.Time) { + txn.WarnOfExpensiveReadOnlyRangeRequest(s.Logger(), s.Cfg.WarningApplyDuration, start, r, resp, err) + if resp != nil { + trace.AddField( + traceutil.Field{Key: "response_count", Value: count}, + traceutil.Field{Key: "response_revision", Value: resp.Header.Revision}, + ) + } + trace.LogIfLong(traceThreshold) + }(time.Now()) + + if !r.Serializable { + err = s.linearizableReadNotify(ctx) + trace.Step("agreement among raft nodes before linearized reading") + if err != nil { + return err + } + } + // TODO: Handle auth + // TODO: Handle limit + r.Limit = 1 + resp, _, err = txn.Range(ctx, s.Logger(), s.KV(), r) + if err != nil { + return err + } + count += len(resp.Kvs) + err = rs.Send(&pb.RangeStreamResponse{ + RangeResponse: resp, + }) + if err != nil { + return err + } + r.Revision = resp.Header.Revision + for len(resp.Kvs) != 0 { + // TODO: Forbit non standard order/Implement order by just loading keys + r.Key = append(resp.Kvs[len(resp.Kvs)-1].Key, '\x00') + if resp.Size() < 1024*1024 { + r.Limit *= 2 + } + if resp.Size() > 4*1024*1024 { + r.Limit /= 2 + } + if r.Limit == 0 { + r.Limit = 1 + } + + resp, _, err = txn.Range(ctx, s.Logger(), s.KV(), r) + if err != nil { + return err + } + count += len(resp.Kvs) + err = rs.Send(&pb.RangeStreamResponse{ + RangeResponse: resp, + }) + if err != nil { + return err + } + } + return nil +} + func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) { ctx = context.WithValue(ctx, traceutil.StartTimeKey{}, time.Now()) resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{Put: r}) diff --git a/server/proxy/grpcproxy/adapter/kv_client_adapter.go b/server/proxy/grpcproxy/adapter/kv_client_adapter.go index 69e3a113c4f..302700439f8 100644 --- a/server/proxy/grpcproxy/adapter/kv_client_adapter.go +++ b/server/proxy/grpcproxy/adapter/kv_client_adapter.go @@ -47,3 +47,8 @@ func (s *kvs2kvc) Txn(ctx context.Context, in *pb.TxnRequest, opts ...grpc.CallO func (s *kvs2kvc) Compact(ctx context.Context, in *pb.CompactionRequest, opts ...grpc.CallOption) (*pb.CompactionResponse, error) { return s.kvs.Compact(ctx, in) } + +func (s *kvs2kvc) RangeStream(ctx context.Context, in *pb.RangeRequest, opts ...grpc.CallOption) (pb.KV_RangeStreamClient, error) { + panic("to be implemented") + return nil, nil +} diff --git a/server/proxy/grpcproxy/kv.go b/server/proxy/grpcproxy/kv.go index 3df361d644e..82ef182f913 100644 --- a/server/proxy/grpcproxy/kv.go +++ b/server/proxy/grpcproxy/kv.go @@ -68,6 +68,11 @@ func (p *kvProxy) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRespo return gresp, nil } +func (p *kvProxy) RangeStream(r *pb.RangeRequest, rs pb.KV_RangeStreamServer) error { + panic("to be implemented") + return nil +} + func (p *kvProxy) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) { p.cache.Invalidate(r.Key, nil) cacheKeys.Set(float64(p.cache.Size())) diff --git a/server/storage/mvcc/kvstore_txn.go b/server/storage/mvcc/kvstore_txn.go index c44a2cb3d91..e8cce1f58b8 100644 --- a/server/storage/mvcc/kvstore_txn.go +++ b/server/storage/mvcc/kvstore_txn.go @@ -82,11 +82,11 @@ func (tr *storeTxnCommon) rangeKeys(ctx context.Context, key, end []byte, curRev } if ro.Count { total := tr.s.kvindex.CountRevisions(key, end, rev) - tr.trace.Step("count revisions from in-memory index tree") + // tr.trace.Step("count revisions from in-memory index tree") return &RangeResult{KVs: nil, Count: total, Rev: curRev}, nil } revpairs, total := tr.s.kvindex.Revisions(key, end, rev, int(ro.Limit)) - tr.trace.Step("range keys from in-memory index tree") + // tr.trace.Step("range keys from in-memory index tree") if len(revpairs) == 0 { return &RangeResult{KVs: nil, Count: total, Rev: curRev}, nil } @@ -127,7 +127,7 @@ func (tr *storeTxnCommon) rangeKeys(ctx context.Context, key, end []byte, curRev ) } } - tr.trace.Step("range keys from bolt db") + // tr.trace.Step("range keys from bolt db") return &RangeResult{KVs: kvs, Count: total, Rev: curRev}, nil } diff --git a/tools/benchmark/cmd/put.go b/tools/benchmark/cmd/put.go index 62b9a3dc83c..a79408c9e5c 100644 --- a/tools/benchmark/cmd/put.go +++ b/tools/benchmark/cmd/put.go @@ -16,7 +16,6 @@ package cmd import ( "context" - "encoding/binary" "fmt" "math" "math/rand" @@ -83,7 +82,6 @@ func putFunc(cmd *cobra.Command, _ []string) { } limit := rate.NewLimiter(rate.Limit(putRate), 1) clients := mustCreateClients(totalClients, totalConns) - k, v := make([]byte, keySize), string(mustRandBytes(valSize)) bar = pb.New(putTotal) bar.Start() @@ -106,12 +104,7 @@ func putFunc(cmd *cobra.Command, _ []string) { go func() { for i := 0; i < putTotal; i++ { - if seqKeys { - binary.PutVarint(k, int64(i%keySpaceSize)) - } else { - binary.PutVarint(k, int64(rand.Intn(keySpaceSize))) - } - requests <- v3.OpPut(string(k), v) + requests <- v3.OpPut(RandString(uint(keySize)), RandString(uint(valSize))) } close(requests) }() @@ -181,3 +174,13 @@ func hashKV(cmd *cobra.Command, clients []*v3.Client) { rs += fmt.Sprintf("\tDB size: %s", humanize.Bytes(uint64(rt.DbSize))) fmt.Println(rs) } + +const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +func RandString(l uint) string { + s := make([]byte, l) + for i := 0; i < int(l); i++ { + s[i] = chars[rand.Intn(len(chars))] + } + return string(s) +} diff --git a/tools/benchmark/cmd/range.go b/tools/benchmark/cmd/range.go index 111d69bd055..9873e2e6119 100644 --- a/tools/benchmark/cmd/range.go +++ b/tools/benchmark/cmd/range.go @@ -16,7 +16,9 @@ package cmd import ( "context" + "errors" "fmt" + "io" "math" "os" "time" @@ -24,7 +26,9 @@ import ( "github.com/cheggaaa/pb/v3" "github.com/spf13/cobra" "golang.org/x/time/rate" + "google.golang.org/grpc" + etcdserverpb "go.etcd.io/etcd/api/v3/etcdserverpb" v3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/pkg/v3/report" ) @@ -43,6 +47,7 @@ var ( rangeConsistency string rangeLimit int64 rangeCountOnly bool + rangeStream bool ) func init() { @@ -52,6 +57,7 @@ func init() { rangeCmd.Flags().StringVar(&rangeConsistency, "consistency", "l", "Linearizable(l) or Serializable(s)") rangeCmd.Flags().Int64Var(&rangeLimit, "limit", 0, "Maximum number of results to return from range request (0 is no limit)") rangeCmd.Flags().BoolVar(&rangeCountOnly, "count-only", false, "Only returns the count of keys") + rangeCmd.Flags().BoolVar(&rangeStream, "stream", false, "Stream") } func rangeFunc(cmd *cobra.Command, args []string) { @@ -80,22 +86,53 @@ func rangeFunc(cmd *cobra.Command, args []string) { } limit := rate.NewLimiter(rate.Limit(rangeRate), 1) - requests := make(chan v3.Op, totalClients) + requests := make(chan struct{}, totalClients) clients := mustCreateClients(totalClients, totalConns) bar = pb.New(rangeTotal) bar.Start() r := newReport() + request := &etcdserverpb.RangeRequest{ + Key: []byte(k), + RangeEnd: []byte(end), + Limit: rangeLimit, + CountOnly: rangeCountOnly, + } + if rangeConsistency == "s" { + request.Serializable = true + } + callOpts := []grpc.CallOption{ + grpc.WaitForReady(true), + grpc.MaxCallSendMsgSize(2 * 1024 * 1024), + grpc.MaxCallRecvMsgSize(math.MaxInt32), + } for i := range clients { wg.Add(1) go func(c *v3.Client) { defer wg.Done() - for op := range requests { + kv := etcdserverpb.NewKVClient(c.ActiveConnection()) + for range requests { limit.Wait(context.Background()) - st := time.Now() - _, err := c.Do(context.Background(), op) + var err error + if rangeStream { + var client etcdserverpb.KV_RangeStreamClient + client, err = kv.RangeStream(context.Background(), request, callOpts...) + if err == nil { + for { + _, err := client.Recv() + if err != nil { + if !errors.Is(err, io.EOF) { + panic(err) + } + break + } + } + } + } else { + _, err = kv.Range(context.Background(), request, callOpts...) + } r.Results() <- report.Result{Err: err, Start: st, End: time.Now()} bar.Increment() } @@ -104,15 +141,7 @@ func rangeFunc(cmd *cobra.Command, args []string) { go func() { for i := 0; i < rangeTotal; i++ { - opts := []v3.OpOption{v3.WithRange(end), v3.WithLimit(rangeLimit)} - if rangeCountOnly { - opts = append(opts, v3.WithCountOnly()) - } - if rangeConsistency == "s" { - opts = append(opts, v3.WithSerializable()) - } - op := v3.OpGet(k, opts...) - requests <- op + requests <- struct{}{} } close(requests) }()