Implement GetPersistentSegmentInfo through datacoord (#19205)

Signed-off-by: wayblink <anyang.wang@zilliz.com>

Signed-off-by: wayblink <anyang.wang@zilliz.com>
pull/19605/head
wayblink 2022-10-08 11:51:02 +08:00 committed by GitHub
parent e11247659d
commit e7c2500c71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 688 additions and 305 deletions

View File

@ -688,6 +688,111 @@ func TestGetFlushedSegments(t *testing.T) {
})
}
func TestGetSegmentsByStates(t *testing.T) {
t.Run("normal case", func(t *testing.T) {
svr := newTestServer(t, nil)
defer closeTestServer(t, svr)
type testCase struct {
collID int64
partID int64
searchPartID int64
flushedSegments []int64
sealedSegments []int64
growingSegments []int64
expected []int64
}
cases := []testCase{
{
collID: 1,
partID: 1,
searchPartID: 1,
flushedSegments: []int64{1, 2, 3},
sealedSegments: []int64{4},
growingSegments: []int64{5},
expected: []int64{1, 2, 3, 4},
},
{
collID: 1,
partID: 2,
searchPartID: 2,
flushedSegments: []int64{6, 7},
sealedSegments: []int64{},
growingSegments: []int64{8},
expected: []int64{6, 7},
},
{
collID: 2,
partID: 3,
searchPartID: 3,
flushedSegments: []int64{9, 10},
sealedSegments: []int64{},
growingSegments: []int64{11},
expected: []int64{9, 10},
},
{
collID: 1,
searchPartID: -1,
expected: []int64{1, 2, 3, 4, 6, 7},
},
{
collID: 2,
searchPartID: -1,
expected: []int64{9, 10},
},
}
for _, tc := range cases {
for _, fs := range tc.flushedSegments {
segInfo := &datapb.SegmentInfo{
ID: fs,
CollectionID: tc.collID,
PartitionID: tc.partID,
State: commonpb.SegmentState_Flushed,
}
assert.Nil(t, svr.meta.AddSegment(NewSegmentInfo(segInfo)))
}
for _, us := range tc.sealedSegments {
segInfo := &datapb.SegmentInfo{
ID: us,
CollectionID: tc.collID,
PartitionID: tc.partID,
State: commonpb.SegmentState_Sealed,
}
assert.Nil(t, svr.meta.AddSegment(NewSegmentInfo(segInfo)))
}
for _, us := range tc.growingSegments {
segInfo := &datapb.SegmentInfo{
ID: us,
CollectionID: tc.collID,
PartitionID: tc.partID,
State: commonpb.SegmentState_Growing,
}
assert.Nil(t, svr.meta.AddSegment(NewSegmentInfo(segInfo)))
}
resp, err := svr.GetSegmentsByStates(context.Background(), &datapb.GetSegmentsByStatesRequest{
CollectionID: tc.collID,
PartitionID: tc.searchPartID,
States: []commonpb.SegmentState{commonpb.SegmentState_Sealed, commonpb.SegmentState_Flushed},
})
assert.Nil(t, err)
assert.Equal(t, commonpb.ErrorCode_Success, resp.GetStatus().GetErrorCode())
assert.ElementsMatch(t, tc.expected, resp.GetSegments())
}
})
t.Run("with closed server", func(t *testing.T) {
t.Run("with closed server", func(t *testing.T) {
svr := newTestServer(t, nil)
closeTestServer(t, svr)
resp, err := svr.GetSegmentsByStates(context.Background(), &datapb.GetSegmentsByStatesRequest{})
assert.Nil(t, err)
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, resp.GetStatus().GetErrorCode())
assert.Equal(t, serverNotServingErrMsg, resp.GetStatus().GetReason())
})
})
}
func TestService_WatchServices(t *testing.T) {
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT)

View File

@ -752,6 +752,49 @@ func (s *Server) GetFlushedSegments(ctx context.Context, req *datapb.GetFlushedS
return resp, nil
}
// GetSegmentsByStates returns all segment matches provided criterion and States
// If requested partition id < 0, ignores the partition id filter
func (s *Server) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
resp := &datapb.GetSegmentsByStatesResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
},
}
collectionID := req.GetCollectionID()
partitionID := req.GetPartitionID()
states := req.GetStates()
log.Debug("received get segments by states request",
zap.Int64("collectionID", collectionID),
zap.Int64("partitionID", partitionID),
zap.Any("states", states))
if s.isClosed() {
resp.Status.Reason = serverNotServingErrMsg
return resp, nil
}
var segmentIDs []UniqueID
if partitionID < 0 {
segmentIDs = s.meta.GetSegmentsIDOfCollection(collectionID)
} else {
segmentIDs = s.meta.GetSegmentsIDOfPartition(collectionID, partitionID)
}
ret := make([]UniqueID, 0, len(segmentIDs))
statesDict := make(map[commonpb.SegmentState]bool)
for _, state := range states {
statesDict[state] = true
}
for _, id := range segmentIDs {
segment := s.meta.GetSegment(id)
if segment != nil && statesDict[segment.GetState()] {
ret = append(ret, id)
}
}
resp.Segments = ret
resp.Status.ErrorCode = commonpb.ErrorCode_Success
return resp, nil
}
//ShowConfigurations returns the configurations of DataCoord matching req.Pattern
func (s *Server) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
log.Debug("DataCoord.ShowConfigurations", zap.String("pattern", req.Pattern))

View File

@ -386,6 +386,27 @@ func (c *Client) GetFlushedSegments(ctx context.Context, req *datapb.GetFlushedS
return ret.(*datapb.GetFlushedSegmentsResponse), err
}
// GetSegmentsByStates returns segment list of requested collection/partition and segment states
//
// ctx is the context to control request deadline and cancellation
// req contains the collection/partition id and segment states to query
// when partition is lesser or equal to 0, all segments of collection will be returned
//
// response struct `GetSegmentsByStatesResponse` contains segment id list
// error is returned only when some communication issue occurs
func (c *Client) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(datapb.DataCoordClient).GetSegmentsByStates(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*datapb.GetSegmentsByStatesResponse), err
}
// ShowConfigurations gets specified configurations para of DataCoord
func (c *Client) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {

View File

@ -312,6 +312,11 @@ func (s *Server) GetFlushedSegments(ctx context.Context, req *datapb.GetFlushedS
return s.dataCoord.GetFlushedSegments(ctx, req)
}
// GetSegmentsByStates get all segments of a partition by given states
func (s *Server) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
return s.dataCoord.GetSegmentsByStates(ctx, req)
}
// ShowConfigurations gets specified configurations para of DataCoord
func (s *Server) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
return s.dataCoord.ShowConfigurations(ctx, req)

View File

@ -50,6 +50,7 @@ type MockDataCoord struct {
partStatResp *datapb.GetPartitionStatisticsResponse
recoverResp *datapb.GetRecoveryInfoResponse
flushSegResp *datapb.GetFlushedSegmentsResponse
SegByStatesResp *datapb.GetSegmentsByStatesResponse
configResp *internalpb.ShowConfigurationsResponse
metricResp *milvuspb.GetMetricsResponse
compactionStateResp *milvuspb.GetCompactionStateResponse
@ -146,6 +147,10 @@ func (m *MockDataCoord) GetFlushedSegments(ctx context.Context, req *datapb.GetF
return m.flushSegResp, m.err
}
func (m *MockDataCoord) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
return m.SegByStatesResp, m.err
}
func (m *MockDataCoord) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
return m.configResp, m.err
}

View File

@ -514,6 +514,10 @@ func (m *MockDataCoord) GetFlushedSegments(ctx context.Context, req *datapb.GetF
return nil, nil
}
func (m *MockDataCoord) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
return nil, nil
}
func (m *MockDataCoord) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
return nil, nil
}

View File

@ -474,6 +474,28 @@ func (_m *DataCoord) GetFlushedSegments(ctx context.Context, req *datapb.GetFlus
return r0, r1
}
func (_m *DataCoord) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
ret := _m.Called(ctx, req)
var r0 *datapb.GetSegmentsByStatesResponse
if rf, ok := ret.Get(0).(func(context.Context, *datapb.GetSegmentsByStatesRequest) *datapb.GetSegmentsByStatesResponse); ok {
r0 = rf(ctx, req)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*datapb.GetSegmentsByStatesResponse)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *datapb.GetSegmentsByStatesRequest) error); ok {
r1 = rf(ctx, req)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// DataCoord_GetFlushedSegments_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFlushedSegments'
type DataCoord_GetFlushedSegments_Call struct {
*mock.Call

View File

@ -39,6 +39,7 @@ service DataCoord {
rpc SaveBinlogPaths(SaveBinlogPathsRequest) returns (common.Status){}
rpc GetRecoveryInfo(GetRecoveryInfoRequest) returns (GetRecoveryInfoResponse){}
rpc GetFlushedSegments(GetFlushedSegmentsRequest) returns(GetFlushedSegmentsResponse){}
rpc GetSegmentsByStates(GetSegmentsByStatesRequest) returns(GetSegmentsByStatesResponse){}
rpc ShowConfigurations(internal.ShowConfigurationsRequest) returns (internal.ShowConfigurationsResponse){}
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
@ -379,6 +380,18 @@ message GetRecoveryInfoRequest {
int64 partitionID = 3;
}
message GetSegmentsByStatesRequest {
common.MsgBase base = 1;
int64 collectionID = 2;
int64 partitionID = 3;
repeated common.SegmentState states = 4;
}
message GetSegmentsByStatesResponse {
common.Status status = 1;
repeated int64 segments = 2;
}
message GetFlushedSegmentsRequest {
common.MsgBase base = 1;
int64 collectionID = 2;

View File

@ -2638,6 +2638,116 @@ func (m *GetRecoveryInfoRequest) GetPartitionID() int64 {
return 0
}
type GetSegmentsByStatesRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
PartitionID int64 `protobuf:"varint,3,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
States []commonpb.SegmentState `protobuf:"varint,4,rep,packed,name=states,proto3,enum=milvus.proto.common.SegmentState" json:"states,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetSegmentsByStatesRequest) Reset() { *m = GetSegmentsByStatesRequest{} }
func (m *GetSegmentsByStatesRequest) String() string { return proto.CompactTextString(m) }
func (*GetSegmentsByStatesRequest) ProtoMessage() {}
func (*GetSegmentsByStatesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{40}
}
func (m *GetSegmentsByStatesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSegmentsByStatesRequest.Unmarshal(m, b)
}
func (m *GetSegmentsByStatesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetSegmentsByStatesRequest.Marshal(b, m, deterministic)
}
func (m *GetSegmentsByStatesRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetSegmentsByStatesRequest.Merge(m, src)
}
func (m *GetSegmentsByStatesRequest) XXX_Size() int {
return xxx_messageInfo_GetSegmentsByStatesRequest.Size(m)
}
func (m *GetSegmentsByStatesRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetSegmentsByStatesRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetSegmentsByStatesRequest proto.InternalMessageInfo
func (m *GetSegmentsByStatesRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *GetSegmentsByStatesRequest) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
func (m *GetSegmentsByStatesRequest) GetPartitionID() int64 {
if m != nil {
return m.PartitionID
}
return 0
}
func (m *GetSegmentsByStatesRequest) GetStates() []commonpb.SegmentState {
if m != nil {
return m.States
}
return nil
}
type GetSegmentsByStatesResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Segments []int64 `protobuf:"varint,2,rep,packed,name=segments,proto3" json:"segments,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetSegmentsByStatesResponse) Reset() { *m = GetSegmentsByStatesResponse{} }
func (m *GetSegmentsByStatesResponse) String() string { return proto.CompactTextString(m) }
func (*GetSegmentsByStatesResponse) ProtoMessage() {}
func (*GetSegmentsByStatesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{41}
}
func (m *GetSegmentsByStatesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSegmentsByStatesResponse.Unmarshal(m, b)
}
func (m *GetSegmentsByStatesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetSegmentsByStatesResponse.Marshal(b, m, deterministic)
}
func (m *GetSegmentsByStatesResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetSegmentsByStatesResponse.Merge(m, src)
}
func (m *GetSegmentsByStatesResponse) XXX_Size() int {
return xxx_messageInfo_GetSegmentsByStatesResponse.Size(m)
}
func (m *GetSegmentsByStatesResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetSegmentsByStatesResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetSegmentsByStatesResponse proto.InternalMessageInfo
func (m *GetSegmentsByStatesResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetSegmentsByStatesResponse) GetSegments() []int64 {
if m != nil {
return m.Segments
}
return nil
}
type GetFlushedSegmentsRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
@ -2651,7 +2761,7 @@ func (m *GetFlushedSegmentsRequest) Reset() { *m = GetFlushedSegmentsReq
func (m *GetFlushedSegmentsRequest) String() string { return proto.CompactTextString(m) }
func (*GetFlushedSegmentsRequest) ProtoMessage() {}
func (*GetFlushedSegmentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{40}
return fileDescriptor_82cd95f524594f49, []int{42}
}
func (m *GetFlushedSegmentsRequest) XXX_Unmarshal(b []byte) error {
@ -2705,7 +2815,7 @@ func (m *GetFlushedSegmentsResponse) Reset() { *m = GetFlushedSegmentsRe
func (m *GetFlushedSegmentsResponse) String() string { return proto.CompactTextString(m) }
func (*GetFlushedSegmentsResponse) ProtoMessage() {}
func (*GetFlushedSegmentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{41}
return fileDescriptor_82cd95f524594f49, []int{43}
}
func (m *GetFlushedSegmentsResponse) XXX_Unmarshal(b []byte) error {
@ -2752,7 +2862,7 @@ func (m *SegmentFlushCompletedMsg) Reset() { *m = SegmentFlushCompletedM
func (m *SegmentFlushCompletedMsg) String() string { return proto.CompactTextString(m) }
func (*SegmentFlushCompletedMsg) ProtoMessage() {}
func (*SegmentFlushCompletedMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{42}
return fileDescriptor_82cd95f524594f49, []int{44}
}
func (m *SegmentFlushCompletedMsg) XXX_Unmarshal(b []byte) error {
@ -2803,7 +2913,7 @@ func (m *ChannelWatchInfo) Reset() { *m = ChannelWatchInfo{} }
func (m *ChannelWatchInfo) String() string { return proto.CompactTextString(m) }
func (*ChannelWatchInfo) ProtoMessage() {}
func (*ChannelWatchInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{43}
return fileDescriptor_82cd95f524594f49, []int{45}
}
func (m *ChannelWatchInfo) XXX_Unmarshal(b []byte) error {
@ -2863,7 +2973,7 @@ func (m *CompactionStateRequest) Reset() { *m = CompactionStateRequest{}
func (m *CompactionStateRequest) String() string { return proto.CompactTextString(m) }
func (*CompactionStateRequest) ProtoMessage() {}
func (*CompactionStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{44}
return fileDescriptor_82cd95f524594f49, []int{46}
}
func (m *CompactionStateRequest) XXX_Unmarshal(b []byte) error {
@ -2906,7 +3016,7 @@ func (m *SyncSegmentsRequest) Reset() { *m = SyncSegmentsRequest{} }
func (m *SyncSegmentsRequest) String() string { return proto.CompactTextString(m) }
func (*SyncSegmentsRequest) ProtoMessage() {}
func (*SyncSegmentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{45}
return fileDescriptor_82cd95f524594f49, []int{47}
}
func (m *SyncSegmentsRequest) XXX_Unmarshal(b []byte) error {
@ -2977,7 +3087,7 @@ func (m *CompactionSegmentBinlogs) Reset() { *m = CompactionSegmentBinlo
func (m *CompactionSegmentBinlogs) String() string { return proto.CompactTextString(m) }
func (*CompactionSegmentBinlogs) ProtoMessage() {}
func (*CompactionSegmentBinlogs) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{46}
return fileDescriptor_82cd95f524594f49, []int{48}
}
func (m *CompactionSegmentBinlogs) XXX_Unmarshal(b []byte) error {
@ -3050,7 +3160,7 @@ func (m *CompactionPlan) Reset() { *m = CompactionPlan{} }
func (m *CompactionPlan) String() string { return proto.CompactTextString(m) }
func (*CompactionPlan) ProtoMessage() {}
func (*CompactionPlan) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{47}
return fileDescriptor_82cd95f524594f49, []int{49}
}
func (m *CompactionPlan) XXX_Unmarshal(b []byte) error {
@ -3136,7 +3246,7 @@ func (m *CompactionResult) Reset() { *m = CompactionResult{} }
func (m *CompactionResult) String() string { return proto.CompactTextString(m) }
func (*CompactionResult) ProtoMessage() {}
func (*CompactionResult) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{48}
return fileDescriptor_82cd95f524594f49, []int{50}
}
func (m *CompactionResult) XXX_Unmarshal(b []byte) error {
@ -3212,7 +3322,7 @@ func (m *CompactionStateResult) Reset() { *m = CompactionStateResult{} }
func (m *CompactionStateResult) String() string { return proto.CompactTextString(m) }
func (*CompactionStateResult) ProtoMessage() {}
func (*CompactionStateResult) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{49}
return fileDescriptor_82cd95f524594f49, []int{51}
}
func (m *CompactionStateResult) XXX_Unmarshal(b []byte) error {
@ -3266,7 +3376,7 @@ func (m *CompactionStateResponse) Reset() { *m = CompactionStateResponse
func (m *CompactionStateResponse) String() string { return proto.CompactTextString(m) }
func (*CompactionStateResponse) ProtoMessage() {}
func (*CompactionStateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{50}
return fileDescriptor_82cd95f524594f49, []int{52}
}
func (m *CompactionStateResponse) XXX_Unmarshal(b []byte) error {
@ -3314,7 +3424,7 @@ func (m *SegmentFieldBinlogMeta) Reset() { *m = SegmentFieldBinlogMeta{}
func (m *SegmentFieldBinlogMeta) String() string { return proto.CompactTextString(m) }
func (*SegmentFieldBinlogMeta) ProtoMessage() {}
func (*SegmentFieldBinlogMeta) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{51}
return fileDescriptor_82cd95f524594f49, []int{53}
}
func (m *SegmentFieldBinlogMeta) XXX_Unmarshal(b []byte) error {
@ -3362,7 +3472,7 @@ func (m *WatchChannelsRequest) Reset() { *m = WatchChannelsRequest{} }
func (m *WatchChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*WatchChannelsRequest) ProtoMessage() {}
func (*WatchChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{52}
return fileDescriptor_82cd95f524594f49, []int{54}
}
func (m *WatchChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -3415,7 +3525,7 @@ func (m *WatchChannelsResponse) Reset() { *m = WatchChannelsResponse{} }
func (m *WatchChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*WatchChannelsResponse) ProtoMessage() {}
func (*WatchChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{53}
return fileDescriptor_82cd95f524594f49, []int{55}
}
func (m *WatchChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -3456,7 +3566,7 @@ func (m *SetSegmentStateRequest) Reset() { *m = SetSegmentStateRequest{}
func (m *SetSegmentStateRequest) String() string { return proto.CompactTextString(m) }
func (*SetSegmentStateRequest) ProtoMessage() {}
func (*SetSegmentStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{54}
return fileDescriptor_82cd95f524594f49, []int{56}
}
func (m *SetSegmentStateRequest) XXX_Unmarshal(b []byte) error {
@ -3509,7 +3619,7 @@ func (m *SetSegmentStateResponse) Reset() { *m = SetSegmentStateResponse
func (m *SetSegmentStateResponse) String() string { return proto.CompactTextString(m) }
func (*SetSegmentStateResponse) ProtoMessage() {}
func (*SetSegmentStateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{55}
return fileDescriptor_82cd95f524594f49, []int{57}
}
func (m *SetSegmentStateResponse) XXX_Unmarshal(b []byte) error {
@ -3550,7 +3660,7 @@ func (m *DropVirtualChannelRequest) Reset() { *m = DropVirtualChannelReq
func (m *DropVirtualChannelRequest) String() string { return proto.CompactTextString(m) }
func (*DropVirtualChannelRequest) ProtoMessage() {}
func (*DropVirtualChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{56}
return fileDescriptor_82cd95f524594f49, []int{58}
}
func (m *DropVirtualChannelRequest) XXX_Unmarshal(b []byte) error {
@ -3610,7 +3720,7 @@ func (m *DropVirtualChannelSegment) Reset() { *m = DropVirtualChannelSeg
func (m *DropVirtualChannelSegment) String() string { return proto.CompactTextString(m) }
func (*DropVirtualChannelSegment) ProtoMessage() {}
func (*DropVirtualChannelSegment) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{57}
return fileDescriptor_82cd95f524594f49, []int{59}
}
func (m *DropVirtualChannelSegment) XXX_Unmarshal(b []byte) error {
@ -3698,7 +3808,7 @@ func (m *DropVirtualChannelResponse) Reset() { *m = DropVirtualChannelRe
func (m *DropVirtualChannelResponse) String() string { return proto.CompactTextString(m) }
func (*DropVirtualChannelResponse) ProtoMessage() {}
func (*DropVirtualChannelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{58}
return fileDescriptor_82cd95f524594f49, []int{60}
}
func (m *DropVirtualChannelResponse) XXX_Unmarshal(b []byte) error {
@ -3744,7 +3854,7 @@ func (m *ImportTask) Reset() { *m = ImportTask{} }
func (m *ImportTask) String() string { return proto.CompactTextString(m) }
func (*ImportTask) ProtoMessage() {}
func (*ImportTask) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{59}
return fileDescriptor_82cd95f524594f49, []int{61}
}
func (m *ImportTask) XXX_Unmarshal(b []byte) error {
@ -3836,7 +3946,7 @@ func (m *ImportTaskState) Reset() { *m = ImportTaskState{} }
func (m *ImportTaskState) String() string { return proto.CompactTextString(m) }
func (*ImportTaskState) ProtoMessage() {}
func (*ImportTaskState) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{60}
return fileDescriptor_82cd95f524594f49, []int{62}
}
func (m *ImportTaskState) XXX_Unmarshal(b []byte) error {
@ -3915,7 +4025,7 @@ func (m *ImportTaskInfo) Reset() { *m = ImportTaskInfo{} }
func (m *ImportTaskInfo) String() string { return proto.CompactTextString(m) }
func (*ImportTaskInfo) ProtoMessage() {}
func (*ImportTaskInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{61}
return fileDescriptor_82cd95f524594f49, []int{63}
}
func (m *ImportTaskInfo) XXX_Unmarshal(b []byte) error {
@ -4040,7 +4150,7 @@ func (m *ImportTaskResponse) Reset() { *m = ImportTaskResponse{} }
func (m *ImportTaskResponse) String() string { return proto.CompactTextString(m) }
func (*ImportTaskResponse) ProtoMessage() {}
func (*ImportTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{62}
return fileDescriptor_82cd95f524594f49, []int{64}
}
func (m *ImportTaskResponse) XXX_Unmarshal(b []byte) error {
@ -4088,7 +4198,7 @@ func (m *ImportTaskRequest) Reset() { *m = ImportTaskRequest{} }
func (m *ImportTaskRequest) String() string { return proto.CompactTextString(m) }
func (*ImportTaskRequest) ProtoMessage() {}
func (*ImportTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{63}
return fileDescriptor_82cd95f524594f49, []int{65}
}
func (m *ImportTaskRequest) XXX_Unmarshal(b []byte) error {
@ -4142,7 +4252,7 @@ func (m *UpdateSegmentStatisticsRequest) Reset() { *m = UpdateSegmentSta
func (m *UpdateSegmentStatisticsRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateSegmentStatisticsRequest) ProtoMessage() {}
func (*UpdateSegmentStatisticsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{64}
return fileDescriptor_82cd95f524594f49, []int{66}
}
func (m *UpdateSegmentStatisticsRequest) XXX_Unmarshal(b []byte) error {
@ -4188,7 +4298,7 @@ func (m *ResendSegmentStatsRequest) Reset() { *m = ResendSegmentStatsReq
func (m *ResendSegmentStatsRequest) String() string { return proto.CompactTextString(m) }
func (*ResendSegmentStatsRequest) ProtoMessage() {}
func (*ResendSegmentStatsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{65}
return fileDescriptor_82cd95f524594f49, []int{67}
}
func (m *ResendSegmentStatsRequest) XXX_Unmarshal(b []byte) error {
@ -4228,7 +4338,7 @@ func (m *ResendSegmentStatsResponse) Reset() { *m = ResendSegmentStatsRe
func (m *ResendSegmentStatsResponse) String() string { return proto.CompactTextString(m) }
func (*ResendSegmentStatsResponse) ProtoMessage() {}
func (*ResendSegmentStatsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{66}
return fileDescriptor_82cd95f524594f49, []int{68}
}
func (m *ResendSegmentStatsResponse) XXX_Unmarshal(b []byte) error {
@ -4280,7 +4390,7 @@ func (m *AddImportSegmentRequest) Reset() { *m = AddImportSegmentRequest
func (m *AddImportSegmentRequest) String() string { return proto.CompactTextString(m) }
func (*AddImportSegmentRequest) ProtoMessage() {}
func (*AddImportSegmentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{67}
return fileDescriptor_82cd95f524594f49, []int{69}
}
func (m *AddImportSegmentRequest) XXX_Unmarshal(b []byte) error {
@ -4362,7 +4472,7 @@ func (m *AddImportSegmentResponse) Reset() { *m = AddImportSegmentRespon
func (m *AddImportSegmentResponse) String() string { return proto.CompactTextString(m) }
func (*AddImportSegmentResponse) ProtoMessage() {}
func (*AddImportSegmentResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{68}
return fileDescriptor_82cd95f524594f49, []int{70}
}
func (m *AddImportSegmentResponse) XXX_Unmarshal(b []byte) error {
@ -4415,7 +4525,7 @@ func (m *SaveImportSegmentRequest) Reset() { *m = SaveImportSegmentReque
func (m *SaveImportSegmentRequest) String() string { return proto.CompactTextString(m) }
func (*SaveImportSegmentRequest) ProtoMessage() {}
func (*SaveImportSegmentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{69}
return fileDescriptor_82cd95f524594f49, []int{71}
}
func (m *SaveImportSegmentRequest) XXX_Unmarshal(b []byte) error {
@ -4504,7 +4614,7 @@ func (m *UnsetIsImportingStateRequest) Reset() { *m = UnsetIsImportingSt
func (m *UnsetIsImportingStateRequest) String() string { return proto.CompactTextString(m) }
func (*UnsetIsImportingStateRequest) ProtoMessage() {}
func (*UnsetIsImportingStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{70}
return fileDescriptor_82cd95f524594f49, []int{72}
}
func (m *UnsetIsImportingStateRequest) XXX_Unmarshal(b []byte) error {
@ -4551,7 +4661,7 @@ func (m *MarkSegmentsDroppedRequest) Reset() { *m = MarkSegmentsDroppedR
func (m *MarkSegmentsDroppedRequest) String() string { return proto.CompactTextString(m) }
func (*MarkSegmentsDroppedRequest) ProtoMessage() {}
func (*MarkSegmentsDroppedRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{71}
return fileDescriptor_82cd95f524594f49, []int{73}
}
func (m *MarkSegmentsDroppedRequest) XXX_Unmarshal(b []byte) error {
@ -4599,7 +4709,7 @@ func (m *SegmentReferenceLock) Reset() { *m = SegmentReferenceLock{} }
func (m *SegmentReferenceLock) String() string { return proto.CompactTextString(m) }
func (*SegmentReferenceLock) ProtoMessage() {}
func (*SegmentReferenceLock) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{72}
return fileDescriptor_82cd95f524594f49, []int{74}
}
func (m *SegmentReferenceLock) XXX_Unmarshal(b []byte) error {
@ -4685,6 +4795,8 @@ func init() {
proto.RegisterType((*Binlog)(nil), "milvus.proto.data.Binlog")
proto.RegisterType((*GetRecoveryInfoResponse)(nil), "milvus.proto.data.GetRecoveryInfoResponse")
proto.RegisterType((*GetRecoveryInfoRequest)(nil), "milvus.proto.data.GetRecoveryInfoRequest")
proto.RegisterType((*GetSegmentsByStatesRequest)(nil), "milvus.proto.data.GetSegmentsByStatesRequest")
proto.RegisterType((*GetSegmentsByStatesResponse)(nil), "milvus.proto.data.GetSegmentsByStatesResponse")
proto.RegisterType((*GetFlushedSegmentsRequest)(nil), "milvus.proto.data.GetFlushedSegmentsRequest")
proto.RegisterType((*GetFlushedSegmentsResponse)(nil), "milvus.proto.data.GetFlushedSegmentsResponse")
proto.RegisterType((*SegmentFlushCompletedMsg)(nil), "milvus.proto.data.SegmentFlushCompletedMsg")
@ -4723,268 +4835,272 @@ func init() {
func init() { proto.RegisterFile("data_coord.proto", fileDescriptor_82cd95f524594f49) }
var fileDescriptor_82cd95f524594f49 = []byte{
// 4168 bytes of a gzipped FileDescriptorProto
// 4226 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3c, 0x5b, 0x6f, 0x1c, 0x59,
0x5a, 0xa9, 0xbe, 0xb9, 0xfb, 0xeb, 0x8b, 0xdb, 0x27, 0x19, 0xbb, 0xd3, 0xb9, 0x4e, 0xcd, 0x24,
0x93, 0xc9, 0x64, 0x92, 0x19, 0x0f, 0xa3, 0x1d, 0x91, 0x9d, 0x59, 0x8d, 0xe3, 0x89, 0xd3, 0x60,
0x7b, 0xbd, 0x65, 0x67, 0x22, 0xed, 0x22, 0xb5, 0x2a, 0x5d, 0xc7, 0xed, 0x5a, 0x77, 0x55, 0x75,
0xaa, 0xaa, 0xe3, 0x78, 0x79, 0xd8, 0x11, 0x2b, 0x21, 0x2d, 0x42, 0x2c, 0x17, 0x21, 0xc1, 0x03,
0x12, 0xe2, 0x69, 0x01, 0x21, 0x21, 0xad, 0x78, 0x00, 0x84, 0x78, 0xe0, 0x65, 0x05, 0x48, 0x88,
0x17, 0x1e, 0xf8, 0x01, 0xf0, 0x03, 0xf8, 0x03, 0xe8, 0x5c, 0xea, 0xd4, 0xed, 0x54, 0x77, 0xb9,
0x3b, 0x99, 0x20, 0xf6, 0xcd, 0xe7, 0xeb, 0xef, 0x7c, 0xe7, 0x3b, 0xdf, 0xf9, 0xee, 0xe7, 0x94,
0xa1, 0x6d, 0xe8, 0xbe, 0xde, 0x1f, 0x38, 0x8e, 0x6b, 0xdc, 0x1d, 0xbb, 0x8e, 0xef, 0xa0, 0x15,
0xcb, 0x1c, 0x3d, 0x9f, 0x78, 0x6c, 0x74, 0x97, 0xfc, 0xdc, 0x6d, 0x0c, 0x1c, 0xcb, 0x72, 0x6c,
0x06, 0xea, 0xb6, 0x4c, 0xdb, 0xc7, 0xae, 0xad, 0x8f, 0xf8, 0xb8, 0x11, 0x9d, 0xd0, 0x6d, 0x78,
0x83, 0x23, 0x6c, 0xe9, 0x6c, 0xa4, 0x2e, 0x41, 0xf9, 0x0b, 0x6b, 0xec, 0x9f, 0xaa, 0x7f, 0xa4,
0x40, 0xe3, 0xe1, 0x68, 0xe2, 0x1d, 0x69, 0xf8, 0xd9, 0x04, 0x7b, 0x3e, 0xfa, 0x00, 0x4a, 0x4f,
0x75, 0x0f, 0x77, 0x94, 0xeb, 0xca, 0xad, 0xfa, 0xfa, 0xe5, 0xbb, 0xb1, 0x55, 0xf9, 0x7a, 0x3b,
0xde, 0x70, 0x43, 0xf7, 0xb0, 0x46, 0x31, 0x11, 0x82, 0x92, 0xf1, 0xb4, 0xb7, 0xd9, 0x29, 0x5c,
0x57, 0x6e, 0x15, 0x35, 0xfa, 0x37, 0xba, 0x0a, 0xe0, 0xe1, 0xa1, 0x85, 0x6d, 0xbf, 0xb7, 0xe9,
0x75, 0x8a, 0xd7, 0x8b, 0xb7, 0x8a, 0x5a, 0x04, 0x82, 0x54, 0x68, 0x0c, 0x9c, 0xd1, 0x08, 0x0f,
0x7c, 0xd3, 0xb1, 0x7b, 0x9b, 0x9d, 0x12, 0x9d, 0x1b, 0x83, 0xa9, 0xff, 0xa5, 0x40, 0x93, 0xb3,
0xe6, 0x8d, 0x1d, 0xdb, 0xc3, 0xe8, 0x23, 0xa8, 0x78, 0xbe, 0xee, 0x4f, 0x3c, 0xce, 0xdd, 0x25,
0x29, 0x77, 0xfb, 0x14, 0x45, 0xe3, 0xa8, 0x52, 0xf6, 0x92, 0xcb, 0x17, 0xd3, 0xcb, 0x27, 0xb6,
0x50, 0x4a, 0x6d, 0xe1, 0x16, 0x2c, 0x1f, 0x12, 0xee, 0xf6, 0x43, 0xa4, 0x32, 0x45, 0x4a, 0x82,
0x09, 0x25, 0xdf, 0xb4, 0xf0, 0xb7, 0x0f, 0xf7, 0xb1, 0x3e, 0xea, 0x54, 0xe8, 0x5a, 0x11, 0x88,
0xfa, 0xef, 0x0a, 0xb4, 0x05, 0x7a, 0x70, 0x0e, 0x17, 0xa0, 0x3c, 0x70, 0x26, 0xb6, 0x4f, 0xb7,
0xda, 0xd4, 0xd8, 0x00, 0xbd, 0x09, 0x8d, 0xc1, 0x91, 0x6e, 0xdb, 0x78, 0xd4, 0xb7, 0x75, 0x0b,
0xd3, 0x4d, 0xd5, 0xb4, 0x3a, 0x87, 0xed, 0xea, 0x16, 0xce, 0xb5, 0xb7, 0xeb, 0x50, 0x1f, 0xeb,
0xae, 0x6f, 0xc6, 0xa4, 0x1f, 0x05, 0xa1, 0x2e, 0x54, 0x4d, 0xaf, 0x67, 0x8d, 0x1d, 0xd7, 0xef,
0x94, 0xaf, 0x2b, 0xb7, 0xaa, 0x9a, 0x18, 0x93, 0x15, 0x4c, 0xfa, 0xd7, 0x81, 0xee, 0x1d, 0xf7,
0x36, 0xf9, 0x8e, 0x62, 0x30, 0xf5, 0x4f, 0x15, 0x58, 0xfd, 0xdc, 0xf3, 0xcc, 0xa1, 0x9d, 0xda,
0xd9, 0x2a, 0x54, 0x6c, 0xc7, 0xc0, 0xbd, 0x4d, 0xba, 0xb5, 0xa2, 0xc6, 0x47, 0xe8, 0x12, 0xd4,
0xc6, 0x18, 0xbb, 0x7d, 0xd7, 0x19, 0x05, 0x1b, 0xab, 0x12, 0x80, 0xe6, 0x8c, 0x30, 0xfa, 0x0e,
0xac, 0x78, 0x09, 0x42, 0x4c, 0xaf, 0xea, 0xeb, 0x6f, 0xdd, 0x4d, 0x59, 0xc6, 0xdd, 0xe4, 0xa2,
0x5a, 0x7a, 0xb6, 0xfa, 0x55, 0x01, 0xce, 0x0b, 0x3c, 0xc6, 0x2b, 0xf9, 0x9b, 0x48, 0xde, 0xc3,
0x43, 0xc1, 0x1e, 0x1b, 0xe4, 0x91, 0xbc, 0x38, 0xb2, 0x62, 0xf4, 0xc8, 0x72, 0xa8, 0x7a, 0xf2,
0x3c, 0xca, 0xe9, 0xf3, 0xb8, 0x06, 0x75, 0xfc, 0x62, 0x6c, 0xba, 0xb8, 0x4f, 0x14, 0x87, 0x8a,
0xbc, 0xa4, 0x01, 0x03, 0x1d, 0x98, 0x56, 0xd4, 0x36, 0x96, 0x72, 0xdb, 0x86, 0xfa, 0x67, 0x0a,
0xac, 0xa5, 0x4e, 0x89, 0x1b, 0x9b, 0x06, 0x6d, 0xba, 0xf3, 0x50, 0x32, 0xc4, 0xec, 0x88, 0xc0,
0x6f, 0x4e, 0x13, 0x78, 0x88, 0xae, 0xa5, 0xe6, 0x47, 0x98, 0x2c, 0xe4, 0x67, 0xf2, 0x18, 0xd6,
0xb6, 0xb0, 0xcf, 0x17, 0x20, 0xbf, 0x61, 0x6f, 0x7e, 0x67, 0x15, 0xb7, 0xea, 0x42, 0xd2, 0xaa,
0xd5, 0xbf, 0x2e, 0x08, 0x5b, 0xa4, 0x4b, 0xf5, 0xec, 0x43, 0x07, 0x5d, 0x86, 0x9a, 0x40, 0xe1,
0x5a, 0x11, 0x02, 0xd0, 0x37, 0xa0, 0x4c, 0x38, 0x65, 0x2a, 0xd1, 0x5a, 0x7f, 0x53, 0xbe, 0xa7,
0x08, 0x4d, 0x8d, 0xe1, 0xa3, 0x1e, 0xb4, 0x3c, 0x5f, 0x77, 0xfd, 0xfe, 0xd8, 0xf1, 0xe8, 0x39,
0x53, 0xc5, 0xa9, 0xaf, 0xab, 0x71, 0x0a, 0xc2, 0xad, 0xef, 0x78, 0xc3, 0x3d, 0x8e, 0xa9, 0x35,
0xe9, 0xcc, 0x60, 0x88, 0xbe, 0x80, 0x06, 0xb6, 0x8d, 0x90, 0x50, 0x29, 0x37, 0xa1, 0x3a, 0xb6,
0x0d, 0x41, 0x26, 0x3c, 0x9f, 0x72, 0xfe, 0xf3, 0xf9, 0x6d, 0x05, 0x3a, 0xe9, 0x03, 0x5a, 0xc4,
0x65, 0xdf, 0x67, 0x93, 0x30, 0x3b, 0xa0, 0xa9, 0x16, 0x2e, 0x0e, 0x49, 0xe3, 0x53, 0xd4, 0x3f,
0x54, 0xe0, 0x8d, 0x90, 0x1d, 0xfa, 0xd3, 0xab, 0xd2, 0x16, 0x74, 0x1b, 0xda, 0xa6, 0x3d, 0x18,
0x4d, 0x0c, 0xfc, 0xd8, 0x7e, 0x84, 0xf5, 0x91, 0x7f, 0x74, 0x4a, 0xcf, 0xb0, 0xaa, 0xa5, 0xe0,
0xea, 0x8f, 0x14, 0x58, 0x4d, 0xf2, 0xb5, 0x88, 0x90, 0x7e, 0x09, 0xca, 0xa6, 0x7d, 0xe8, 0x04,
0x32, 0xba, 0x3a, 0xc5, 0x28, 0xc9, 0x5a, 0x0c, 0x59, 0xb5, 0xe0, 0xd2, 0x16, 0xf6, 0x7b, 0xb6,
0x5a, 0xa9, 0xbe, 0xb9, 0xfb, 0xeb, 0x8b, 0xdb, 0x27, 0x19, 0xbb, 0xd3, 0x93, 0xdb, 0xd4, 0x4c,
0x32, 0x99, 0x4c, 0x26, 0x99, 0xf1, 0x30, 0xda, 0x81, 0xec, 0xcc, 0x6a, 0x1c, 0x4f, 0x3c, 0x0d,
0xb6, 0xd7, 0x5b, 0x76, 0x26, 0xd2, 0x2e, 0x52, 0xab, 0xd2, 0x75, 0xdc, 0xae, 0x75, 0x57, 0x55,
0xa7, 0xaa, 0xda, 0x8e, 0x97, 0x87, 0x1d, 0xb1, 0x12, 0xd2, 0x22, 0xc4, 0x72, 0x11, 0x12, 0x3c,
0x20, 0x21, 0x9e, 0x16, 0x10, 0x12, 0xd2, 0x8a, 0x07, 0x40, 0x88, 0x07, 0x5e, 0x56, 0x80, 0xb4,
0x82, 0x07, 0x7e, 0x02, 0xfc, 0x00, 0xfe, 0x00, 0x3a, 0x97, 0x3a, 0x75, 0x3b, 0xd5, 0x5d, 0xee,
0x4e, 0x36, 0x88, 0x7d, 0xf3, 0xf9, 0xfa, 0x3b, 0xdf, 0x39, 0xe7, 0xbb, 0x7f, 0xdf, 0x39, 0x65,
0x68, 0x1b, 0xba, 0xaf, 0xf7, 0x07, 0x8e, 0xe3, 0x1a, 0xf7, 0xc6, 0xae, 0xe3, 0x3b, 0x68, 0xc5,
0x32, 0x47, 0x27, 0x13, 0x8f, 0x8d, 0xee, 0x91, 0x9f, 0xbb, 0x8d, 0x81, 0x63, 0x59, 0x8e, 0xcd,
0x40, 0xdd, 0x96, 0x69, 0xfb, 0xd8, 0xb5, 0xf5, 0x11, 0x1f, 0x37, 0xa2, 0x13, 0xba, 0x0d, 0x6f,
0x70, 0x84, 0x2d, 0x9d, 0x8d, 0xd4, 0x25, 0x28, 0x7f, 0x6e, 0x8d, 0xfd, 0x33, 0xf5, 0x8f, 0x15,
0x68, 0x3c, 0x1a, 0x4d, 0xbc, 0x23, 0x0d, 0x3f, 0x9b, 0x60, 0xcf, 0x47, 0xef, 0x43, 0xe9, 0xa9,
0xee, 0xe1, 0x8e, 0x72, 0x43, 0xb9, 0x5d, 0x5f, 0xbf, 0x72, 0x2f, 0xb6, 0x2a, 0x5f, 0x6f, 0xc7,
0x1b, 0x6e, 0xe8, 0x1e, 0xd6, 0x28, 0x26, 0x42, 0x50, 0x32, 0x9e, 0xf6, 0x36, 0x3b, 0x85, 0x1b,
0xca, 0xed, 0xa2, 0x46, 0xff, 0x46, 0xd7, 0x00, 0x3c, 0x3c, 0xb4, 0xb0, 0xed, 0xf7, 0x36, 0xbd,
0x4e, 0xf1, 0x46, 0xf1, 0x76, 0x51, 0x8b, 0x40, 0x90, 0x0a, 0x8d, 0x81, 0x33, 0x1a, 0xe1, 0x81,
0x6f, 0x3a, 0x76, 0x6f, 0xb3, 0x53, 0xa2, 0x73, 0x63, 0x30, 0xf5, 0xbf, 0x14, 0x68, 0xf2, 0xad,
0x79, 0x63, 0xc7, 0xf6, 0x30, 0xfa, 0x10, 0x2a, 0x9e, 0xaf, 0xfb, 0x13, 0x8f, 0xef, 0xee, 0x75,
0xe9, 0xee, 0xf6, 0x29, 0x8a, 0xc6, 0x51, 0xa5, 0xdb, 0x4b, 0x2e, 0x5f, 0x4c, 0x2f, 0x9f, 0x38,
0x42, 0x29, 0x75, 0x84, 0xdb, 0xb0, 0x7c, 0x48, 0x76, 0xb7, 0x1f, 0x22, 0x95, 0x29, 0x52, 0x12,
0x4c, 0x28, 0xf9, 0xa6, 0x85, 0xbf, 0x79, 0xb8, 0x8f, 0xf5, 0x51, 0xa7, 0x42, 0xd7, 0x8a, 0x40,
0xd4, 0x7f, 0x57, 0xa0, 0x2d, 0xd0, 0x03, 0x39, 0x5c, 0x82, 0xf2, 0xc0, 0x99, 0xd8, 0x3e, 0x3d,
0x6a, 0x53, 0x63, 0x03, 0xf4, 0x06, 0x34, 0x06, 0x47, 0xba, 0x6d, 0xe3, 0x51, 0xdf, 0xd6, 0x2d,
0x4c, 0x0f, 0x55, 0xd3, 0xea, 0x1c, 0xb6, 0xab, 0x5b, 0x38, 0xd7, 0xd9, 0x6e, 0x40, 0x7d, 0xac,
0xbb, 0xbe, 0x19, 0xe3, 0x7e, 0x14, 0x84, 0xba, 0x50, 0x35, 0xbd, 0x9e, 0x35, 0x76, 0x5c, 0xbf,
0x53, 0xbe, 0xa1, 0xdc, 0xae, 0x6a, 0x62, 0x4c, 0x56, 0x30, 0xe9, 0x5f, 0x07, 0xba, 0x77, 0xdc,
0xdb, 0xe4, 0x27, 0x8a, 0xc1, 0xd4, 0x3f, 0x53, 0x60, 0xf5, 0x33, 0xcf, 0x33, 0x87, 0x76, 0xea,
0x64, 0xab, 0x50, 0xb1, 0x1d, 0x03, 0xf7, 0x36, 0xe9, 0xd1, 0x8a, 0x1a, 0x1f, 0xa1, 0xd7, 0xa1,
0x36, 0xc6, 0xd8, 0xed, 0xbb, 0xce, 0x28, 0x38, 0x58, 0x95, 0x00, 0x34, 0x67, 0x84, 0xd1, 0xb7,
0x60, 0xc5, 0x4b, 0x10, 0x62, 0x7a, 0x55, 0x5f, 0x7f, 0xf3, 0x5e, 0xca, 0x32, 0xee, 0x25, 0x17,
0xd5, 0xd2, 0xb3, 0xd5, 0xaf, 0x0a, 0x70, 0x51, 0xe0, 0xb1, 0xbd, 0x92, 0xbf, 0x09, 0xe7, 0x3d,
0x3c, 0x14, 0xdb, 0x63, 0x83, 0x3c, 0x9c, 0x17, 0x22, 0x2b, 0x46, 0x45, 0x96, 0x43, 0xd5, 0x93,
0xf2, 0x28, 0xa7, 0xe5, 0x71, 0x1d, 0xea, 0xf8, 0xf9, 0xd8, 0x74, 0x71, 0x9f, 0x28, 0x0e, 0x65,
0x79, 0x49, 0x03, 0x06, 0x3a, 0x30, 0xad, 0xa8, 0x6d, 0x2c, 0xe5, 0xb6, 0x0d, 0xf5, 0xcf, 0x15,
0x58, 0x4b, 0x49, 0x89, 0x1b, 0x9b, 0x06, 0x6d, 0x7a, 0xf2, 0x90, 0x33, 0xc4, 0xec, 0x08, 0xc3,
0x6f, 0x4d, 0x63, 0x78, 0x88, 0xae, 0xa5, 0xe6, 0x47, 0x36, 0x59, 0xc8, 0xbf, 0xc9, 0x63, 0x58,
0xdb, 0xc2, 0x3e, 0x5f, 0x80, 0xfc, 0x86, 0xbd, 0xf9, 0x9d, 0x55, 0xdc, 0xaa, 0x0b, 0x49, 0xab,
0x56, 0xff, 0xa6, 0x20, 0x6c, 0x91, 0x2e, 0xd5, 0xb3, 0x0f, 0x1d, 0x74, 0x05, 0x6a, 0x02, 0x85,
0x6b, 0x45, 0x08, 0x40, 0x5f, 0x83, 0x32, 0xd9, 0x29, 0x53, 0x89, 0xd6, 0xfa, 0x1b, 0xf2, 0x33,
0x45, 0x68, 0x6a, 0x0c, 0x1f, 0xf5, 0xa0, 0xe5, 0xf9, 0xba, 0xeb, 0xf7, 0xc7, 0x8e, 0x47, 0xe5,
0x4c, 0x15, 0xa7, 0xbe, 0xae, 0xc6, 0x29, 0x08, 0xb7, 0xbe, 0xe3, 0x0d, 0xf7, 0x38, 0xa6, 0xd6,
0xa4, 0x33, 0x83, 0x21, 0xfa, 0x1c, 0x1a, 0xd8, 0x36, 0x42, 0x42, 0xa5, 0xdc, 0x84, 0xea, 0xd8,
0x36, 0x04, 0x99, 0x50, 0x3e, 0xe5, 0xfc, 0xf2, 0xf9, 0x1d, 0x05, 0x3a, 0x69, 0x01, 0x2d, 0xe2,
0xb2, 0x1f, 0xb0, 0x49, 0x98, 0x09, 0x68, 0xaa, 0x85, 0x0b, 0x21, 0x69, 0x7c, 0x8a, 0xfa, 0x47,
0x0a, 0xbc, 0x16, 0x6e, 0x87, 0xfe, 0xf4, 0xb2, 0xb4, 0x05, 0xdd, 0x81, 0xb6, 0x69, 0x0f, 0x46,
0x13, 0x03, 0x3f, 0xb6, 0xbf, 0xc0, 0xfa, 0xc8, 0x3f, 0x3a, 0xa3, 0x32, 0xac, 0x6a, 0x29, 0xb8,
0xfa, 0x03, 0x05, 0x56, 0x93, 0xfb, 0x5a, 0x84, 0x49, 0xbf, 0x04, 0x65, 0xd3, 0x3e, 0x74, 0x02,
0x1e, 0x5d, 0x9b, 0x62, 0x94, 0x64, 0x2d, 0x86, 0xac, 0x5a, 0xf0, 0xfa, 0x16, 0xf6, 0x7b, 0xb6,
0x87, 0x5d, 0x7f, 0xc3, 0xb4, 0x47, 0xce, 0x70, 0x4f, 0xf7, 0x8f, 0x16, 0x30, 0xa8, 0x98, 0x6d,
0x14, 0x12, 0xb6, 0xa1, 0xfe, 0x54, 0x81, 0xcb, 0xf2, 0xf5, 0xf8, 0xd6, 0xbb, 0x50, 0x3d, 0x34,
0xf1, 0xc8, 0x20, 0xf2, 0x55, 0xa8, 0x7c, 0xc5, 0x98, 0x18, 0xd6, 0x98, 0x20, 0xf3, 0x1d, 0xbe,
0x99, 0xa1, 0xcd, 0xfb, 0xbe, 0x6b, 0xda, 0xc3, 0x6d, 0xd3, 0xf3, 0x35, 0x86, 0x1f, 0x91, 0x67,
0x31, 0xbf, 0x1a, 0xff, 0x96, 0x02, 0x57, 0xb7, 0xb0, 0xff, 0x40, 0xf8, 0x65, 0xf2, 0xbb, 0xe9,
0xf9, 0xe6, 0xc0, 0x7b, 0xb9, 0xb9, 0x51, 0x8e, 0x00, 0xad, 0xfe, 0x44, 0x81, 0x6b, 0x99, 0xcc,
0x70, 0xd1, 0x71, 0xbf, 0x13, 0x78, 0x65, 0xb9, 0xdf, 0xf9, 0x55, 0x7c, 0xfa, 0xa5, 0x3e, 0x9a,
0xe0, 0x3d, 0xdd, 0x74, 0x99, 0xdf, 0x99, 0xd3, 0x0b, 0xff, 0x95, 0x02, 0x57, 0xb6, 0xb0, 0xbf,
0x17, 0xc4, 0xa4, 0xd7, 0x28, 0x1d, 0x82, 0x13, 0x89, 0x8d, 0x41, 0x72, 0x16, 0x83, 0xa9, 0xbf,
0xc3, 0x8e, 0x53, 0xca, 0xef, 0x6b, 0x11, 0xe0, 0x55, 0x6a, 0x09, 0x11, 0x93, 0x7c, 0xc0, 0x52,
0x07, 0x2e, 0x3e, 0xf5, 0x4f, 0x14, 0xb8, 0xf8, 0xf9, 0xe0, 0xd9, 0xc4, 0x74, 0x31, 0x47, 0xda,
0x76, 0x06, 0xc7, 0xf3, 0x0b, 0x37, 0x4c, 0xb3, 0x0a, 0xb1, 0x34, 0x6b, 0x56, 0x6a, 0xbe, 0x0a,
0x15, 0x9f, 0xe5, 0x75, 0x2c, 0x53, 0xe1, 0x23, 0xca, 0x9f, 0x86, 0x47, 0x58, 0xf7, 0xfe, 0x6f,
0xf2, 0xf7, 0x93, 0x12, 0x34, 0xbe, 0xe4, 0xe9, 0x18, 0x8d, 0xda, 0x49, 0x4d, 0x52, 0xe4, 0x89,
0x57, 0x24, 0x83, 0x93, 0x25, 0x75, 0x5b, 0xd0, 0xf4, 0x30, 0x3e, 0x9e, 0x27, 0x46, 0x37, 0xc8,
0x44, 0x11, 0x5b, 0xb7, 0x61, 0x65, 0x62, 0xd3, 0xd2, 0x00, 0x1b, 0x5c, 0x80, 0x4c, 0x73, 0x67,
0xfb, 0xee, 0xf4, 0x44, 0xf4, 0x88, 0x57, 0x1f, 0x11, 0x5a, 0xe5, 0x5c, 0xb4, 0x92, 0xd3, 0x50,
0x0f, 0xda, 0x86, 0xeb, 0x8c, 0xc7, 0xd8, 0xe8, 0x7b, 0x01, 0xa9, 0x4a, 0x3e, 0x52, 0x7c, 0x9e,
0x20, 0xf5, 0x01, 0x9c, 0x4f, 0x72, 0xda, 0x33, 0x48, 0x42, 0x4a, 0xce, 0x50, 0xf6, 0x13, 0xba,
0x03, 0x2b, 0x69, 0xfc, 0x2a, 0xc5, 0x4f, 0xff, 0x80, 0xde, 0x07, 0x94, 0x60, 0x95, 0xa0, 0xd7,
0x18, 0x7a, 0x9c, 0x99, 0x9e, 0xe1, 0xa9, 0x3f, 0x56, 0x60, 0xf5, 0x89, 0xee, 0x0f, 0x8e, 0x36,
0x2d, 0x6e, 0x6b, 0x0b, 0xf8, 0xaa, 0x4f, 0xa1, 0xf6, 0x9c, 0xeb, 0x45, 0x10, 0x90, 0xae, 0x49,
0xe4, 0x13, 0xd5, 0x40, 0x2d, 0x9c, 0xa1, 0xfe, 0x5c, 0x81, 0x0b, 0x0f, 0x23, 0x75, 0xe1, 0x6b,
0xf0, 0x9a, 0xb3, 0x0a, 0xda, 0x9b, 0xd0, 0xb2, 0x74, 0xf7, 0x38, 0x55, 0xcf, 0x26, 0xa0, 0xea,
0x0b, 0x00, 0x3e, 0xda, 0xf1, 0x86, 0x73, 0xf0, 0xff, 0x09, 0x2c, 0xf1, 0x55, 0xb9, 0xfb, 0x9c,
0xa5, 0x67, 0x01, 0xba, 0xfa, 0xcf, 0x0a, 0xb4, 0xc2, 0x90, 0x48, 0x8d, 0xbc, 0x05, 0x05, 0x61,
0xda, 0x85, 0xde, 0x26, 0xfa, 0x14, 0x2a, 0xac, 0xd1, 0xc1, 0x69, 0xdf, 0x88, 0xd3, 0xe6, 0x4d,
0x90, 0x48, 0x5c, 0xa5, 0x00, 0x8d, 0x4f, 0x22, 0x32, 0x12, 0x51, 0x44, 0x38, 0x9f, 0x10, 0x82,
0x7a, 0xb0, 0x1c, 0x4f, 0xd9, 0x03, 0x13, 0xbe, 0x9e, 0x15, 0x3c, 0x36, 0x75, 0x5f, 0xa7, 0xb1,
0xa3, 0x15, 0xcb, 0xd8, 0x3d, 0xf5, 0xf7, 0x2a, 0x50, 0x8f, 0xec, 0x32, 0xb5, 0x93, 0xe4, 0x91,
0x16, 0x66, 0xd7, 0x8d, 0xc5, 0x74, 0xdd, 0x78, 0x03, 0x5a, 0x26, 0x4d, 0xbe, 0xfa, 0x5c, 0x15,
0xa9, 0xd7, 0xac, 0x69, 0x4d, 0x06, 0xe5, 0x76, 0x81, 0xae, 0x42, 0xdd, 0x9e, 0x58, 0x7d, 0xe7,
0xb0, 0xef, 0x3a, 0x27, 0x1e, 0x2f, 0x40, 0x6b, 0xf6, 0xc4, 0xfa, 0xf6, 0xa1, 0xe6, 0x9c, 0x78,
0x61, 0x8d, 0x53, 0x39, 0x63, 0x8d, 0x73, 0x15, 0xea, 0x96, 0xfe, 0x82, 0x50, 0xed, 0xdb, 0x13,
0x8b, 0xd6, 0xa6, 0x45, 0xad, 0x66, 0xe9, 0x2f, 0x34, 0xe7, 0x64, 0x77, 0x62, 0xa1, 0x5b, 0xd0,
0x1e, 0xe9, 0x9e, 0xdf, 0x8f, 0x16, 0xb7, 0x55, 0x5a, 0xdc, 0xb6, 0x08, 0xfc, 0x8b, 0xb0, 0xc0,
0x4d, 0x57, 0x4b, 0xb5, 0x05, 0xaa, 0x25, 0xc3, 0x1a, 0x85, 0x84, 0x20, 0x7f, 0xb5, 0x64, 0x58,
0x23, 0x41, 0xe6, 0x13, 0x58, 0x7a, 0x4a, 0x53, 0x5a, 0xaf, 0x53, 0xcf, 0x74, 0x98, 0x0f, 0x49,
0x36, 0xcb, 0x32, 0x5f, 0x2d, 0x40, 0x47, 0xdf, 0x84, 0x1a, 0xcd, 0x24, 0xe8, 0xdc, 0x46, 0xae,
0xb9, 0xe1, 0x04, 0x32, 0xdb, 0xc0, 0x23, 0x5f, 0xa7, 0xb3, 0x9b, 0xf9, 0x66, 0x8b, 0x09, 0xc4,
0x49, 0x0f, 0x5c, 0xac, 0xfb, 0xd8, 0xd8, 0x38, 0x7d, 0xe0, 0x58, 0x63, 0x9d, 0x2a, 0x53, 0xa7,
0x45, 0xcb, 0x16, 0xd9, 0x4f, 0xc4, 0x31, 0x0c, 0xc4, 0xe8, 0xa1, 0xeb, 0x58, 0x9d, 0x65, 0xe6,
0x18, 0xe2, 0x50, 0x74, 0x05, 0x20, 0x70, 0xcf, 0xba, 0xdf, 0x69, 0xd3, 0x53, 0xac, 0x71, 0xc8,
0xe7, 0xb4, 0x77, 0x65, 0x7a, 0x7d, 0xd6, 0x25, 0x32, 0xed, 0x61, 0x67, 0x85, 0xae, 0x58, 0x0f,
0xda, 0x4a, 0xa6, 0x3d, 0x54, 0x7f, 0x08, 0x17, 0x42, 0x25, 0x8a, 0x1c, 0x58, 0xfa, 0xec, 0x95,
0x79, 0xcf, 0x7e, 0x7a, 0xbd, 0xf2, 0x6f, 0x25, 0x58, 0xdd, 0xd7, 0x9f, 0xe3, 0x57, 0x5f, 0x1a,
0xe5, 0x72, 0xd9, 0xdb, 0xb0, 0x42, 0xab, 0xa1, 0xf5, 0x08, 0x3f, 0x53, 0x72, 0x86, 0xe8, 0x89,
0xa7, 0x27, 0xa2, 0x6f, 0x91, 0x64, 0x07, 0x0f, 0x8e, 0xf7, 0x1c, 0x33, 0xcc, 0x17, 0xae, 0x48,
0xe8, 0x3c, 0x10, 0x58, 0x5a, 0x74, 0x06, 0xda, 0x4b, 0x7b, 0x3f, 0x96, 0x29, 0xbc, 0x33, 0xb5,
0x40, 0x0f, 0xa5, 0x9f, 0x74, 0x82, 0xa8, 0x03, 0x4b, 0x3c, 0xcc, 0x53, 0xd7, 0x50, 0xd5, 0x82,
0x21, 0xda, 0x83, 0xf3, 0x6c, 0x07, 0xfb, 0x5c, 0xef, 0xd9, 0xe6, 0xab, 0xb9, 0x36, 0x2f, 0x9b,
0x1a, 0x37, 0x9b, 0xda, 0x59, 0xcd, 0xa6, 0x03, 0x4b, 0x5c, 0x95, 0xa9, 0xbb, 0xa8, 0x6a, 0xc1,
0x90, 0x1c, 0x73, 0xa8, 0xd4, 0x75, 0xfa, 0x5b, 0x08, 0x20, 0x65, 0x25, 0x84, 0xf2, 0x9c, 0xd1,
0x4a, 0xfa, 0x0c, 0xaa, 0x42, 0xc3, 0x0b, 0xb9, 0x35, 0x5c, 0xcc, 0x49, 0xba, 0xf1, 0x62, 0xc2,
0x8d, 0xab, 0xff, 0xa2, 0x40, 0x63, 0x93, 0x6c, 0x69, 0xdb, 0x19, 0xd2, 0xa0, 0x73, 0x03, 0x5a,
0x2e, 0x1e, 0x38, 0xae, 0xd1, 0xc7, 0xb6, 0xef, 0x9a, 0x98, 0x75, 0x20, 0x4a, 0x5a, 0x93, 0x41,
0xbf, 0x60, 0x40, 0x82, 0x46, 0x3c, 0xb3, 0xe7, 0xeb, 0xd6, 0xb8, 0x7f, 0x48, 0x3c, 0x40, 0x81,
0xa1, 0x09, 0x28, 0x75, 0x00, 0x6f, 0x42, 0x23, 0x44, 0xf3, 0x1d, 0xba, 0x7e, 0x49, 0xab, 0x0b,
0xd8, 0x81, 0x83, 0xde, 0x86, 0x16, 0x95, 0x69, 0x7f, 0xe4, 0x0c, 0xfb, 0xa4, 0x5a, 0xe7, 0xf1,
0xa8, 0x61, 0x70, 0xb6, 0xc8, 0x59, 0xc5, 0xb1, 0x3c, 0xf3, 0x07, 0x98, 0x47, 0x24, 0x81, 0xb5,
0x6f, 0xfe, 0x00, 0x93, 0x74, 0xa0, 0x49, 0xc2, 0xeb, 0xae, 0x63, 0xe0, 0x83, 0x39, 0x93, 0x91,
0x1c, 0x6d, 0xdd, 0xcb, 0x50, 0x13, 0x3b, 0xe0, 0x5b, 0x0a, 0x01, 0xe8, 0x21, 0xb4, 0x82, 0xb4,
0xb9, 0xcf, 0xaa, 0xc9, 0x52, 0x66, 0x72, 0x18, 0x09, 0x90, 0x9e, 0xd6, 0x0c, 0xa6, 0xd1, 0xa1,
0xfa, 0x10, 0x1a, 0xd1, 0x9f, 0xc9, 0xaa, 0xfb, 0x49, 0x45, 0x11, 0x00, 0xa2, 0x8d, 0xbb, 0x13,
0x8b, 0x9c, 0x29, 0x77, 0x2c, 0xc1, 0x50, 0xfd, 0x91, 0x02, 0x4d, 0x1e, 0xd5, 0xf7, 0xc5, 0x05,
0x08, 0xdd, 0x9a, 0x42, 0xb7, 0x46, 0xff, 0x46, 0xbf, 0x1c, 0xef, 0x59, 0xbe, 0x2d, 0x75, 0x02,
0x94, 0x08, 0x4d, 0xa0, 0x63, 0x21, 0x3d, 0x4f, 0xff, 0xe2, 0x2b, 0xa2, 0x68, 0xfc, 0x68, 0xa8,
0xa2, 0x75, 0x60, 0x49, 0x37, 0x0c, 0x17, 0x7b, 0x1e, 0xe7, 0x23, 0x18, 0x92, 0x5f, 0x9e, 0x63,
0xd7, 0x0b, 0x54, 0xbe, 0xa8, 0x05, 0x43, 0xf4, 0x4d, 0xa8, 0x8a, 0x8c, 0xbb, 0x28, 0xcb, 0xb2,
0xa2, 0x7c, 0xf2, 0x6a, 0x5b, 0xcc, 0x50, 0xff, 0xa6, 0x00, 0x2d, 0x2e, 0xb0, 0x0d, 0x1e, 0x76,
0xa7, 0x1b, 0xdf, 0x06, 0x34, 0x0e, 0x43, 0xdb, 0x9f, 0xd6, 0x57, 0x8b, 0xba, 0x88, 0xd8, 0x9c,
0x59, 0x06, 0x18, 0x0f, 0xfc, 0xa5, 0x85, 0x02, 0x7f, 0xf9, 0xac, 0x1e, 0x2c, 0x9d, 0x0a, 0x56,
0x24, 0xa9, 0xa0, 0xfa, 0x6b, 0x50, 0x8f, 0x10, 0xa0, 0x1e, 0x9a, 0x35, 0xe4, 0xb8, 0xc4, 0x82,
0x21, 0xfa, 0x28, 0x4c, 0x7f, 0x98, 0xa8, 0x2e, 0x4a, 0x78, 0x49, 0x64, 0x3e, 0xea, 0x3f, 0x2a,
0x50, 0xe1, 0x94, 0xaf, 0x41, 0x9d, 0x3b, 0x1d, 0x9a, 0x1a, 0x32, 0xea, 0xc0, 0x41, 0x24, 0x37,
0x7c, 0x79, 0x5e, 0xe7, 0x22, 0x54, 0x13, 0xfe, 0x66, 0x89, 0x87, 0x85, 0xe0, 0xa7, 0x88, 0x93,
0x21, 0x3f, 0x11, 0xff, 0x82, 0x2e, 0x40, 0x79, 0xe4, 0x0c, 0xc5, 0x05, 0x17, 0x1b, 0x90, 0x4a,
0x6e, 0x6d, 0x0b, 0xfb, 0x1a, 0x1e, 0x38, 0xcf, 0xb1, 0x7b, 0xba, 0x78, 0x23, 0xf7, 0x7e, 0x44,
0xcd, 0x73, 0x16, 0x96, 0x62, 0x02, 0xba, 0x1f, 0x1e, 0x42, 0x51, 0xd6, 0xc5, 0x8a, 0xfa, 0x1d,
0xae, 0xa4, 0xe1, 0x61, 0xfc, 0x2e, 0x6b, 0x49, 0xc7, 0xb7, 0x32, 0x6f, 0xb6, 0xf3, 0x52, 0xea,
0x15, 0xf5, 0x0f, 0x14, 0xb8, 0xb8, 0x85, 0xfd, 0x87, 0xf1, 0x26, 0xc5, 0xeb, 0xe6, 0xca, 0x82,
0xae, 0x8c, 0xa9, 0x45, 0x4e, 0xbd, 0x0b, 0x55, 0xd1, 0x6e, 0x61, 0x17, 0x0b, 0x62, 0xac, 0xfe,
0xa6, 0x02, 0x1d, 0xbe, 0x0a, 0x5d, 0x93, 0xe4, 0xe2, 0x23, 0xec, 0x63, 0xe3, 0xeb, 0x2e, 0xb8,
0xff, 0x41, 0x81, 0x76, 0x34, 0x0e, 0x50, 0x57, 0xfe, 0x31, 0x94, 0x69, 0x5f, 0x83, 0x73, 0x30,
0x53, 0x59, 0x19, 0x36, 0x71, 0x24, 0x34, 0xf9, 0x3b, 0x10, 0x21, 0x8b, 0x0f, 0xc3, 0x60, 0x54,
0x3c, 0x7b, 0x30, 0xe2, 0xc1, 0xd9, 0x99, 0x10, 0xba, 0xac, 0x21, 0x18, 0x02, 0xd4, 0x5f, 0x81,
0xd5, 0xb0, 0x8e, 0x61, 0xf3, 0xe6, 0xd5, 0x24, 0xf5, 0x3f, 0x14, 0x38, 0xbf, 0x7f, 0x6a, 0x0f,
0x92, 0x3a, 0xb9, 0x0a, 0x95, 0xf1, 0x48, 0x0f, 0x1b, 0x8c, 0x7c, 0x44, 0x33, 0x0b, 0xb6, 0x36,
0x36, 0x88, 0x5b, 0x62, 0x9b, 0xae, 0x0b, 0xd8, 0x81, 0x33, 0x33, 0x5a, 0xdc, 0x10, 0x85, 0x17,
0x36, 0x98, 0x03, 0x64, 0x5d, 0x9b, 0xa6, 0x80, 0x52, 0x07, 0xf8, 0x29, 0x00, 0x8d, 0x11, 0xfd,
0xb3, 0xc4, 0x05, 0x3a, 0x63, 0x9b, 0x78, 0x81, 0x9f, 0x15, 0xa0, 0x13, 0x91, 0xd2, 0xd7, 0x1d,
0x32, 0x33, 0x12, 0xfd, 0xe2, 0x4b, 0x4a, 0xf4, 0x4b, 0x8b, 0x87, 0xc9, 0xb2, 0x2c, 0x4c, 0xfe,
0x7d, 0x01, 0x5a, 0xa1, 0xd4, 0xf6, 0x46, 0xba, 0x9d, 0xa9, 0x09, 0xfb, 0x22, 0x45, 0x8c, 0xcb,
0xe9, 0x3d, 0x99, 0xa2, 0x67, 0x1c, 0x84, 0x96, 0x20, 0x41, 0x8a, 0x6d, 0x56, 0x8b, 0xd1, 0x96,
0x09, 0x4f, 0x4b, 0x99, 0x45, 0x99, 0x16, 0x46, 0x77, 0x00, 0x71, 0x33, 0xe8, 0x9b, 0x76, 0xdf,
0xc3, 0x03, 0xc7, 0x36, 0x98, 0x81, 0x94, 0xb5, 0x36, 0xff, 0xa5, 0x67, 0xef, 0x33, 0x38, 0xfa,
0x18, 0x4a, 0xfe, 0xe9, 0x98, 0x05, 0xc0, 0x96, 0x34, 0x84, 0x84, 0x7c, 0x1d, 0x9c, 0x8e, 0xb1,
0x46, 0xd1, 0x83, 0x87, 0x2d, 0xbe, 0xab, 0x3f, 0xe7, 0xd9, 0x44, 0x49, 0x8b, 0x40, 0x88, 0xc9,
0x07, 0x32, 0x5c, 0x62, 0x51, 0x97, 0x0f, 0xd5, 0xbf, 0x2d, 0x40, 0x3b, 0x24, 0xa9, 0x61, 0x6f,
0x32, 0xca, 0xb6, 0xa4, 0xe9, 0x75, 0xf4, 0x2c, 0x23, 0xfa, 0x16, 0xd4, 0xf9, 0x79, 0x9e, 0x41,
0x1f, 0x80, 0x4d, 0xd9, 0x9e, 0xa2, 0xa0, 0xe5, 0x97, 0xa4, 0xa0, 0x95, 0x33, 0x2a, 0xa8, 0xfa,
0x53, 0x05, 0xde, 0x48, 0x79, 0xb5, 0xa9, 0x02, 0x9c, 0x9e, 0xed, 0x73, 0x6f, 0x97, 0x24, 0xc9,
0x1d, 0xec, 0x7d, 0xa8, 0xb8, 0x94, 0x3a, 0xbf, 0xf8, 0x78, 0x6b, 0xaa, 0x72, 0x30, 0x46, 0x34,
0x3e, 0x45, 0xfd, 0x7d, 0x05, 0xd6, 0xd2, 0xac, 0x2e, 0x10, 0x35, 0x37, 0x60, 0x89, 0x91, 0x0e,
0x6c, 0xe8, 0xd6, 0x74, 0x1b, 0x0a, 0x85, 0xa3, 0x05, 0x13, 0xd5, 0x7d, 0x58, 0x0d, 0x82, 0x6b,
0x28, 0xe0, 0x1d, 0xec, 0xeb, 0x53, 0x72, 0xdd, 0x6b, 0x50, 0x67, 0x49, 0x13, 0xcb, 0x21, 0x59,
0x95, 0x08, 0x4f, 0x45, 0x73, 0x45, 0xfd, 0x73, 0x05, 0x2e, 0xd0, 0xe8, 0x94, 0xbc, 0x69, 0xc8,
0x73, 0x0b, 0xa5, 0x8a, 0x22, 0x94, 0x14, 0x9c, 0x6c, 0x6b, 0x35, 0x2d, 0x06, 0x93, 0x75, 0x9e,
0x8b, 0x73, 0x76, 0x9e, 0xb7, 0xe1, 0x8d, 0x04, 0xab, 0x0b, 0x1c, 0x09, 0xd9, 0xf9, 0xea, 0x7e,
0xfc, 0xf9, 0xc7, 0xfc, 0xe9, 0xda, 0x15, 0x71, 0x47, 0xd1, 0x37, 0x8d, 0xa4, 0xad, 0x1b, 0xe8,
0x33, 0xa8, 0xd9, 0xf8, 0xa4, 0x1f, 0xcd, 0x16, 0x72, 0xb4, 0xa2, 0xab, 0x36, 0x3e, 0xa1, 0x7f,
0xa9, 0xbb, 0xb0, 0x96, 0x62, 0x75, 0x91, 0xbd, 0xff, 0x9d, 0x02, 0x17, 0x37, 0x5d, 0x67, 0xfc,
0xa5, 0xe9, 0xfa, 0x13, 0x7d, 0x14, 0xbf, 0xd1, 0x7d, 0x35, 0xdd, 0x88, 0x47, 0x91, 0xbc, 0x91,
0x29, 0xc0, 0x1d, 0x89, 0x09, 0xa4, 0x99, 0xe2, 0x9b, 0x8e, 0x64, 0x99, 0xff, 0x5d, 0x94, 0x31,
0xcf, 0xf1, 0x66, 0x04, 0xfe, 0x3c, 0x69, 0xb5, 0xb4, 0x79, 0x59, 0x9c, 0xb7, 0x79, 0x99, 0xe1,
0x85, 0x4b, 0x2f, 0xc9, 0x0b, 0x9f, 0xb9, 0x9a, 0x7e, 0x04, 0xf1, 0xc6, 0x32, 0x0d, 0x7f, 0x73,
0x75, 0xa4, 0x37, 0x00, 0xc2, 0x26, 0x2b, 0x7f, 0xbd, 0x97, 0x87, 0x4c, 0x64, 0x16, 0x39, 0x2d,
0x11, 0xf1, 0xe8, 0xfd, 0x49, 0xac, 0xed, 0xf7, 0x1d, 0xe8, 0xca, 0xb4, 0x74, 0x11, 0xcd, 0xff,
0x59, 0x01, 0xa0, 0x27, 0x1e, 0x7c, 0xce, 0xe7, 0xcc, 0xdf, 0x82, 0x66, 0xa8, 0x30, 0xa1, 0xbd,
0x47, 0xb5, 0xc8, 0x20, 0x26, 0x21, 0x2a, 0x31, 0x82, 0x93, 0xaa, 0xce, 0x0c, 0x4a, 0x27, 0x62,
0x35, 0x4c, 0x29, 0x92, 0xfe, 0xf3, 0x12, 0xd4, 0x5c, 0xe7, 0xa4, 0x4f, 0xcc, 0xcc, 0x08, 0x5e,
0xb4, 0xba, 0xce, 0x09, 0x31, 0x3e, 0x03, 0xad, 0xc1, 0x92, 0xaf, 0x7b, 0xc7, 0x84, 0x7e, 0x25,
0xf2, 0xa8, 0xc0, 0x40, 0x17, 0xa0, 0x7c, 0x68, 0x8e, 0x30, 0xbb, 0xc3, 0xae, 0x69, 0x6c, 0x80,
0xbe, 0x11, 0x3c, 0xbd, 0xaa, 0xe6, 0x7e, 0x38, 0xc2, 0x5e, 0x5f, 0xfd, 0x5c, 0x81, 0xe5, 0x50,
0x6a, 0xd4, 0x01, 0x11, 0x9f, 0x46, 0xfd, 0xd9, 0x03, 0xc7, 0x60, 0xae, 0xa2, 0x95, 0xe1, 0xd2,
0xd9, 0x44, 0xe6, 0xb5, 0xc2, 0x29, 0xd3, 0x0a, 0x49, 0xb2, 0x2f, 0xb2, 0x69, 0xd3, 0x08, 0xee,
0x32, 0x2b, 0xae, 0x73, 0xd2, 0x33, 0x84, 0x34, 0xd8, 0x73, 0x55, 0x56, 0x36, 0x11, 0x69, 0x3c,
0xa0, 0x2f, 0x56, 0xdf, 0x82, 0x26, 0x76, 0x5d, 0xc7, 0xed, 0x5b, 0xd8, 0xf3, 0xf4, 0x21, 0xe6,
0x09, 0x70, 0x83, 0x02, 0x77, 0x18, 0x4c, 0xfd, 0xa7, 0x22, 0xb4, 0xc2, 0xad, 0x04, 0x37, 0x98,
0xa6, 0x11, 0xdc, 0x60, 0x9a, 0xe4, 0xe8, 0xc0, 0x65, 0xae, 0x50, 0x1c, 0xee, 0x46, 0xa1, 0xa3,
0x68, 0x35, 0x0e, 0xed, 0x19, 0x24, 0xae, 0x12, 0x23, 0xb3, 0x1d, 0x03, 0x87, 0x87, 0x0b, 0x01,
0x88, 0x9f, 0x6d, 0x4c, 0x47, 0x4a, 0x39, 0x74, 0xa4, 0x9c, 0x43, 0x47, 0x2a, 0x12, 0x1d, 0x59,
0x85, 0xca, 0xd3, 0xc9, 0xe0, 0x18, 0xfb, 0x3c, 0x5d, 0xe5, 0xa3, 0xb8, 0xee, 0x54, 0x13, 0xba,
0x23, 0x54, 0xa4, 0x16, 0x55, 0x91, 0x4b, 0x50, 0x63, 0x57, 0x69, 0x7d, 0xdf, 0xa3, 0x17, 0x06,
0x45, 0xad, 0xca, 0x00, 0x07, 0x1e, 0xfa, 0x24, 0xc8, 0xc7, 0xea, 0x32, 0x63, 0xa7, 0x5e, 0x27,
0xa1, 0x25, 0x41, 0x36, 0xf6, 0x0e, 0x2c, 0x47, 0xc4, 0x41, 0x63, 0x44, 0x83, 0xb2, 0xda, 0x0a,
0xc1, 0x34, 0x4c, 0xdc, 0x80, 0x56, 0x28, 0x12, 0x8a, 0xd7, 0x64, 0x55, 0x8c, 0x80, 0x12, 0x34,
0xf5, 0xfb, 0x80, 0xc2, 0x95, 0x16, 0x4b, 0xcd, 0x12, 0x47, 0x59, 0x48, 0x1e, 0xa5, 0xfa, 0x17,
0x0a, 0xac, 0x44, 0x17, 0x9b, 0x37, 0x48, 0x7e, 0x06, 0x75, 0x76, 0xbd, 0xd2, 0x27, 0x46, 0xca,
0x5b, 0x1a, 0x57, 0xa6, 0xca, 0x50, 0x83, 0xf0, 0x71, 0x3a, 0x51, 0x85, 0x13, 0xc7, 0x3d, 0x36,
0xed, 0x61, 0x9f, 0x70, 0x16, 0x98, 0x46, 0x83, 0x03, 0x77, 0x09, 0x4c, 0xfd, 0xb1, 0x02, 0x57,
0x1f, 0x8f, 0x0d, 0xdd, 0xc7, 0x91, 0x6c, 0x61, 0xd1, 0xf7, 0x6e, 0x1f, 0x07, 0x0f, 0xce, 0x0a,
0xf9, 0xae, 0x08, 0x18, 0xb6, 0xba, 0x03, 0x17, 0x35, 0xec, 0x61, 0xdb, 0x88, 0xfd, 0x38, 0x77,
0x23, 0x63, 0x0c, 0x5d, 0x19, 0xb9, 0x45, 0xce, 0x9e, 0xa5, 0x6d, 0x7d, 0x97, 0x90, 0xf5, 0xb9,
0x17, 0x22, 0xd9, 0x02, 0x5d, 0xc7, 0x57, 0xff, 0xb2, 0x00, 0x6b, 0x9f, 0x1b, 0x06, 0x77, 0x60,
0x3c, 0x11, 0x79, 0x55, 0x39, 0x62, 0x32, 0x87, 0x2a, 0xa6, 0x73, 0xa8, 0x97, 0xe5, 0x54, 0xb8,
0x7b, 0xb5, 0x27, 0x56, 0x10, 0x36, 0x5c, 0xf6, 0xaa, 0xe1, 0x3e, 0x6f, 0xf3, 0x93, 0x92, 0x93,
0x86, 0x8e, 0xd9, 0xa9, 0x45, 0x35, 0x68, 0xc8, 0xa8, 0x63, 0xe8, 0xa4, 0x85, 0xb5, 0xa0, 0x65,
0x06, 0x12, 0x19, 0x3b, 0xac, 0xfb, 0xd6, 0x20, 0xd9, 0x03, 0x05, 0xed, 0x39, 0x9e, 0xfa, 0x3f,
0x05, 0xe8, 0xec, 0xeb, 0xcf, 0xf1, 0x2f, 0xce, 0x01, 0x7d, 0x17, 0x2e, 0x78, 0xfa, 0x73, 0xdc,
0x8f, 0x14, 0x75, 0x7d, 0x17, 0x3f, 0xe3, 0xd9, 0xd7, 0xbb, 0x32, 0xc3, 0x94, 0xbe, 0x0a, 0xd0,
0x56, 0xbc, 0x18, 0x5c, 0xc3, 0xcf, 0xd0, 0x4d, 0x58, 0x8e, 0xbe, 0x2e, 0x21, 0xac, 0x55, 0xa9,
0xc8, 0x9b, 0x91, 0xc7, 0x23, 0x3d, 0x43, 0x7d, 0x06, 0x97, 0x1f, 0xdb, 0x1e, 0xf6, 0x7b, 0xe1,
0x03, 0x88, 0x05, 0xab, 0xa7, 0x6b, 0x50, 0x0f, 0x05, 0x9f, 0x7a, 0xaf, 0x6e, 0x78, 0xaa, 0x03,
0xdd, 0x9d, 0xf0, 0x31, 0x97, 0xb7, 0xc9, 0x6e, 0xb0, 0x5f, 0xe1, 0x82, 0x87, 0xe2, 0x41, 0x87,
0x86, 0x0f, 0xb1, 0x8b, 0xed, 0x01, 0xde, 0x76, 0x06, 0xc7, 0x91, 0x47, 0x9c, 0x4a, 0xf4, 0x11,
0xe7, 0xbc, 0x8f, 0x42, 0x6f, 0xdf, 0x13, 0x6f, 0xa9, 0x0e, 0x4e, 0xc7, 0x18, 0x2d, 0x41, 0x71,
0x17, 0x9f, 0xb4, 0xcf, 0x21, 0x80, 0xca, 0xae, 0xe3, 0x5a, 0xfa, 0xa8, 0xad, 0xa0, 0x3a, 0x2c,
0xf1, 0x0e, 0x7e, 0xbb, 0x70, 0xfb, 0x8f, 0x15, 0x58, 0x49, 0x35, 0x95, 0x51, 0x0b, 0xe0, 0xb1,
0x3d, 0xe0, 0xdd, 0xf6, 0xf6, 0x39, 0xd4, 0x80, 0x6a, 0xd0, 0x7b, 0x67, 0x04, 0x0e, 0x1c, 0x8a,
0xdd, 0x2e, 0xa0, 0x36, 0x34, 0xd8, 0xc4, 0xc9, 0x60, 0x80, 0x3d, 0xaf, 0x5d, 0x14, 0x90, 0x87,
0xba, 0x39, 0x9a, 0xb8, 0xb8, 0x5d, 0x42, 0x4d, 0xa8, 0x1d, 0x38, 0xfc, 0xcd, 0x6c, 0xbb, 0x8c,
0x10, 0xb4, 0x82, 0x07, 0xb4, 0x7c, 0x52, 0x25, 0x02, 0x0b, 0xa6, 0x2d, 0xdd, 0x7e, 0x12, 0xed,
0x2c, 0xd2, 0xfd, 0xac, 0xc1, 0xf9, 0xc7, 0xb6, 0x81, 0x0f, 0x4d, 0x1b, 0x1b, 0xe1, 0x4f, 0xed,
0x73, 0xe8, 0x3c, 0x2c, 0xef, 0x60, 0x77, 0x88, 0x23, 0xc0, 0x02, 0x5a, 0x81, 0xe6, 0x8e, 0xf9,
0x22, 0x02, 0x2a, 0xaa, 0xa5, 0xaa, 0xd2, 0x56, 0xd6, 0xff, 0xf3, 0x22, 0xd4, 0x36, 0x75, 0x5f,
0x7f, 0xe0, 0x38, 0xae, 0x81, 0xc6, 0x80, 0xe8, 0x13, 0x73, 0x6b, 0xec, 0xd8, 0xe2, 0xc3, 0x0d,
0xf4, 0x41, 0x46, 0xe5, 0x91, 0x46, 0xe5, 0x6a, 0xd3, 0xbd, 0x99, 0x31, 0x23, 0x81, 0xae, 0x9e,
0x43, 0x16, 0x5d, 0xf1, 0xc0, 0xb4, 0xf0, 0x81, 0x39, 0x38, 0x0e, 0xde, 0x9e, 0x4d, 0x59, 0x31,
0x81, 0x1a, 0xac, 0x98, 0xe8, 0x41, 0xf1, 0x01, 0xfb, 0x0e, 0x20, 0x70, 0x95, 0xea, 0x39, 0xf4,
0x0c, 0x2e, 0x6c, 0xe1, 0x48, 0xe0, 0x0e, 0x16, 0x5c, 0xcf, 0x5e, 0x30, 0x85, 0x7c, 0xc6, 0x25,
0xb7, 0xa1, 0x4c, 0x75, 0x0c, 0xc9, 0x62, 0x7b, 0xf4, 0x3b, 0xcb, 0xee, 0xf5, 0x6c, 0x04, 0x41,
0xed, 0xfb, 0xb0, 0x9c, 0xf8, 0x3a, 0x0b, 0xc9, 0x5c, 0x93, 0xfc, 0x3b, 0xbb, 0xee, 0xed, 0x3c,
0xa8, 0x62, 0xad, 0x21, 0xb4, 0xe2, 0xcf, 0xd3, 0x91, 0xac, 0xb5, 0x26, 0xfd, 0xb0, 0xa6, 0xfb,
0x6e, 0x0e, 0x4c, 0xb1, 0x90, 0x05, 0xed, 0xe4, 0xd7, 0x42, 0xe8, 0xf6, 0x54, 0x02, 0x71, 0x75,
0x7b, 0x2f, 0x17, 0xae, 0x58, 0xee, 0x94, 0x2a, 0x41, 0xea, 0x03, 0x14, 0x74, 0x57, 0x4e, 0x26,
0xeb, 0xcb, 0x98, 0xee, 0xbd, 0xdc, 0xf8, 0x62, 0xe9, 0xdf, 0x60, 0x37, 0xc5, 0xb2, 0x8f, 0x38,
0xd0, 0x87, 0x72, 0x72, 0x53, 0xbe, 0x3e, 0xe9, 0xae, 0x9f, 0x65, 0x8a, 0x60, 0xe2, 0x87, 0xf4,
0x8a, 0x57, 0xf2, 0x19, 0x44, 0xd2, 0xee, 0x02, 0x7a, 0xd9, 0x5f, 0x78, 0x74, 0x3f, 0x3c, 0xc3,
0x0c, 0xc1, 0x80, 0x93, 0xfc, 0x1c, 0x2b, 0x30, 0xc3, 0x7b, 0x33, 0xb5, 0x66, 0x3e, 0x1b, 0xfc,
0x1e, 0x2c, 0x27, 0x82, 0x35, 0xca, 0x1f, 0xd0, 0xbb, 0xd3, 0x32, 0x2a, 0x66, 0x92, 0x89, 0x1b,
0x73, 0x94, 0xa1, 0xfd, 0x92, 0x5b, 0xf5, 0xee, 0xed, 0x3c, 0xa8, 0x62, 0x23, 0x1e, 0x75, 0x97,
0x89, 0x5b, 0x67, 0x74, 0x47, 0x4e, 0x43, 0x7e, 0x63, 0xde, 0x7d, 0x3f, 0x27, 0xb6, 0x58, 0xf4,
0xd7, 0x01, 0xed, 0x1f, 0x39, 0x27, 0x0f, 0x1c, 0xfb, 0xd0, 0x1c, 0x4e, 0x5c, 0x9d, 0xbd, 0xd3,
0xcb, 0xf2, 0xd1, 0x69, 0xd4, 0x0c, 0x5d, 0x99, 0x3a, 0x43, 0x2c, 0xde, 0x07, 0xd8, 0xc2, 0xfe,
0x0e, 0xf6, 0x5d, 0xa2, 0xa0, 0x37, 0xa5, 0xe7, 0x1d, 0x22, 0x04, 0x4b, 0xbd, 0x33, 0x13, 0x2f,
0x12, 0x12, 0xda, 0x3b, 0xba, 0x3d, 0xd1, 0x47, 0x91, 0xe7, 0xad, 0x77, 0xa4, 0xd3, 0x93, 0x68,
0x19, 0x02, 0xcd, 0xc4, 0x16, 0x4b, 0x9e, 0x88, 0x30, 0x1b, 0xb9, 0x93, 0x48, 0xba, 0x9f, 0x90,
0x67, 0xf9, 0x7d, 0x75, 0xd2, 0xfd, 0x4c, 0xc1, 0x17, 0x0b, 0x7f, 0xa5, 0xd0, 0x6f, 0xfd, 0x12,
0x08, 0x4f, 0x4c, 0xff, 0x68, 0x6f, 0xa4, 0xdb, 0x5e, 0x1e, 0x16, 0x28, 0xe2, 0x19, 0x58, 0xe0,
0xf8, 0x82, 0x05, 0x03, 0x9a, 0xb1, 0x9b, 0x06, 0x24, 0x7b, 0x28, 0x2a, 0xbb, 0x36, 0xe9, 0xde,
0x9a, 0x8d, 0x28, 0x56, 0x39, 0x82, 0x66, 0xa0, 0xd2, 0x4c, 0xb8, 0xef, 0x66, 0x71, 0x1a, 0xe2,
0x64, 0x58, 0xa4, 0x1c, 0x35, 0x6a, 0x91, 0xe9, 0x46, 0x2a, 0xca, 0xd7, 0x80, 0x9f, 0x66, 0x91,
0xd9, 0xdd, 0x59, 0xe6, 0x72, 0x12, 0x97, 0x16, 0x72, 0x7f, 0x26, 0xbd, 0x83, 0x91, 0xba, 0x9c,
0x8c, 0x3b, 0x10, 0xf5, 0x1c, 0x7a, 0x02, 0x15, 0xfe, 0x91, 0xff, 0xdb, 0xd3, 0x1b, 0x2a, 0x9c,
0xfa, 0x8d, 0x19, 0x58, 0x82, 0xf0, 0x31, 0xac, 0x65, 0xb4, 0x53, 0xa4, 0xa1, 0x70, 0x7a, 0xeb,
0x65, 0x96, 0x93, 0xd6, 0x01, 0xa5, 0xbf, 0xa4, 0x93, 0x1e, 0x53, 0xe6, 0x07, 0x77, 0x39, 0x96,
0x48, 0x7f, 0x0c, 0x27, 0x5d, 0x22, 0xf3, 0x9b, 0xb9, 0x59, 0x4b, 0xf4, 0x61, 0x25, 0x55, 0x94,
0xa3, 0xf7, 0x32, 0x22, 0x99, 0xac, 0x74, 0x9f, 0xb5, 0xc0, 0x10, 0xde, 0x90, 0x16, 0xa0, 0xd2,
0xc8, 0x3c, 0xad, 0x54, 0x9d, 0xb5, 0xd0, 0x00, 0xce, 0x4b, 0xca, 0x4e, 0x24, 0xb3, 0x84, 0xec,
0xf2, 0x74, 0xc6, 0x22, 0xeb, 0xff, 0x5a, 0x83, 0x6a, 0xf0, 0xe4, 0xf4, 0x35, 0xd4, 0x36, 0xaf,
0xa1, 0xd8, 0xf8, 0x1e, 0x2c, 0x27, 0x3e, 0x6f, 0x93, 0x3a, 0x06, 0xf9, 0x27, 0x70, 0xb3, 0xce,
0xec, 0x09, 0xff, 0xe7, 0x2b, 0x22, 0xef, 0x78, 0x27, 0xab, 0x60, 0x49, 0xa6, 0x1c, 0x33, 0x08,
0xff, 0xff, 0x4e, 0x30, 0x76, 0x01, 0x22, 0xa9, 0xc5, 0xf4, 0x97, 0x34, 0x24, 0x5a, 0xce, 0x92,
0x96, 0x25, 0xcd, 0x1e, 0xde, 0xcd, 0xf3, 0xea, 0x21, 0xdb, 0xff, 0x67, 0xe7, 0x0c, 0x8f, 0xa1,
0x11, 0x7d, 0xe3, 0x86, 0xa4, 0xff, 0xea, 0x23, 0xfd, 0x08, 0x6e, 0xd6, 0x2e, 0x76, 0xce, 0x18,
0x56, 0x66, 0x90, 0xf3, 0x88, 0xf3, 0x4d, 0x76, 0xb0, 0x33, 0x9c, 0x6f, 0x46, 0xdf, 0x5c, 0x1a,
0x86, 0xb3, 0xdb, 0xe2, 0xac, 0x6e, 0x4d, 0xb6, 0x65, 0xa5, 0x75, 0x6b, 0x46, 0xa3, 0x5b, 0x5a,
0xb7, 0x66, 0xf5, 0x79, 0xd5, 0x73, 0x1b, 0x1f, 0x7d, 0xf7, 0xc3, 0xa1, 0xe9, 0x1f, 0x4d, 0x9e,
0x92, 0xdd, 0xdf, 0x63, 0x53, 0xdf, 0x37, 0x1d, 0xfe, 0xd7, 0xbd, 0x40, 0xdd, 0xef, 0x51, 0x6a,
0xf7, 0x08, 0xb5, 0xf1, 0xd3, 0xa7, 0x15, 0x3a, 0xfa, 0xe8, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
0x51, 0x51, 0xef, 0xc9, 0x3e, 0x4a, 0x00, 0x00,
0x14, 0x12, 0xb6, 0xa1, 0xfe, 0x58, 0x81, 0x2b, 0xf2, 0xf5, 0xf8, 0xd1, 0xbb, 0x50, 0x3d, 0x34,
0xf1, 0xc8, 0x20, 0xfc, 0x55, 0x28, 0x7f, 0xc5, 0x98, 0x18, 0xd6, 0x98, 0x20, 0xf3, 0x13, 0xbe,
0x91, 0xa1, 0xcd, 0xfb, 0xbe, 0x6b, 0xda, 0xc3, 0x6d, 0xd3, 0xf3, 0x35, 0x86, 0x1f, 0xe1, 0x67,
0x31, 0xbf, 0x1a, 0xff, 0xb6, 0x02, 0xd7, 0xb6, 0xb0, 0xff, 0x50, 0xf8, 0x65, 0xf2, 0xbb, 0xe9,
0xf9, 0xe6, 0xc0, 0x7b, 0xb1, 0xb9, 0x51, 0x8e, 0x00, 0xad, 0xfe, 0x48, 0x81, 0xeb, 0x99, 0x9b,
0xe1, 0xac, 0xe3, 0x7e, 0x27, 0xf0, 0xca, 0x72, 0xbf, 0xf3, 0x6b, 0xf8, 0xec, 0x4b, 0x7d, 0x34,
0xc1, 0x7b, 0xba, 0xe9, 0x32, 0xbf, 0x33, 0xa7, 0x17, 0xfe, 0x6b, 0x05, 0xae, 0x6e, 0x61, 0x7f,
0x2f, 0x88, 0x49, 0xaf, 0x90, 0x3b, 0x04, 0x27, 0x12, 0x1b, 0x83, 0xe4, 0x2c, 0x06, 0x53, 0x7f,
0x97, 0x89, 0x53, 0xba, 0xdf, 0x57, 0xc2, 0xc0, 0x6b, 0xd4, 0x12, 0x22, 0x26, 0xf9, 0x90, 0xa5,
0x0e, 0x9c, 0x7d, 0xea, 0x9f, 0x2a, 0x70, 0xf9, 0xb3, 0xc1, 0xb3, 0x89, 0xe9, 0x62, 0x8e, 0xb4,
0xed, 0x0c, 0x8e, 0xe7, 0x67, 0x6e, 0x98, 0x66, 0x15, 0x62, 0x69, 0xd6, 0xac, 0xd4, 0x7c, 0x15,
0x2a, 0x3e, 0xcb, 0xeb, 0x58, 0xa6, 0xc2, 0x47, 0x74, 0x7f, 0x1a, 0x1e, 0x61, 0xdd, 0xfb, 0xbf,
0xb9, 0xbf, 0x1f, 0x95, 0xa0, 0xf1, 0x25, 0x4f, 0xc7, 0x68, 0xd4, 0x4e, 0x6a, 0x92, 0x22, 0x4f,
0xbc, 0x22, 0x19, 0x9c, 0x2c, 0xa9, 0xdb, 0x82, 0xa6, 0x87, 0xf1, 0xf1, 0x3c, 0x31, 0xba, 0x41,
0x26, 0x8a, 0xd8, 0xba, 0x0d, 0x2b, 0x13, 0x9b, 0x96, 0x06, 0xd8, 0xe0, 0x0c, 0x64, 0x9a, 0x3b,
0xdb, 0x77, 0xa7, 0x27, 0xa2, 0x2f, 0x78, 0xf5, 0x11, 0xa1, 0x55, 0xce, 0x45, 0x2b, 0x39, 0x0d,
0xf5, 0xa0, 0x6d, 0xb8, 0xce, 0x78, 0x8c, 0x8d, 0xbe, 0x17, 0x90, 0xaa, 0xe4, 0x23, 0xc5, 0xe7,
0x09, 0x52, 0xef, 0xc3, 0xc5, 0xe4, 0x4e, 0x7b, 0x06, 0x49, 0x48, 0x89, 0x0c, 0x65, 0x3f, 0xa1,
0xbb, 0xb0, 0x92, 0xc6, 0xaf, 0x52, 0xfc, 0xf4, 0x0f, 0xe8, 0x3d, 0x40, 0x89, 0xad, 0x12, 0xf4,
0x1a, 0x43, 0x8f, 0x6f, 0xa6, 0x67, 0x78, 0xea, 0x0f, 0x15, 0x58, 0x7d, 0xa2, 0xfb, 0x83, 0xa3,
0x4d, 0x8b, 0xdb, 0xda, 0x02, 0xbe, 0xea, 0x13, 0xa8, 0x9d, 0x70, 0xbd, 0x08, 0x02, 0xd2, 0x75,
0x09, 0x7f, 0xa2, 0x1a, 0xa8, 0x85, 0x33, 0xd4, 0x9f, 0x2a, 0x70, 0xe9, 0x51, 0xa4, 0x2e, 0x7c,
0x05, 0x5e, 0x73, 0x56, 0x41, 0x7b, 0x0b, 0x5a, 0x96, 0xee, 0x1e, 0xa7, 0xea, 0xd9, 0x04, 0x54,
0x7d, 0x0e, 0xc0, 0x47, 0x3b, 0xde, 0x70, 0x8e, 0xfd, 0x7f, 0x0c, 0x4b, 0x7c, 0x55, 0xee, 0x3e,
0x67, 0xe9, 0x59, 0x80, 0xae, 0xfe, 0x8b, 0x02, 0xad, 0x30, 0x24, 0x52, 0x23, 0x6f, 0x41, 0x41,
0x98, 0x76, 0xa1, 0xb7, 0x89, 0x3e, 0x81, 0x0a, 0x6b, 0x74, 0x70, 0xda, 0x37, 0xe3, 0xb4, 0x79,
0x13, 0x24, 0x12, 0x57, 0x29, 0x40, 0xe3, 0x93, 0x08, 0x8f, 0x44, 0x14, 0x11, 0xce, 0x27, 0x84,
0xa0, 0x1e, 0x2c, 0xc7, 0x53, 0xf6, 0xc0, 0x84, 0x6f, 0x64, 0x05, 0x8f, 0x4d, 0xdd, 0xd7, 0x69,
0xec, 0x68, 0xc5, 0x32, 0x76, 0x4f, 0xfd, 0xfd, 0x0a, 0xd4, 0x23, 0xa7, 0x4c, 0x9d, 0x24, 0x29,
0xd2, 0xc2, 0xec, 0xba, 0xb1, 0x98, 0xae, 0x1b, 0x6f, 0x42, 0xcb, 0xa4, 0xc9, 0x57, 0x9f, 0xab,
0x22, 0xf5, 0x9a, 0x35, 0xad, 0xc9, 0xa0, 0xdc, 0x2e, 0xd0, 0x35, 0xa8, 0xdb, 0x13, 0xab, 0xef,
0x1c, 0xf6, 0x5d, 0xe7, 0xd4, 0xe3, 0x05, 0x68, 0xcd, 0x9e, 0x58, 0xdf, 0x3c, 0xd4, 0x9c, 0x53,
0x2f, 0xac, 0x71, 0x2a, 0xe7, 0xac, 0x71, 0xae, 0x41, 0xdd, 0xd2, 0x9f, 0x13, 0xaa, 0x7d, 0x7b,
0x62, 0xd1, 0xda, 0xb4, 0xa8, 0xd5, 0x2c, 0xfd, 0xb9, 0xe6, 0x9c, 0xee, 0x4e, 0x2c, 0x74, 0x1b,
0xda, 0x23, 0xdd, 0xf3, 0xfb, 0xd1, 0xe2, 0xb6, 0x4a, 0x8b, 0xdb, 0x16, 0x81, 0x7f, 0x1e, 0x16,
0xb8, 0xe9, 0x6a, 0xa9, 0xb6, 0x40, 0xb5, 0x64, 0x58, 0xa3, 0x90, 0x10, 0xe4, 0xaf, 0x96, 0x0c,
0x6b, 0x24, 0xc8, 0x7c, 0x0c, 0x4b, 0x4f, 0x69, 0x4a, 0xeb, 0x75, 0xea, 0x99, 0x0e, 0xf3, 0x11,
0xc9, 0x66, 0x59, 0xe6, 0xab, 0x05, 0xe8, 0xe8, 0xeb, 0x50, 0xa3, 0x99, 0x04, 0x9d, 0xdb, 0xc8,
0x35, 0x37, 0x9c, 0x40, 0x66, 0x1b, 0x78, 0xe4, 0xeb, 0x74, 0x76, 0x33, 0xdf, 0x6c, 0x31, 0x81,
0x38, 0xe9, 0x81, 0x8b, 0x75, 0x1f, 0x1b, 0x1b, 0x67, 0x0f, 0x1d, 0x6b, 0xac, 0x53, 0x65, 0xea,
0xb4, 0x68, 0xd9, 0x22, 0xfb, 0x89, 0x38, 0x86, 0x81, 0x18, 0x3d, 0x72, 0x1d, 0xab, 0xb3, 0xcc,
0x1c, 0x43, 0x1c, 0x8a, 0xae, 0x02, 0x04, 0xee, 0x59, 0xf7, 0x3b, 0x6d, 0x2a, 0xc5, 0x1a, 0x87,
0x7c, 0x46, 0x7b, 0x57, 0xa6, 0xd7, 0x67, 0x5d, 0x22, 0xd3, 0x1e, 0x76, 0x56, 0xe8, 0x8a, 0xf5,
0xa0, 0xad, 0x64, 0xda, 0x43, 0xf5, 0xfb, 0x70, 0x29, 0x54, 0xa2, 0x88, 0xc0, 0xd2, 0xb2, 0x57,
0xe6, 0x95, 0xfd, 0xf4, 0x7a, 0xe5, 0x67, 0x25, 0x58, 0xdd, 0xd7, 0x4f, 0xf0, 0xcb, 0x2f, 0x8d,
0x72, 0xb9, 0xec, 0x6d, 0x58, 0xa1, 0xd5, 0xd0, 0x7a, 0x64, 0x3f, 0x53, 0x72, 0x86, 0xa8, 0xc4,
0xd3, 0x13, 0xd1, 0x37, 0x48, 0xb2, 0x83, 0x07, 0xc7, 0x7b, 0x8e, 0x19, 0xe6, 0x0b, 0x57, 0x25,
0x74, 0x1e, 0x0a, 0x2c, 0x2d, 0x3a, 0x03, 0xed, 0xa5, 0xbd, 0x1f, 0xcb, 0x14, 0xde, 0x9e, 0x5a,
0xa0, 0x87, 0xdc, 0x4f, 0x3a, 0x41, 0xd4, 0x81, 0x25, 0x1e, 0xe6, 0xa9, 0x6b, 0xa8, 0x6a, 0xc1,
0x10, 0xed, 0xc1, 0x45, 0x76, 0x82, 0x7d, 0xae, 0xf7, 0xec, 0xf0, 0xd5, 0x5c, 0x87, 0x97, 0x4d,
0x8d, 0x9b, 0x4d, 0xed, 0xbc, 0x66, 0xd3, 0x81, 0x25, 0xae, 0xca, 0xd4, 0x5d, 0x54, 0xb5, 0x60,
0x48, 0xc4, 0x1c, 0x2a, 0x75, 0x9d, 0xfe, 0x16, 0x02, 0x48, 0x59, 0x09, 0x21, 0x3f, 0x67, 0xb4,
0x92, 0x3e, 0x85, 0xaa, 0xd0, 0xf0, 0x42, 0x6e, 0x0d, 0x17, 0x73, 0x92, 0x6e, 0xbc, 0x98, 0x70,
0xe3, 0xea, 0xbf, 0x2a, 0xd0, 0xd8, 0x24, 0x47, 0xda, 0x76, 0x86, 0x34, 0xe8, 0xdc, 0x84, 0x96,
0x8b, 0x07, 0x8e, 0x6b, 0xf4, 0xb1, 0xed, 0xbb, 0x26, 0x66, 0x1d, 0x88, 0x92, 0xd6, 0x64, 0xd0,
0xcf, 0x19, 0x90, 0xa0, 0x11, 0xcf, 0xec, 0xf9, 0xba, 0x35, 0xee, 0x1f, 0x12, 0x0f, 0x50, 0x60,
0x68, 0x02, 0x4a, 0x1d, 0xc0, 0x1b, 0xd0, 0x08, 0xd1, 0x7c, 0x87, 0xae, 0x5f, 0xd2, 0xea, 0x02,
0x76, 0xe0, 0xa0, 0xb7, 0xa0, 0x45, 0x79, 0xda, 0x1f, 0x39, 0xc3, 0x3e, 0xa9, 0xd6, 0x79, 0x3c,
0x6a, 0x18, 0x7c, 0x5b, 0x44, 0x56, 0x71, 0x2c, 0xcf, 0xfc, 0x1e, 0xe6, 0x11, 0x49, 0x60, 0xed,
0x9b, 0xdf, 0xc3, 0x24, 0x1d, 0x68, 0x92, 0xf0, 0xba, 0xeb, 0x18, 0xf8, 0x60, 0xce, 0x64, 0x24,
0x47, 0x5b, 0xf7, 0x0a, 0xd4, 0xc4, 0x09, 0xf8, 0x91, 0x42, 0x00, 0x7a, 0x04, 0xad, 0x20, 0x6d,
0xee, 0xb3, 0x6a, 0xb2, 0x94, 0x99, 0x1c, 0x46, 0x02, 0xa4, 0xa7, 0x35, 0x83, 0x69, 0x74, 0xa8,
0x3e, 0x82, 0x46, 0xf4, 0x67, 0xb2, 0xea, 0x7e, 0x52, 0x51, 0x04, 0x80, 0x68, 0xe3, 0xee, 0xc4,
0x22, 0x32, 0xe5, 0x8e, 0x25, 0x18, 0xaa, 0x3f, 0x50, 0xa0, 0xc9, 0xa3, 0xfa, 0xbe, 0xb8, 0x00,
0xa1, 0x47, 0x53, 0xe8, 0xd1, 0xe8, 0xdf, 0xe8, 0x57, 0xe2, 0x3d, 0xcb, 0xb7, 0xa4, 0x4e, 0x80,
0x12, 0xa1, 0x09, 0x74, 0x2c, 0xa4, 0xe7, 0xe9, 0x5f, 0x7c, 0x45, 0x14, 0x8d, 0x8b, 0x86, 0x2a,
0x5a, 0x07, 0x96, 0x74, 0xc3, 0x70, 0xb1, 0xe7, 0xf1, 0x7d, 0x04, 0x43, 0xf2, 0xcb, 0x09, 0x76,
0xbd, 0x40, 0xe5, 0x8b, 0x5a, 0x30, 0x44, 0x5f, 0x87, 0xaa, 0xc8, 0xb8, 0x8b, 0xb2, 0x2c, 0x2b,
0xba, 0x4f, 0x5e, 0x6d, 0x8b, 0x19, 0xea, 0xdf, 0x16, 0xa0, 0xc5, 0x19, 0xb6, 0xc1, 0xc3, 0xee,
0x74, 0xe3, 0xdb, 0x80, 0xc6, 0x61, 0x68, 0xfb, 0xd3, 0xfa, 0x6a, 0x51, 0x17, 0x11, 0x9b, 0x33,
0xcb, 0x00, 0xe3, 0x81, 0xbf, 0xb4, 0x50, 0xe0, 0x2f, 0x9f, 0xd7, 0x83, 0xa5, 0x53, 0xc1, 0x8a,
0x24, 0x15, 0x54, 0x7f, 0x1d, 0xea, 0x11, 0x02, 0xd4, 0x43, 0xb3, 0x86, 0x1c, 0xe7, 0x58, 0x30,
0x44, 0x1f, 0x86, 0xe9, 0x0f, 0x63, 0xd5, 0x65, 0xc9, 0x5e, 0x12, 0x99, 0x8f, 0xfa, 0x4f, 0x0a,
0x54, 0x38, 0xe5, 0xeb, 0x50, 0xe7, 0x4e, 0x87, 0xa6, 0x86, 0x8c, 0x3a, 0x70, 0x10, 0xc9, 0x0d,
0x5f, 0x9c, 0xd7, 0xb9, 0x0c, 0xd5, 0x84, 0xbf, 0x59, 0xe2, 0x61, 0x21, 0xf8, 0x29, 0xe2, 0x64,
0xc8, 0x4f, 0xc4, 0xbf, 0xa0, 0x4b, 0x50, 0x1e, 0x39, 0x43, 0x71, 0xc1, 0xc5, 0x06, 0xa4, 0x92,
0x5b, 0xdb, 0xc2, 0xbe, 0x86, 0x07, 0xce, 0x09, 0x76, 0xcf, 0x16, 0x6f, 0xe4, 0x3e, 0x88, 0xa8,
0x79, 0xce, 0xc2, 0x52, 0x4c, 0x40, 0x0f, 0x42, 0x21, 0x14, 0x65, 0x5d, 0xac, 0xa8, 0xdf, 0xe1,
0x4a, 0x1a, 0x0a, 0xe3, 0xf7, 0x58, 0x4b, 0x3a, 0x7e, 0x94, 0x79, 0xb3, 0x9d, 0x17, 0x52, 0xaf,
0xa8, 0x3f, 0x53, 0xa0, 0x1b, 0xb6, 0xc9, 0xbc, 0x8d, 0xb3, 0x45, 0x2f, 0x7c, 0x5e, 0x4c, 0x19,
0xf5, 0xcb, 0xe2, 0x46, 0x82, 0x18, 0x6d, 0xae, 0x02, 0x28, 0xb8, 0x8f, 0xb0, 0x69, 0xc7, 0x3d,
0x7d, 0xa0, 0x45, 0x54, 0xa6, 0x0b, 0x55, 0xd1, 0xab, 0x61, 0xb7, 0x12, 0x62, 0xac, 0xfe, 0xa1,
0x02, 0x97, 0xb7, 0xb0, 0xff, 0x28, 0xde, 0xe6, 0x79, 0xd5, 0x72, 0xb5, 0xa8, 0x58, 0x53, 0x9b,
0x7a, 0x59, 0x4c, 0xf8, 0x2d, 0x05, 0x3a, 0x7c, 0x15, 0xba, 0x26, 0xa9, 0x66, 0x46, 0xd8, 0xc7,
0xc6, 0xcf, 0xbb, 0x65, 0xf1, 0x8f, 0x0a, 0xb4, 0xa3, 0x91, 0x94, 0x06, 0xc3, 0x8f, 0xa0, 0x4c,
0x3b, 0x43, 0x7c, 0x07, 0x33, 0xcd, 0x9d, 0x61, 0x13, 0x57, 0x4c, 0xd3, 0xe7, 0x03, 0x11, 0xf4,
0xf9, 0x30, 0x0c, 0xe7, 0xc5, 0xf3, 0x87, 0x73, 0x9e, 0xde, 0x38, 0x13, 0x42, 0x97, 0xb5, 0x54,
0x43, 0x80, 0xfa, 0xab, 0xb0, 0x1a, 0x56, 0x82, 0x6c, 0xde, 0xbc, 0x9a, 0xa4, 0xfe, 0xa7, 0x02,
0x17, 0xf7, 0xcf, 0xec, 0x41, 0x52, 0x27, 0x57, 0xa1, 0x32, 0x1e, 0xe9, 0x61, 0x8b, 0x96, 0x8f,
0x68, 0x6e, 0xc6, 0xd6, 0xc6, 0x06, 0x71, 0xec, 0xec, 0xd0, 0x75, 0x01, 0x3b, 0x70, 0x66, 0xc6,
0xdb, 0x9b, 0xa2, 0x74, 0xc5, 0x06, 0x0b, 0x21, 0xac, 0xef, 0xd5, 0x14, 0x50, 0x1a, 0x42, 0x3e,
0x01, 0xa0, 0x51, 0xb6, 0x7f, 0x9e, 0xc8, 0x4a, 0x67, 0x6c, 0x13, 0x3f, 0xfa, 0x93, 0x02, 0x74,
0x22, 0x5c, 0xfa, 0x79, 0x27, 0x1d, 0x19, 0xa5, 0x52, 0xf1, 0x05, 0x95, 0x4a, 0xa5, 0xc5, 0x13,
0x8d, 0xb2, 0x2c, 0xd1, 0xf8, 0x87, 0x02, 0xb4, 0x42, 0xae, 0xed, 0x8d, 0x74, 0x3b, 0x53, 0x13,
0xf6, 0x45, 0x92, 0x1d, 0xe7, 0xd3, 0xbb, 0x32, 0x45, 0xcf, 0x10, 0x84, 0x96, 0x20, 0x81, 0xae,
0x52, 0xa1, 0xbb, 0x3e, 0x6b, 0x3a, 0xf1, 0xc4, 0x9e, 0x59, 0x94, 0x69, 0x61, 0x74, 0x17, 0x10,
0x37, 0x83, 0xbe, 0x69, 0xf7, 0x3d, 0x3c, 0x70, 0x6c, 0x83, 0x19, 0x48, 0x59, 0x6b, 0xf3, 0x5f,
0x7a, 0xf6, 0x3e, 0x83, 0xa3, 0x8f, 0xa0, 0xe4, 0x9f, 0x8d, 0x59, 0x0a, 0xd1, 0x92, 0x06, 0xe1,
0x70, 0x5f, 0x07, 0x67, 0x63, 0xac, 0x51, 0xf4, 0xe0, 0x69, 0x90, 0xef, 0xea, 0x27, 0x3c, 0x1f,
0x2b, 0x69, 0x11, 0x08, 0x31, 0xf9, 0x80, 0x87, 0x4b, 0x2c, 0x6f, 0xe1, 0x43, 0xf5, 0xef, 0x0a,
0xd0, 0x0e, 0x49, 0x6a, 0xd8, 0x9b, 0x8c, 0xb2, 0x2d, 0x69, 0x7a, 0x27, 0x62, 0x96, 0x11, 0x7d,
0x03, 0xea, 0x5c, 0x9e, 0xe7, 0xd0, 0x07, 0x60, 0x53, 0xb6, 0xa7, 0x28, 0x68, 0xf9, 0x05, 0x29,
0x68, 0xe5, 0x9c, 0x0a, 0xaa, 0xfe, 0x58, 0x81, 0xd7, 0x52, 0x5e, 0x6d, 0x2a, 0x03, 0xa7, 0xd7,
0x4b, 0xdc, 0xdb, 0x25, 0x49, 0x72, 0x07, 0xfb, 0x00, 0x2a, 0x2e, 0xa5, 0xce, 0xaf, 0x8e, 0xde,
0x9c, 0xaa, 0x1c, 0x6c, 0x23, 0x1a, 0x9f, 0xa2, 0xfe, 0x81, 0x02, 0x6b, 0xe9, 0xad, 0x2e, 0x10,
0x35, 0x37, 0x60, 0x89, 0x91, 0x0e, 0x6c, 0xe8, 0xf6, 0x74, 0x1b, 0x0a, 0x99, 0xa3, 0x05, 0x13,
0xd5, 0x7d, 0x58, 0x0d, 0x82, 0x6b, 0xc8, 0xe0, 0x1d, 0xec, 0xeb, 0x53, 0xaa, 0x85, 0xeb, 0x50,
0x67, 0x69, 0x27, 0xcb, 0xc2, 0x59, 0x9d, 0x0d, 0x4f, 0x45, 0x7b, 0x4a, 0xfd, 0x0b, 0x05, 0x2e,
0xd1, 0xe8, 0x94, 0xbc, 0xab, 0xc9, 0x73, 0x8f, 0xa7, 0x8a, 0x32, 0x9e, 0x94, 0xec, 0xec, 0x68,
0x35, 0x2d, 0x06, 0x93, 0xf5, 0xee, 0x8b, 0x73, 0xf6, 0xee, 0xb7, 0xe1, 0xb5, 0xc4, 0x56, 0x17,
0x10, 0x09, 0x39, 0xf9, 0xea, 0x7e, 0xfc, 0x01, 0xcd, 0xfc, 0xe9, 0xda, 0x55, 0x71, 0xcb, 0xd3,
0x37, 0x8d, 0xa4, 0xad, 0x1b, 0xe8, 0x53, 0xa8, 0xd9, 0xf8, 0xb4, 0x1f, 0xcd, 0x16, 0x72, 0xe4,
0xb2, 0x55, 0x1b, 0x9f, 0xd2, 0xbf, 0xd4, 0x5d, 0x58, 0x4b, 0x6d, 0x75, 0x91, 0xb3, 0xff, 0xbd,
0x02, 0x97, 0x37, 0x5d, 0x67, 0xfc, 0xa5, 0xe9, 0xfa, 0x13, 0x7d, 0x14, 0xbf, 0x13, 0x7f, 0x39,
0xfd, 0x9c, 0x2f, 0x22, 0x79, 0x23, 0x53, 0x80, 0xbb, 0x12, 0x13, 0x48, 0x6f, 0x8a, 0x1f, 0x3a,
0x92, 0x65, 0xfe, 0x77, 0x51, 0xb6, 0x79, 0x8e, 0x37, 0x23, 0xf0, 0xe7, 0x49, 0xab, 0xa5, 0xed,
0xdf, 0xe2, 0xbc, 0xed, 0xdf, 0x0c, 0x2f, 0x5c, 0x7a, 0x41, 0x5e, 0xf8, 0xdc, 0xfd, 0x88, 0x2f,
0x20, 0xde, 0x9a, 0xa7, 0xe1, 0x6f, 0xae, 0x9e, 0xfe, 0x06, 0x40, 0xd8, 0xa6, 0xe6, 0xef, 0x1f,
0xf3, 0x90, 0x89, 0xcc, 0x22, 0xd2, 0x12, 0x11, 0x8f, 0xde, 0x40, 0xc5, 0x1a, 0xa7, 0xdf, 0x82,
0xae, 0x4c, 0x4b, 0x17, 0xd1, 0xfc, 0x9f, 0x14, 0x00, 0x7a, 0xe2, 0xc9, 0xec, 0x7c, 0xce, 0xfc,
0x4d, 0x68, 0x86, 0x0a, 0x13, 0xda, 0x7b, 0x54, 0x8b, 0x0c, 0x62, 0x12, 0xa2, 0x12, 0x23, 0x38,
0xa9, 0xea, 0xcc, 0xa0, 0x74, 0x22, 0x56, 0xc3, 0x94, 0x22, 0xe9, 0x3f, 0x5f, 0x87, 0x9a, 0xeb,
0x9c, 0xf6, 0x89, 0x99, 0x19, 0xc1, 0x9b, 0x60, 0xd7, 0x39, 0x25, 0xc6, 0x67, 0xa0, 0x35, 0x58,
0xf2, 0x75, 0xef, 0x98, 0xd0, 0xaf, 0x44, 0x9e, 0x65, 0x18, 0xe8, 0x12, 0x94, 0x0f, 0xcd, 0x11,
0x66, 0xaf, 0x00, 0x6a, 0x1a, 0x1b, 0xa0, 0xaf, 0x05, 0x8f, 0xd7, 0xaa, 0xb9, 0x9f, 0xde, 0xb0,
0xf7, 0x6b, 0x3f, 0x55, 0x60, 0x39, 0xe4, 0x1a, 0x75, 0x40, 0xc4, 0xa7, 0x51, 0x7f, 0xf6, 0xd0,
0x31, 0x98, 0xab, 0x68, 0x65, 0xb8, 0x74, 0x36, 0x91, 0x79, 0xad, 0x70, 0xca, 0xb4, 0x42, 0x92,
0x9c, 0x8b, 0x1c, 0xda, 0x34, 0x82, 0xdb, 0xe0, 0x8a, 0xeb, 0x9c, 0xf6, 0x0c, 0xc1, 0x0d, 0xf6,
0xe0, 0x97, 0x95, 0x4d, 0x84, 0x1b, 0x0f, 0xe9, 0x9b, 0xdf, 0x37, 0xa1, 0x89, 0x5d, 0xd7, 0x71,
0xfb, 0x16, 0xf6, 0x3c, 0x7d, 0x88, 0x79, 0x02, 0xdc, 0xa0, 0xc0, 0x1d, 0x06, 0x53, 0xff, 0xb9,
0x08, 0xad, 0xf0, 0x28, 0xc1, 0x1d, 0xb0, 0x69, 0x04, 0x77, 0xc0, 0x26, 0x11, 0x1d, 0xb8, 0xcc,
0x15, 0x0a, 0xe1, 0x6e, 0x14, 0x3a, 0x8a, 0x56, 0xe3, 0xd0, 0x9e, 0x41, 0xe2, 0x2a, 0x31, 0x32,
0xdb, 0x31, 0x70, 0x28, 0x5c, 0x08, 0x40, 0x5c, 0xb6, 0x31, 0x1d, 0x29, 0xe5, 0xd0, 0x91, 0x72,
0x0e, 0x1d, 0xa9, 0x48, 0x74, 0x64, 0x15, 0x2a, 0x4f, 0x27, 0x83, 0x63, 0xec, 0xf3, 0x74, 0x95,
0x8f, 0xe2, 0xba, 0x53, 0x4d, 0xe8, 0x8e, 0x50, 0x91, 0x5a, 0x54, 0x45, 0x5e, 0x87, 0x1a, 0xbb,
0x8c, 0xec, 0xfb, 0x1e, 0xbd, 0x72, 0x29, 0x6a, 0x55, 0x06, 0x38, 0xf0, 0xd0, 0xc7, 0x41, 0x3e,
0x56, 0x97, 0x19, 0x3b, 0xf5, 0x3a, 0x09, 0x2d, 0x09, 0xb2, 0xb1, 0xb7, 0x61, 0x39, 0xc2, 0x0e,
0x1a, 0x23, 0x1a, 0x74, 0xab, 0xad, 0x10, 0x4c, 0xc3, 0xc4, 0x4d, 0x68, 0x85, 0x2c, 0xa1, 0x78,
0x4d, 0x56, 0xc5, 0x08, 0x28, 0x41, 0x53, 0xbf, 0x0b, 0x28, 0x5c, 0x69, 0xb1, 0xd4, 0x2c, 0x21,
0xca, 0x42, 0x52, 0x94, 0xea, 0x5f, 0x2a, 0xb0, 0x12, 0x5d, 0x6c, 0xde, 0x20, 0xf9, 0x29, 0xd4,
0xd9, 0x05, 0x55, 0x9f, 0x18, 0x29, 0x6f, 0x69, 0x5c, 0x9d, 0xca, 0x43, 0x0d, 0xc2, 0xe7, 0xfd,
0x44, 0x15, 0x4e, 0x1d, 0xf7, 0xd8, 0xb4, 0x87, 0x7d, 0xb2, 0xb3, 0xc0, 0x34, 0x1a, 0x1c, 0xb8,
0x4b, 0x60, 0xea, 0x0f, 0x15, 0xb8, 0xf6, 0x78, 0x6c, 0xe8, 0x3e, 0x8e, 0x64, 0x0b, 0x8b, 0xbe,
0x18, 0xfc, 0x28, 0x78, 0xb2, 0x57, 0xc8, 0x77, 0xc9, 0xc2, 0xb0, 0xd5, 0x1d, 0xb8, 0xac, 0x61,
0x0f, 0xdb, 0x46, 0xec, 0xc7, 0xb9, 0x1b, 0x19, 0x63, 0xe8, 0xca, 0xc8, 0x2d, 0x22, 0x7b, 0x96,
0xb6, 0xf5, 0x5d, 0x42, 0xd6, 0xe7, 0x5e, 0x88, 0x64, 0x0b, 0x74, 0x1d, 0x5f, 0xfd, 0xab, 0x02,
0xac, 0x7d, 0x66, 0x18, 0xdc, 0x81, 0xf1, 0x44, 0xe4, 0x65, 0xe5, 0x88, 0xc9, 0x1c, 0xaa, 0x98,
0xce, 0xa1, 0x5e, 0x94, 0x53, 0xe1, 0xee, 0xd5, 0x9e, 0x58, 0x41, 0xd8, 0x70, 0xd9, 0xbb, 0x90,
0x07, 0xfc, 0xa2, 0x84, 0x94, 0x9c, 0x34, 0x74, 0xcc, 0x4e, 0x2d, 0xaa, 0x41, 0x43, 0x46, 0x1d,
0x43, 0x27, 0xcd, 0xac, 0x05, 0x2d, 0x33, 0xe0, 0xc8, 0xd8, 0x61, 0xdd, 0xb7, 0x06, 0xc9, 0x1e,
0x28, 0x68, 0xcf, 0xf1, 0xd4, 0xff, 0x29, 0x40, 0x67, 0x5f, 0x3f, 0xc1, 0xbf, 0x38, 0x02, 0xfa,
0x36, 0x5c, 0xf2, 0xf4, 0x13, 0xdc, 0x8f, 0x14, 0x75, 0x7d, 0x17, 0x3f, 0xe3, 0xd9, 0xd7, 0x3b,
0x32, 0xc3, 0x94, 0xbe, 0xab, 0xd0, 0x56, 0xbc, 0x18, 0x5c, 0xc3, 0xcf, 0xd0, 0x2d, 0x58, 0x8e,
0xbe, 0xcf, 0x21, 0x5b, 0xab, 0x52, 0x96, 0x37, 0x23, 0xcf, 0x6f, 0x7a, 0x86, 0xfa, 0x0c, 0xae,
0x3c, 0xb6, 0x3d, 0xec, 0xf7, 0xc2, 0x27, 0x24, 0x0b, 0x56, 0x4f, 0xd7, 0xa1, 0x1e, 0x32, 0x3e,
0xf5, 0xe2, 0xdf, 0xf0, 0x54, 0x07, 0xba, 0x3b, 0xe1, 0x73, 0x38, 0x6f, 0x93, 0xbd, 0x01, 0x78,
0x89, 0x0b, 0x1e, 0x8a, 0x27, 0x31, 0x1a, 0x3e, 0xc4, 0x2e, 0xb6, 0x07, 0x78, 0xdb, 0x19, 0x1c,
0x47, 0x9e, 0xc1, 0x2a, 0xd1, 0x67, 0xb0, 0xf3, 0x3e, 0xab, 0xbd, 0x73, 0x5f, 0xbc, 0x46, 0x3b,
0x38, 0x1b, 0x63, 0xb4, 0x04, 0xc5, 0x5d, 0x7c, 0xda, 0xbe, 0x80, 0x00, 0x2a, 0xbb, 0x8e, 0x6b,
0xe9, 0xa3, 0xb6, 0x82, 0xea, 0xb0, 0xc4, 0x3b, 0xf8, 0xed, 0xc2, 0x9d, 0x3f, 0x51, 0x60, 0x25,
0xd5, 0x54, 0x46, 0x2d, 0x80, 0xc7, 0xf6, 0x80, 0x77, 0xdb, 0xdb, 0x17, 0x50, 0x03, 0xaa, 0x41,
0xef, 0x9d, 0x11, 0x38, 0x70, 0x28, 0x76, 0xbb, 0x80, 0xda, 0xd0, 0x60, 0x13, 0x27, 0x83, 0x01,
0xf6, 0xbc, 0x76, 0x51, 0x40, 0x1e, 0xe9, 0xe6, 0x68, 0xe2, 0xe2, 0x76, 0x09, 0x35, 0xa1, 0x76,
0xe0, 0xf0, 0x57, 0xc7, 0xed, 0x32, 0x42, 0xd0, 0x0a, 0x9e, 0x20, 0xf3, 0x49, 0x95, 0x08, 0x2c,
0x98, 0xb6, 0x74, 0xe7, 0x49, 0xb4, 0xb3, 0x48, 0xcf, 0xb3, 0x06, 0x17, 0x1f, 0xdb, 0x06, 0x3e,
0x34, 0x6d, 0x6c, 0x84, 0x3f, 0xb5, 0x2f, 0xa0, 0x8b, 0xb0, 0xbc, 0x83, 0xdd, 0x21, 0x8e, 0x00,
0x0b, 0x68, 0x05, 0x9a, 0x3b, 0xe6, 0xf3, 0x08, 0xa8, 0xa8, 0x96, 0xaa, 0x4a, 0x5b, 0x59, 0xff,
0x8f, 0x2e, 0xd4, 0x36, 0x75, 0x5f, 0x7f, 0xe8, 0x38, 0xae, 0x81, 0xc6, 0x80, 0xe8, 0x23, 0x7d,
0x6b, 0xec, 0xd8, 0xe2, 0xd3, 0x17, 0xf4, 0x7e, 0x46, 0xe5, 0x91, 0x46, 0xe5, 0x6a, 0xd3, 0xbd,
0x95, 0x31, 0x23, 0x81, 0xae, 0x5e, 0x40, 0x16, 0x5d, 0xf1, 0xc0, 0xb4, 0xf0, 0x81, 0x39, 0x38,
0x0e, 0x5e, 0xef, 0x4d, 0x59, 0x31, 0x81, 0x1a, 0xac, 0x98, 0xe8, 0x41, 0xf1, 0x01, 0xfb, 0x92,
0x22, 0x70, 0x95, 0xea, 0x05, 0xf4, 0x0c, 0x2e, 0x6d, 0xe1, 0x48, 0xe0, 0x0e, 0x16, 0x5c, 0xcf,
0x5e, 0x30, 0x85, 0x7c, 0xce, 0x25, 0xb7, 0xa1, 0x4c, 0x75, 0x0c, 0xc9, 0x62, 0x7b, 0xf4, 0x4b,
0xd5, 0xee, 0x8d, 0x6c, 0x04, 0x41, 0xed, 0xbb, 0xb0, 0x9c, 0xf8, 0xbe, 0x0d, 0xc9, 0x5c, 0x93,
0xfc, 0x4b, 0xc5, 0xee, 0x9d, 0x3c, 0xa8, 0x62, 0xad, 0x21, 0xb4, 0xe2, 0x0f, 0xfc, 0x91, 0xac,
0xb5, 0x26, 0xfd, 0x34, 0xa9, 0xfb, 0x4e, 0x0e, 0x4c, 0xb1, 0x90, 0x05, 0xed, 0xe4, 0xf7, 0x56,
0xe8, 0xce, 0x54, 0x02, 0x71, 0x75, 0x7b, 0x37, 0x17, 0xae, 0x58, 0xee, 0x8c, 0x2a, 0x41, 0xea,
0x13, 0x1e, 0x74, 0x4f, 0x4e, 0x26, 0xeb, 0xdb, 0xa2, 0xee, 0xfd, 0xdc, 0xf8, 0x62, 0xe9, 0xdf,
0x64, 0x77, 0xed, 0xb2, 0xcf, 0x60, 0xd0, 0x07, 0x72, 0x72, 0x53, 0xbe, 0xdf, 0xe9, 0xae, 0x9f,
0x67, 0x8a, 0xd8, 0xc4, 0xf7, 0xe9, 0x25, 0xb9, 0xe4, 0x43, 0x92, 0xa4, 0xdd, 0x05, 0xf4, 0xb2,
0xbf, 0x91, 0xe9, 0x7e, 0x70, 0x8e, 0x19, 0x62, 0x03, 0x4e, 0xf2, 0x83, 0xb6, 0xc0, 0x0c, 0xef,
0xcf, 0xd4, 0x9a, 0xf9, 0x6c, 0xf0, 0x3b, 0xb0, 0x9c, 0x08, 0xd6, 0x28, 0x7f, 0x40, 0xef, 0x4e,
0xcb, 0xa8, 0x98, 0x49, 0x26, 0xde, 0x1c, 0xa0, 0x0c, 0xed, 0x97, 0xbc, 0x4b, 0xe8, 0xde, 0xc9,
0x83, 0x2a, 0x0e, 0xe2, 0x51, 0x77, 0x99, 0xb8, 0x75, 0x46, 0x77, 0xe5, 0x34, 0xe4, 0x37, 0xe6,
0xdd, 0xf7, 0x72, 0x62, 0x8b, 0x45, 0x4f, 0xe0, 0xa2, 0xe4, 0xc2, 0x1f, 0xbd, 0x37, 0x55, 0x58,
0xc9, 0x97, 0x0e, 0xdd, 0x7b, 0x79, 0xd1, 0xc5, 0xba, 0xbf, 0x01, 0x68, 0xff, 0xc8, 0x39, 0x7d,
0xe8, 0xd8, 0x87, 0xe6, 0x70, 0xe2, 0xea, 0xec, 0x85, 0x65, 0x56, 0x6c, 0x48, 0xa3, 0x66, 0xe8,
0xe8, 0xd4, 0x19, 0x62, 0xf1, 0x3e, 0xc0, 0x16, 0xf6, 0x77, 0xb0, 0xef, 0x12, 0xc3, 0xb8, 0x25,
0xd5, 0xb3, 0x10, 0x21, 0x58, 0xea, 0xed, 0x99, 0x78, 0x91, 0x50, 0xd4, 0xde, 0xd1, 0xed, 0x89,
0x3e, 0x8a, 0x3c, 0x4c, 0xbe, 0x2b, 0x9d, 0x9e, 0x44, 0xcb, 0x10, 0x64, 0x26, 0xb6, 0x58, 0xf2,
0x54, 0x84, 0xf7, 0xc8, 0x5d, 0x48, 0xd2, 0xed, 0x85, 0x7b, 0x96, 0xdf, 0x93, 0x27, 0xdd, 0xde,
0x14, 0x7c, 0xb1, 0xf0, 0x57, 0x0a, 0x7d, 0x33, 0x92, 0x40, 0x78, 0x62, 0xfa, 0x47, 0x7b, 0x23,
0xdd, 0xf6, 0xf2, 0x6c, 0x81, 0x22, 0x9e, 0x63, 0x0b, 0x1c, 0x5f, 0x6c, 0xc1, 0x80, 0x66, 0xec,
0x86, 0x03, 0xc9, 0x9e, 0xf8, 0xca, 0xae, 0x6b, 0xba, 0xb7, 0x67, 0x23, 0x8a, 0x55, 0x8e, 0xa0,
0x19, 0x98, 0x12, 0x63, 0xee, 0x3b, 0x59, 0x3b, 0x0d, 0x71, 0x32, 0x3c, 0x81, 0x1c, 0x35, 0xea,
0x09, 0xd2, 0x0d, 0x5c, 0x94, 0xaf, 0xf1, 0x3f, 0xcd, 0x13, 0x64, 0x77, 0x85, 0x99, 0xab, 0x4b,
0x5c, 0x96, 0xc8, 0xfd, 0xa8, 0xf4, 0xee, 0x47, 0xea, 0xea, 0x32, 0xee, 0x5e, 0xd4, 0x0b, 0xe8,
0x09, 0x54, 0xf8, 0xbf, 0x67, 0x78, 0x6b, 0x7a, 0x23, 0x87, 0x53, 0xbf, 0x39, 0x03, 0x4b, 0x10,
0x3e, 0x86, 0xb5, 0x8c, 0x36, 0x8e, 0x34, 0x04, 0x4f, 0x6f, 0xf9, 0xcc, 0x0a, 0x0e, 0x3a, 0xa0,
0xf4, 0x37, 0x90, 0x52, 0x31, 0x65, 0x7e, 0x2a, 0x99, 0x63, 0x89, 0xf4, 0x67, 0x8c, 0xd2, 0x25,
0x32, 0xbf, 0x76, 0x9c, 0xb5, 0x44, 0x1f, 0x56, 0x52, 0xcd, 0x00, 0xf4, 0x6e, 0x46, 0x04, 0x95,
0xb5, 0x0c, 0x66, 0x2d, 0x30, 0x84, 0xd7, 0xa4, 0x85, 0xaf, 0x34, 0x23, 0x98, 0x56, 0x22, 0xcf,
0x5a, 0x68, 0x00, 0x17, 0x25, 0xe5, 0xae, 0x34, 0x96, 0x65, 0x97, 0xc5, 0x33, 0x16, 0x59, 0xff,
0xb7, 0x1a, 0x54, 0x83, 0xc7, 0xc2, 0xaf, 0xa0, 0xa6, 0x7a, 0x05, 0x45, 0xce, 0x77, 0x60, 0x39,
0xf1, 0x61, 0xa2, 0xd4, 0x31, 0xc8, 0x3f, 0x5e, 0x9c, 0x25, 0xb3, 0x27, 0xfc, 0xdf, 0xe6, 0x88,
0x7c, 0xe7, 0xed, 0xac, 0x42, 0x29, 0x99, 0xea, 0xcc, 0x20, 0xfc, 0xff, 0x3b, 0xc1, 0xd8, 0x05,
0x88, 0xa4, 0x16, 0xd3, 0x5f, 0xf0, 0x90, 0x68, 0x39, 0x8b, 0x5b, 0x96, 0x34, 0x7b, 0x78, 0x27,
0xcf, 0x6b, 0x8b, 0x6c, 0xff, 0x9f, 0x9d, 0x33, 0x3c, 0x86, 0x46, 0xf4, 0x6d, 0x1d, 0x92, 0xfe,
0x93, 0x96, 0xf4, 0xe3, 0xbb, 0x59, 0xa7, 0xd8, 0x39, 0x67, 0x58, 0x99, 0x41, 0xce, 0x23, 0xce,
0x37, 0xd9, 0x39, 0xcf, 0x70, 0xbe, 0x19, 0xfd, 0x7a, 0x69, 0x18, 0xce, 0x6e, 0xc7, 0xb3, 0x7a,
0x39, 0xd9, 0x0e, 0x96, 0xd6, 0xcb, 0x19, 0x0d, 0x76, 0x69, 0xbd, 0x9c, 0xd5, 0x5f, 0x56, 0x2f,
0x6c, 0x7c, 0xf8, 0xed, 0x0f, 0x86, 0xa6, 0x7f, 0x34, 0x79, 0x4a, 0x4e, 0x7f, 0x9f, 0x4d, 0x7d,
0xcf, 0x74, 0xf8, 0x5f, 0xf7, 0x03, 0x75, 0xbf, 0x4f, 0xa9, 0xdd, 0x27, 0xd4, 0xc6, 0x4f, 0x9f,
0x56, 0xe8, 0xe8, 0xc3, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x73, 0xb0, 0x83, 0xf8, 0x4b,
0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -5013,6 +5129,7 @@ type DataCoordClient interface {
SaveBinlogPaths(ctx context.Context, in *SaveBinlogPathsRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
GetRecoveryInfo(ctx context.Context, in *GetRecoveryInfoRequest, opts ...grpc.CallOption) (*GetRecoveryInfoResponse, error)
GetFlushedSegments(ctx context.Context, in *GetFlushedSegmentsRequest, opts ...grpc.CallOption) (*GetFlushedSegmentsResponse, error)
GetSegmentsByStates(ctx context.Context, in *GetSegmentsByStatesRequest, opts ...grpc.CallOption) (*GetSegmentsByStatesResponse, error)
ShowConfigurations(ctx context.Context, in *internalpb.ShowConfigurationsRequest, opts ...grpc.CallOption) (*internalpb.ShowConfigurationsResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error)
@ -5167,6 +5284,15 @@ func (c *dataCoordClient) GetFlushedSegments(ctx context.Context, in *GetFlushed
return out, nil
}
func (c *dataCoordClient) GetSegmentsByStates(ctx context.Context, in *GetSegmentsByStatesRequest, opts ...grpc.CallOption) (*GetSegmentsByStatesResponse, error) {
out := new(GetSegmentsByStatesResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/GetSegmentsByStates", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *dataCoordClient) ShowConfigurations(ctx context.Context, in *internalpb.ShowConfigurationsRequest, opts ...grpc.CallOption) (*internalpb.ShowConfigurationsResponse, error) {
out := new(internalpb.ShowConfigurationsResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/ShowConfigurations", in, out, opts...)
@ -5327,6 +5453,7 @@ type DataCoordServer interface {
SaveBinlogPaths(context.Context, *SaveBinlogPathsRequest) (*commonpb.Status, error)
GetRecoveryInfo(context.Context, *GetRecoveryInfoRequest) (*GetRecoveryInfoResponse, error)
GetFlushedSegments(context.Context, *GetFlushedSegmentsRequest) (*GetFlushedSegmentsResponse, error)
GetSegmentsByStates(context.Context, *GetSegmentsByStatesRequest) (*GetSegmentsByStatesResponse, error)
ShowConfigurations(context.Context, *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
@ -5393,6 +5520,9 @@ func (*UnimplementedDataCoordServer) GetRecoveryInfo(ctx context.Context, req *G
func (*UnimplementedDataCoordServer) GetFlushedSegments(ctx context.Context, req *GetFlushedSegmentsRequest) (*GetFlushedSegmentsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetFlushedSegments not implemented")
}
func (*UnimplementedDataCoordServer) GetSegmentsByStates(ctx context.Context, req *GetSegmentsByStatesRequest) (*GetSegmentsByStatesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSegmentsByStates not implemented")
}
func (*UnimplementedDataCoordServer) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ShowConfigurations not implemented")
}
@ -5698,6 +5828,24 @@ func _DataCoord_GetFlushedSegments_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
func _DataCoord_GetSegmentsByStates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetSegmentsByStatesRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataCoordServer).GetSegmentsByStates(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataCoord/GetSegmentsByStates",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataCoordServer).GetSegmentsByStates(ctx, req.(*GetSegmentsByStatesRequest))
}
return interceptor(ctx, in, info, handler)
}
func _DataCoord_ShowConfigurations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(internalpb.ShowConfigurationsRequest)
if err := dec(in); err != nil {
@ -6046,6 +6194,10 @@ var _DataCoord_serviceDesc = grpc.ServiceDesc{
MethodName: "GetFlushedSegments",
Handler: _DataCoord_GetFlushedSegments_Handler,
},
{
MethodName: "GetSegmentsByStates",
Handler: _DataCoord_GetSegmentsByStates_Handler,
},
{
MethodName: "ShowConfigurations",
Handler: _DataCoord_ShowConfigurations_Handler,

View File

@ -166,6 +166,10 @@ func (coord *DataCoordMock) GetFlushedSegments(ctx context.Context, req *datapb.
panic("implement me")
}
func (coord *DataCoordMock) GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error) {
panic("implement me")
}
func (coord *DataCoordMock) ShowConfigurations(ctx context.Context, req *internalpb.ShowConfigurationsRequest) (*internalpb.ShowConfigurationsResponse, error) {
if !coord.healthy() {
return &internalpb.ShowConfigurationsResponse{

View File

@ -3531,23 +3531,18 @@ func (node *Proxy) getSegmentsOfCollection(ctx context.Context, dbName string, c
ret := make([]UniqueID, 0)
for _, partitionID := range showPartitionsResp.PartitionIDs {
showSegmentResponse, err := node.rootCoord.ShowSegments(ctx, &milvuspb.ShowSegmentsRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_ShowSegments,
MsgID: 0,
Timestamp: 0,
SourceID: Params.ProxyCfg.GetNodeID(),
},
getSegmentsByStatesResponse, err := node.dataCoord.GetSegmentsByStates(ctx, &datapb.GetSegmentsByStatesRequest{
CollectionID: collectionID,
PartitionID: partitionID,
States: []commonpb.SegmentState{commonpb.SegmentState_Flushing, commonpb.SegmentState_Flushed, commonpb.SegmentState_Sealed},
})
if err != nil {
return nil, err
}
if showSegmentResponse.Status.ErrorCode != commonpb.ErrorCode_Success {
return nil, errors.New(showSegmentResponse.Status.Reason)
if getSegmentsByStatesResponse.Status.ErrorCode != commonpb.ErrorCode_Success {
return nil, errors.New(getSegmentsByStatesResponse.Status.Reason)
}
ret = append(ret, showSegmentResponse.SegmentIDs...)
ret = append(ret, getSegmentsByStatesResponse.GetSegments()...)
}
return ret, nil
}

View File

@ -251,11 +251,21 @@ type DataCoord interface {
// if the constraint is broken, the checkpoint position will not be monotonically increasing and the integrity will be compromised
SaveBinlogPaths(ctx context.Context, req *datapb.SaveBinlogPathsRequest) (*commonpb.Status, error)
// GetFlushedSegments returns flushed segment list of requested collection/parition
// GetSegmentsByStates returns segment list of requested collection/partition in given states
//
// ctx is the context to control request deadline and cancellation
// req contains the collection/partition id and states to query
// when partition is lesser or equal to 0, all flushed segments of collection will be returned
//
// response struct `GetSegmentsByStatesResponse` contains segment id list
// error is returned only when some communication issue occurs
GetSegmentsByStates(ctx context.Context, req *datapb.GetSegmentsByStatesRequest) (*datapb.GetSegmentsByStatesResponse, error)
// GetFlushedSegments returns flushed segment list of requested collection/partition
//
// ctx is the context to control request deadline and cancellation
// req contains the collection/partition id to query
// when partition is lesser or equal to 0, all flushed segments of collection will be returned
// when partition is lesser or equal to 0, all flushed segments of collection will be returned
//
// response struct `GetFlushedSegmentsResponse` contains flushed segment id list
// error is returned only when some communication issue occurs

View File

@ -90,6 +90,10 @@ func (m *GrpcDataCoordClient) GetFlushedSegments(ctx context.Context, in *datapb
return &datapb.GetFlushedSegmentsResponse{}, m.Err
}
func (m *GrpcDataCoordClient) GetSegmentsByStates(ctx context.Context, in *datapb.GetSegmentsByStatesRequest, opts ...grpc.CallOption) (*datapb.GetSegmentsByStatesResponse, error) {
return &datapb.GetSegmentsByStatesResponse{}, m.Err
}
func (m *GrpcDataCoordClient) ShowConfigurations(ctx context.Context, in *internalpb.ShowConfigurationsRequest, opts ...grpc.CallOption) (*internalpb.ShowConfigurationsResponse, error) {
return &internalpb.ShowConfigurationsResponse{}, m.Err
}