Add rpc interfaces for import (#15930)

Signed-off-by: yhmo <yihua.mo@zilliz.com>
This commit is contained in:
groot 2022-03-09 18:33:59 +08:00 committed by GitHub
parent d013134b44
commit 5fdef607d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 4165 additions and 627 deletions

View File

@ -169,7 +169,7 @@ static void InitDefaultsscc_info_Status_common_2eproto() {
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Status_common_2eproto}, {}}; {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Status_common_2eproto}, {}};
static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_common_2eproto[8]; static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_common_2eproto[8];
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_common_2eproto[7]; static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_common_2eproto[8];
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_common_2eproto = nullptr; static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_common_2eproto = nullptr;
const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_common_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_common_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
@ -319,9 +319,11 @@ const char descriptor_table_protodef_common_2eproto[] PROTOBUF_SECTION_VARIABLE(
"\n\017CompactionState\022\021\n\rUndefiedState\020\000\022\r\n\t" "\n\017CompactionState\022\021\n\rUndefiedState\020\000\022\r\n\t"
"Executing\020\001\022\r\n\tCompleted\020\002*X\n\020Consistenc" "Executing\020\001\022\r\n\tCompleted\020\002*X\n\020Consistenc"
"yLevel\022\n\n\006Strong\020\000\022\013\n\007Session\020\001\022\013\n\007Bound" "yLevel\022\n\n\006Strong\020\000\022\013\n\007Session\020\001\022\013\n\007Bound"
"ed\020\002\022\016\n\nEventually\020\003\022\016\n\nCustomized\020\004B5Z3" "ed\020\002\022\016\n\nEventually\020\003\022\016\n\nCustomized\020\004*\\\n\013"
"github.com/milvus-io/milvus/internal/pro" "ImportState\022\021\n\rImportPending\020\000\022\023\n\017Import"
"to/commonpbb\006proto3" "Executing\020\001\022\023\n\017ImportCompleted\020\002\022\020\n\014Impo"
"rtFailed\020\003B5Z3github.com/milvus-io/milvu"
"s/internal/proto/commonpbb\006proto3"
; ;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_common_2eproto_deps[1] = { static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_common_2eproto_deps[1] = {
}; };
@ -338,7 +340,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_com
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_common_2eproto_once; static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_common_2eproto_once;
static bool descriptor_table_common_2eproto_initialized = false; static bool descriptor_table_common_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_common_2eproto = { const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_common_2eproto = {
&descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 2739, &descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 2833,
&descriptor_table_common_2eproto_once, descriptor_table_common_2eproto_sccs, descriptor_table_common_2eproto_deps, 8, 0, &descriptor_table_common_2eproto_once, descriptor_table_common_2eproto_sccs, descriptor_table_common_2eproto_deps, 8, 0,
schemas, file_default_instances, TableStruct_common_2eproto::offsets, schemas, file_default_instances, TableStruct_common_2eproto::offsets,
file_level_metadata_common_2eproto, 8, file_level_enum_descriptors_common_2eproto, file_level_service_descriptors_common_2eproto, file_level_metadata_common_2eproto, 8, file_level_enum_descriptors_common_2eproto, file_level_service_descriptors_common_2eproto,
@ -540,6 +542,22 @@ bool ConsistencyLevel_IsValid(int value) {
} }
} }
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ImportState_descriptor() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_common_2eproto);
return file_level_enum_descriptors_common_2eproto[7];
}
bool ImportState_IsValid(int value) {
switch (value) {
case 0:
case 1:
case 2:
case 3:
return true;
default:
return false;
}
}
// =================================================================== // ===================================================================

View File

@ -367,6 +367,33 @@ inline bool ConsistencyLevel_Parse(
return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<ConsistencyLevel>( return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<ConsistencyLevel>(
ConsistencyLevel_descriptor(), name, value); ConsistencyLevel_descriptor(), name, value);
} }
enum ImportState : int {
ImportPending = 0,
ImportExecuting = 1,
ImportCompleted = 2,
ImportFailed = 3,
ImportState_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
ImportState_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool ImportState_IsValid(int value);
constexpr ImportState ImportState_MIN = ImportPending;
constexpr ImportState ImportState_MAX = ImportFailed;
constexpr int ImportState_ARRAYSIZE = ImportState_MAX + 1;
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ImportState_descriptor();
template<typename T>
inline const std::string& ImportState_Name(T enum_t_value) {
static_assert(::std::is_same<T, ImportState>::value ||
::std::is_integral<T>::value,
"Incorrect type passed to function ImportState_Name.");
return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
ImportState_descriptor(), enum_t_value);
}
inline bool ImportState_Parse(
const std::string& name, ImportState* value) {
return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<ImportState>(
ImportState_descriptor(), name, value);
}
// =================================================================== // ===================================================================
class Status : class Status :
@ -2219,6 +2246,11 @@ template <>
inline const EnumDescriptor* GetEnumDescriptor< ::milvus::proto::common::ConsistencyLevel>() { inline const EnumDescriptor* GetEnumDescriptor< ::milvus::proto::common::ConsistencyLevel>() {
return ::milvus::proto::common::ConsistencyLevel_descriptor(); return ::milvus::proto::common::ConsistencyLevel_descriptor();
} }
template <> struct is_proto_enum< ::milvus::proto::common::ImportState> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::milvus::proto::common::ImportState>() {
return ::milvus::proto::common::ImportState_descriptor();
}
PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_CLOSE

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -196,6 +196,10 @@ func (c *mockDataNodeClient) Compaction(ctx context.Context, req *datapb.Compact
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_UnexpectedError, Reason: "not implemented"}, nil return &commonpb.Status{ErrorCode: commonpb.ErrorCode_UnexpectedError, Reason: "not implemented"}, nil
} }
func (c *mockDataNodeClient) Import(ctx context.Context, in *milvuspb.ImportRequest) (*commonpb.Status, error) {
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
}
func (c *mockDataNodeClient) Stop() error { func (c *mockDataNodeClient) Stop() error {
c.state = internalpb.StateCode_Abnormal c.state = internalpb.StateCode_Abnormal
return nil return nil

View File

@ -961,3 +961,38 @@ func (s *Server) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateR
resp.Status.ErrorCode = commonpb.ErrorCode_Success resp.Status.ErrorCode = commonpb.ErrorCode_Success
return resp, nil return resp, nil
} }
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
func (s *Server) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
log.Info("receive import request")
resp := &milvuspb.ImportResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
},
}
return resp, nil
}
// Check import task state from datanode
func (s *Server) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
log.Info("receive get import state request")
resp := &milvuspb.GetImportStateResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
},
}
return resp, nil
}
// Report impot task state to datacoord
func (s *Server) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
log.Info("receive complete import request")
resp := &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
}
return resp, nil
}

View File

@ -777,3 +777,11 @@ func (node *DataNode) Compaction(ctx context.Context, req *datapb.CompactionPlan
ErrorCode: commonpb.ErrorCode_Success, ErrorCode: commonpb.ErrorCode_Success,
}, nil }, nil
} }
// Compaction handles compaction request from DataCoord
// returns status as long as compaction task enqueued or invalid
func (node *DataNode) Import(ctx context.Context, req *milvuspb.ImportRequest) (*commonpb.Status, error) {
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
}, nil
}

View File

@ -486,3 +486,45 @@ func (c *Client) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtual
} }
return ret.(*datapb.DropVirtualChannelResponse), err return ret.(*datapb.DropVirtualChannelResponse), err
} }
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
func (c *Client) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(datapb.DataCoordClient).Import(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*milvuspb.ImportResponse), err
}
// Check import task state from datanode
func (c *Client) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(datapb.DataCoordClient).GetImportState(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*milvuspb.GetImportStateResponse), err
}
// Report impot task state to datacoord
func (c *Client) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(datapb.DataCoordClient).CompleteImport(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*commonpb.Status), err
}

View File

@ -327,3 +327,18 @@ func (s *Server) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateR
func (s *Server) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest) (*datapb.DropVirtualChannelResponse, error) { func (s *Server) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest) (*datapb.DropVirtualChannelResponse, error) {
return s.dataCoord.DropVirtualChannel(ctx, req) return s.dataCoord.DropVirtualChannel(ctx, req)
} }
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
func (s *Server) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return s.dataCoord.Import(ctx, req)
}
// Check import task state from datanode
func (s *Server) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return s.dataCoord.GetImportState(ctx, req)
}
// Report impot task state to datacoord
func (s *Server) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
return s.dataCoord.CompleteImport(ctx, req)
}

View File

@ -55,6 +55,8 @@ type MockDataCoord struct {
watchChannelsResp *datapb.WatchChannelsResponse watchChannelsResp *datapb.WatchChannelsResponse
getFlushStateResp *milvuspb.GetFlushStateResponse getFlushStateResp *milvuspb.GetFlushStateResponse
dropVChanResp *datapb.DropVirtualChannelResponse dropVChanResp *datapb.DropVirtualChannelResponse
importResp *milvuspb.ImportResponse
getImportStateResp *milvuspb.GetImportStateResponse
} }
func (m *MockDataCoord) Init() error { func (m *MockDataCoord) Init() error {
@ -164,6 +166,18 @@ func (m *MockDataCoord) DropVirtualChannel(ctx context.Context, req *datapb.Drop
return m.dropVChanResp, m.err return m.dropVChanResp, m.err
} }
func (m *MockDataCoord) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return m.importResp, m.err
}
func (m *MockDataCoord) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return m.getImportStateResp, m.err
}
func (m *MockDataCoord) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
return m.status, m.err
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
func Test_NewServer(t *testing.T) { func Test_NewServer(t *testing.T) {
ctx := context.Background() ctx := context.Background()

View File

@ -181,3 +181,17 @@ func (c *Client) Compaction(ctx context.Context, req *datapb.CompactionPlan) (*c
} }
return ret.(*commonpb.Status), err return ret.(*commonpb.Status), err
} }
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
func (c *Client) Import(ctx context.Context, req *milvuspb.ImportRequest) (*commonpb.Status, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(datapb.DataNodeClient).Import(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*commonpb.Status), err
}

View File

@ -353,3 +353,7 @@ func (s *Server) GetMetrics(ctx context.Context, request *milvuspb.GetMetricsReq
func (s *Server) Compaction(ctx context.Context, request *datapb.CompactionPlan) (*commonpb.Status, error) { func (s *Server) Compaction(ctx context.Context, request *datapb.CompactionPlan) (*commonpb.Status, error) {
return s.datanode.Compaction(ctx, request) return s.datanode.Compaction(ctx, request)
} }
func (s *Server) Import(ctx context.Context, request *milvuspb.ImportRequest) (*commonpb.Status, error) {
return s.datanode.Import(ctx, request)
}

View File

@ -111,6 +111,10 @@ func (m *MockDataNode) Compaction(ctx context.Context, req *datapb.CompactionPla
func (m *MockDataNode) SetEtcdClient(client *clientv3.Client) { func (m *MockDataNode) SetEtcdClient(client *clientv3.Client) {
} }
func (m *MockDataNode) Import(ctx context.Context, req *milvuspb.ImportRequest) (*commonpb.Status, error) {
return m.status, m.err
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type mockDataCoord struct { type mockDataCoord struct {
types.DataCoord types.DataCoord

View File

@ -630,3 +630,11 @@ func (s *Server) SendSearchResult(ctx context.Context, results *internalpb.Searc
func (s *Server) SendRetrieveResult(ctx context.Context, results *internalpb.RetrieveResults) (*commonpb.Status, error) { func (s *Server) SendRetrieveResult(ctx context.Context, results *internalpb.RetrieveResults) (*commonpb.Status, error) {
return s.proxy.SendRetrieveResult(ctx, results) return s.proxy.SendRetrieveResult(ctx, results)
} }
func (s *Server) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return s.proxy.Import(ctx, req)
}
func (s *Server) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return s.proxy.GetImportState(ctx, req)
}

View File

@ -419,6 +419,18 @@ func (m *MockDataCoord) DropVirtualChannel(ctx context.Context, req *datapb.Drop
return &datapb.DropVirtualChannelResponse{}, nil return &datapb.DropVirtualChannelResponse{}, nil
} }
func (m *MockDataCoord) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return nil, nil
}
func (m *MockDataCoord) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return nil, nil
}
func (m *MockDataCoord) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
return nil, nil
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type MockProxy struct { type MockProxy struct {
MockBase MockBase
@ -644,6 +656,14 @@ func (m *MockProxy) SendRetrieveResult(ctx context.Context, req *internalpb.Retr
return nil, nil return nil, nil
} }
func (m *MockProxy) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return nil, nil
}
func (m *MockProxy) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return nil, nil
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
func Test_NewServer(t *testing.T) { func Test_NewServer(t *testing.T) {
ctx := context.Background() ctx := context.Background()

View File

@ -192,3 +192,10 @@ enum ConsistencyLevel {
Eventually = 3; Eventually = 3;
Customized = 4; // Users pass their own `guarantee_timestamp`. Customized = 4; // Users pass their own `guarantee_timestamp`.
} }
enum ImportState {
ImportPending = 0;
ImportExecuting = 1;
ImportCompleted = 2;
ImportFailed = 3;
}

View File

@ -483,6 +483,37 @@ func (ConsistencyLevel) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_555bd8c177793206, []int{6} return fileDescriptor_555bd8c177793206, []int{6}
} }
type ImportState int32
const (
ImportState_ImportPending ImportState = 0
ImportState_ImportExecuting ImportState = 1
ImportState_ImportCompleted ImportState = 2
ImportState_ImportFailed ImportState = 3
)
var ImportState_name = map[int32]string{
0: "ImportPending",
1: "ImportExecuting",
2: "ImportCompleted",
3: "ImportFailed",
}
var ImportState_value = map[string]int32{
"ImportPending": 0,
"ImportExecuting": 1,
"ImportCompleted": 2,
"ImportFailed": 3,
}
func (x ImportState) String() string {
return proto.EnumName(ImportState_name, int32(x))
}
func (ImportState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_555bd8c177793206, []int{7}
}
type Status struct { type Status struct {
ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3,enum=milvus.proto.common.ErrorCode" json:"error_code,omitempty"` ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3,enum=milvus.proto.common.ErrorCode" json:"error_code,omitempty"`
Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"`
@ -869,6 +900,7 @@ func init() {
proto.RegisterEnum("milvus.proto.common.DslType", DslType_name, DslType_value) proto.RegisterEnum("milvus.proto.common.DslType", DslType_name, DslType_value)
proto.RegisterEnum("milvus.proto.common.CompactionState", CompactionState_name, CompactionState_value) proto.RegisterEnum("milvus.proto.common.CompactionState", CompactionState_name, CompactionState_value)
proto.RegisterEnum("milvus.proto.common.ConsistencyLevel", ConsistencyLevel_name, ConsistencyLevel_value) proto.RegisterEnum("milvus.proto.common.ConsistencyLevel", ConsistencyLevel_name, ConsistencyLevel_value)
proto.RegisterEnum("milvus.proto.common.ImportState", ImportState_name, ImportState_value)
proto.RegisterType((*Status)(nil), "milvus.proto.common.Status") proto.RegisterType((*Status)(nil), "milvus.proto.common.Status")
proto.RegisterType((*KeyValuePair)(nil), "milvus.proto.common.KeyValuePair") proto.RegisterType((*KeyValuePair)(nil), "milvus.proto.common.KeyValuePair")
proto.RegisterType((*KeyDataPair)(nil), "milvus.proto.common.KeyDataPair") proto.RegisterType((*KeyDataPair)(nil), "milvus.proto.common.KeyDataPair")
@ -882,100 +914,102 @@ func init() {
func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) } func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) }
var fileDescriptor_555bd8c177793206 = []byte{ var fileDescriptor_555bd8c177793206 = []byte{
// 1509 bytes of a gzipped FileDescriptorProto // 1542 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x5b, 0x73, 0x1b, 0x4b, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x5b, 0x6f, 0x1c, 0x4b,
0x11, 0xf6, 0x6a, 0x15, 0xcb, 0x6a, 0xcb, 0xf6, 0x64, 0x7c, 0x89, 0x4f, 0x08, 0x54, 0xca, 0x4f, 0x11, 0xf6, 0xec, 0x6c, 0x6c, 0x6f, 0x79, 0x6d, 0x77, 0xda, 0x97, 0xf8, 0x84, 0x80, 0x22, 0x3f,
0x29, 0x57, 0x9d, 0x04, 0x48, 0x01, 0x4f, 0xe7, 0xc1, 0xd2, 0xda, 0x8e, 0x2a, 0xb1, 0x63, 0x24, 0x45, 0x96, 0x4e, 0x02, 0x44, 0xc0, 0xd3, 0x79, 0xb0, 0x77, 0x6c, 0x67, 0x95, 0xd8, 0x31, 0xbb,
0x27, 0x9c, 0xe2, 0x81, 0xd4, 0x78, 0xb7, 0x2d, 0x0d, 0x99, 0x9d, 0x11, 0x33, 0xb3, 0x8e, 0xc5, 0x4e, 0x38, 0x42, 0x88, 0xa8, 0x3d, 0x53, 0xde, 0x6d, 0xd2, 0xd3, 0xbd, 0x74, 0xf7, 0x38, 0x5e,
0x13, 0xfc, 0x03, 0x38, 0xff, 0x82, 0x2a, 0xa0, 0xb8, 0x43, 0xf1, 0x0b, 0xb8, 0x3f, 0x73, 0xf9, 0x9e, 0xe0, 0x1f, 0xc0, 0xf9, 0x17, 0x48, 0x80, 0xb8, 0x83, 0xf8, 0x05, 0xdc, 0x9f, 0xb9, 0xfc,
0x03, 0xfc, 0x00, 0xae, 0xe7, 0x4a, 0xf5, 0xec, 0x4a, 0xda, 0x53, 0x75, 0xf2, 0xc4, 0xdb, 0xf6, 0x01, 0x7e, 0x00, 0xd7, 0x73, 0x45, 0xd5, 0x33, 0x3b, 0x3b, 0x47, 0x3a, 0xe7, 0xe9, 0xbc, 0x75,
0xd7, 0xdd, 0x5f, 0xf7, 0x74, 0xf7, 0xf4, 0x0e, 0x74, 0x52, 0x93, 0xe7, 0x46, 0xdf, 0x9f, 0x58, 0x7d, 0x5d, 0xf5, 0x55, 0x75, 0x55, 0x75, 0x75, 0x43, 0x37, 0x35, 0x79, 0x6e, 0xf4, 0xfd, 0x89,
0xe3, 0x0d, 0xdf, 0xcc, 0xa5, 0xba, 0x2a, 0x5c, 0x29, 0xdd, 0x2f, 0x55, 0x7b, 0x2f, 0x60, 0x79, 0x35, 0xde, 0xf0, 0x8d, 0x5c, 0xaa, 0xab, 0xc2, 0x95, 0xd2, 0xfd, 0x72, 0x6b, 0xf7, 0x05, 0x2c,
0xe8, 0x85, 0x2f, 0x1c, 0x7f, 0x0b, 0x00, 0xad, 0x35, 0xf6, 0x45, 0x6a, 0x32, 0xdc, 0x8d, 0xee, 0x0e, 0xbd, 0xf0, 0x85, 0xe3, 0x6f, 0x00, 0xa0, 0xb5, 0xc6, 0xbe, 0x48, 0x4d, 0x86, 0x3b, 0xd1,
0x46, 0xf7, 0xd6, 0x3f, 0xff, 0x99, 0xfb, 0x9f, 0xe0, 0x73, 0xff, 0x90, 0xcc, 0x7a, 0x26, 0xc3, 0xdd, 0xe8, 0xde, 0xda, 0xe7, 0x3f, 0x73, 0xff, 0x23, 0x6c, 0xee, 0x1f, 0x92, 0x5a, 0xcf, 0x64,
0x41, 0x1b, 0x67, 0x9f, 0x7c, 0x07, 0x96, 0x2d, 0x0a, 0x67, 0xf4, 0x6e, 0xe3, 0x6e, 0x74, 0xaf, 0x38, 0xe8, 0xe0, 0x6c, 0xc9, 0xb7, 0x61, 0xd1, 0xa2, 0x70, 0x46, 0xef, 0xb4, 0xee, 0x46, 0xf7,
0x3d, 0xa8, 0xa4, 0xbd, 0x2f, 0x42, 0xe7, 0x31, 0x4e, 0x9f, 0x0b, 0x55, 0xe0, 0x99, 0x90, 0x96, 0x3a, 0x83, 0x4a, 0xda, 0xfd, 0x22, 0x74, 0x1f, 0xe3, 0xf4, 0xb9, 0x50, 0x05, 0x9e, 0x09, 0x69,
0x33, 0x88, 0x5f, 0xe2, 0x34, 0xf0, 0xb7, 0x07, 0xf4, 0xc9, 0xb7, 0xe0, 0xc6, 0x15, 0xa9, 0x2b, 0x39, 0x83, 0xf8, 0x25, 0x4e, 0x03, 0x7f, 0x67, 0x40, 0x4b, 0xbe, 0x09, 0x37, 0xae, 0x68, 0xbb,
0xc7, 0x52, 0xd8, 0x7b, 0x08, 0xab, 0x8f, 0x71, 0x9a, 0x08, 0x2f, 0x5e, 0xe3, 0xc6, 0xa1, 0x99, 0x32, 0x2c, 0x85, 0xdd, 0x87, 0xb0, 0xf2, 0x18, 0xa7, 0x89, 0xf0, 0xe2, 0x63, 0xcc, 0x38, 0xb4,
0x09, 0x2f, 0x82, 0x57, 0x67, 0x10, 0xbe, 0xf7, 0xee, 0x40, 0xb3, 0xab, 0xcc, 0xc5, 0x82, 0x32, 0x33, 0xe1, 0x45, 0xb0, 0xea, 0x0e, 0xc2, 0x7a, 0xf7, 0x0e, 0xb4, 0x0f, 0x94, 0xb9, 0x98, 0x53,
0x0a, 0xca, 0x8a, 0xf2, 0x4d, 0x68, 0x1d, 0x64, 0x99, 0x45, 0xe7, 0xf8, 0x3a, 0x34, 0xe4, 0xa4, 0x46, 0x61, 0xb3, 0xa2, 0x7c, 0x1d, 0x96, 0xf6, 0xb3, 0xcc, 0xa2, 0x73, 0x7c, 0x0d, 0x5a, 0x72,
0x62, 0x6b, 0xc8, 0x09, 0x91, 0x4d, 0x8c, 0xf5, 0x81, 0x2c, 0x1e, 0x84, 0xef, 0xbd, 0x77, 0x22, 0x52, 0xb1, 0xb5, 0xe4, 0x84, 0xc8, 0x26, 0xc6, 0xfa, 0x40, 0x16, 0x0f, 0xc2, 0x7a, 0xf7, 0xad,
0x68, 0x9d, 0xb8, 0x51, 0x57, 0x38, 0xe4, 0x5f, 0x82, 0x95, 0xdc, 0x8d, 0x5e, 0xf8, 0xe9, 0x64, 0x08, 0x96, 0x4e, 0xdc, 0xe8, 0x40, 0x38, 0xe4, 0x5f, 0x82, 0xe5, 0xdc, 0x8d, 0x5e, 0xf8, 0xe9,
0x56, 0x9a, 0x3b, 0x9f, 0x58, 0x9a, 0x13, 0x37, 0x3a, 0x9f, 0x4e, 0x70, 0xd0, 0xca, 0xcb, 0x0f, 0x64, 0x96, 0x9a, 0x3b, 0x1f, 0x99, 0x9a, 0x13, 0x37, 0x3a, 0x9f, 0x4e, 0x70, 0xb0, 0x94, 0x97,
0xca, 0x24, 0x77, 0xa3, 0x7e, 0x52, 0x31, 0x97, 0x02, 0xbf, 0x03, 0x6d, 0x2f, 0x73, 0x74, 0x5e, 0x0b, 0x8a, 0x24, 0x77, 0xa3, 0x7e, 0x52, 0x31, 0x97, 0x02, 0xbf, 0x03, 0x1d, 0x2f, 0x73, 0x74,
0xe4, 0x93, 0xdd, 0xf8, 0x6e, 0x74, 0xaf, 0x39, 0x58, 0x00, 0xfc, 0x36, 0xac, 0x38, 0x53, 0xd8, 0x5e, 0xe4, 0x93, 0x9d, 0xf8, 0x6e, 0x74, 0xaf, 0x3d, 0x98, 0x03, 0xfc, 0x36, 0x2c, 0x3b, 0x53,
0x14, 0xfb, 0xc9, 0x6e, 0x33, 0xb8, 0xcd, 0xe5, 0xbd, 0xb7, 0xa0, 0x7d, 0xe2, 0x46, 0x8f, 0x50, 0xd8, 0x14, 0xfb, 0xc9, 0x4e, 0x3b, 0x98, 0xd5, 0xf2, 0xee, 0x1b, 0xd0, 0x39, 0x71, 0xa3, 0x47,
0x64, 0x68, 0xf9, 0x67, 0xa1, 0x79, 0x21, 0x5c, 0x99, 0xd1, 0xea, 0xeb, 0x33, 0xa2, 0x13, 0x0c, 0x28, 0x32, 0xb4, 0xfc, 0xb3, 0xd0, 0xbe, 0x10, 0xae, 0x8c, 0x68, 0xe5, 0xe3, 0x23, 0xa2, 0x13,
0x82, 0xe5, 0xde, 0xd7, 0xa0, 0x93, 0x9c, 0x3c, 0xf9, 0x3f, 0x18, 0x28, 0x75, 0x37, 0x16, 0x36, 0x0c, 0x82, 0xe6, 0xee, 0xd7, 0xa1, 0x9b, 0x9c, 0x3c, 0xf9, 0x04, 0x0c, 0x14, 0xba, 0x1b, 0x0b,
0x3b, 0x15, 0xf9, 0xac, 0x63, 0x0b, 0x60, 0xff, 0xd7, 0x4d, 0x68, 0xcf, 0xc7, 0x83, 0xaf, 0x42, 0x9b, 0x9d, 0x8a, 0x7c, 0x56, 0xb1, 0x39, 0xb0, 0xf7, 0x9b, 0x36, 0x74, 0xea, 0xf6, 0xe0, 0x2b,
0x6b, 0x58, 0xa4, 0x29, 0x3a, 0xc7, 0x96, 0xf8, 0x26, 0x6c, 0x3c, 0xd3, 0x78, 0x3d, 0xc1, 0xd4, 0xb0, 0x34, 0x2c, 0xd2, 0x14, 0x9d, 0x63, 0x0b, 0x7c, 0x03, 0xd6, 0x9f, 0x69, 0xbc, 0x9e, 0x60,
0x63, 0x16, 0x6c, 0x58, 0xc4, 0x6f, 0xc2, 0x5a, 0xcf, 0x68, 0x8d, 0xa9, 0x3f, 0x12, 0x52, 0x61, 0xea, 0x31, 0x0b, 0x3a, 0x2c, 0xe2, 0x37, 0x61, 0xb5, 0x67, 0xb4, 0xc6, 0xd4, 0x1f, 0x09, 0xa9,
0xc6, 0x1a, 0x7c, 0x0b, 0xd8, 0x19, 0xda, 0x5c, 0x3a, 0x27, 0x8d, 0x4e, 0x50, 0x4b, 0xcc, 0x58, 0x30, 0x63, 0x2d, 0xbe, 0x09, 0xec, 0x0c, 0x6d, 0x2e, 0x9d, 0x93, 0x46, 0x27, 0xa8, 0x25, 0x66,
0xcc, 0x6f, 0xc1, 0x66, 0xcf, 0x28, 0x85, 0xa9, 0x97, 0x46, 0x9f, 0x1a, 0x7f, 0x78, 0x2d, 0x9d, 0x2c, 0xe6, 0xb7, 0x60, 0xa3, 0x67, 0x94, 0xc2, 0xd4, 0x4b, 0xa3, 0x4f, 0x8d, 0x3f, 0xbc, 0x96,
0x77, 0xac, 0x49, 0xb4, 0x7d, 0xa5, 0x70, 0x24, 0xd4, 0x81, 0x1d, 0x15, 0x39, 0x6a, 0xcf, 0x6e, 0xce, 0x3b, 0xd6, 0x26, 0xda, 0xbe, 0x52, 0x38, 0x12, 0x6a, 0xdf, 0x8e, 0x8a, 0x1c, 0xb5, 0x67,
0x10, 0x47, 0x05, 0x26, 0x32, 0x47, 0x4d, 0x4c, 0xac, 0x55, 0x43, 0xfb, 0x3a, 0xc3, 0x6b, 0xea, 0x37, 0x88, 0xa3, 0x02, 0x13, 0x99, 0xa3, 0x26, 0x26, 0xb6, 0xd4, 0x40, 0xfb, 0x3a, 0xc3, 0x6b,
0x0f, 0x5b, 0xe1, 0x6f, 0xc0, 0x76, 0x85, 0xd6, 0x02, 0x88, 0x1c, 0x59, 0x9b, 0x6f, 0xc0, 0x6a, 0xaa, 0x0f, 0x5b, 0xe6, 0xaf, 0xc1, 0x56, 0x85, 0x36, 0x1c, 0x88, 0x1c, 0x59, 0x87, 0xaf, 0xc3,
0xa5, 0x3a, 0x7f, 0x7a, 0xf6, 0x98, 0x41, 0x8d, 0x61, 0x60, 0x5e, 0x0d, 0x30, 0x35, 0x36, 0x63, 0x4a, 0xb5, 0x75, 0xfe, 0xf4, 0xec, 0x31, 0x83, 0x06, 0xc3, 0xc0, 0xbc, 0x1a, 0x60, 0x6a, 0x6c,
0xab, 0xb5, 0x14, 0x9e, 0x63, 0xea, 0x8d, 0xed, 0x27, 0xac, 0x43, 0x09, 0x57, 0xe0, 0x10, 0x85, 0xc6, 0x56, 0x1a, 0x21, 0x3c, 0xc7, 0xd4, 0x1b, 0xdb, 0x4f, 0x58, 0x97, 0x02, 0xae, 0xc0, 0x21,
0x4d, 0xc7, 0x03, 0x74, 0x85, 0xf2, 0x6c, 0x8d, 0x33, 0xe8, 0x1c, 0x49, 0x85, 0xa7, 0xc6, 0x1f, 0x0a, 0x9b, 0x8e, 0x07, 0xe8, 0x0a, 0xe5, 0xd9, 0x2a, 0x67, 0xd0, 0x3d, 0x92, 0x0a, 0x4f, 0x8d,
0x99, 0x42, 0x67, 0x6c, 0x9d, 0xaf, 0x03, 0x9c, 0xa0, 0x17, 0x55, 0x05, 0x36, 0x28, 0x6c, 0x4f, 0x3f, 0x32, 0x85, 0xce, 0xd8, 0x1a, 0x5f, 0x03, 0x38, 0x41, 0x2f, 0xaa, 0x0c, 0xac, 0x93, 0xdb,
0xa4, 0x63, 0xac, 0x00, 0xc6, 0x77, 0x80, 0xf7, 0x84, 0xd6, 0xc6, 0xf7, 0x2c, 0x0a, 0x8f, 0x47, 0x9e, 0x48, 0xc7, 0x58, 0x01, 0x8c, 0x6f, 0x03, 0xef, 0x09, 0xad, 0x8d, 0xef, 0x59, 0x14, 0x1e,
0x46, 0x65, 0x68, 0xd9, 0x4d, 0x4a, 0xe7, 0x63, 0xb8, 0x54, 0xc8, 0xf8, 0xc2, 0x3a, 0x41, 0x85, 0x8f, 0x8c, 0xca, 0xd0, 0xb2, 0x9b, 0x14, 0xce, 0x87, 0x70, 0xa9, 0x90, 0xf1, 0xb9, 0x76, 0x82,
0x73, 0xeb, 0xcd, 0x85, 0x75, 0x85, 0x93, 0xf5, 0x16, 0x25, 0xdf, 0x2d, 0xa4, 0xca, 0x42, 0x49, 0x0a, 0x6b, 0xed, 0x8d, 0xb9, 0x76, 0x85, 0x93, 0xf6, 0x26, 0x05, 0x7f, 0x50, 0x48, 0x95, 0x85,
0xca, 0xb6, 0x6c, 0x53, 0x8e, 0x55, 0xf2, 0xa7, 0x4f, 0xfa, 0xc3, 0x73, 0xb6, 0xc3, 0xb7, 0xe1, 0x94, 0x94, 0x65, 0xd9, 0xa2, 0x18, 0xab, 0xe0, 0x4f, 0x9f, 0xf4, 0x87, 0xe7, 0x6c, 0x9b, 0x6f,
0x66, 0x85, 0x9c, 0xa0, 0xb7, 0x32, 0x0d, 0xc5, 0xbb, 0x45, 0xa9, 0x3e, 0x2d, 0xfc, 0xd3, 0xcb, 0xc1, 0xcd, 0x0a, 0x39, 0x41, 0x6f, 0x65, 0x1a, 0x92, 0x77, 0x8b, 0x42, 0x7d, 0x5a, 0xf8, 0xa7,
0x13, 0xcc, 0x8d, 0x9d, 0xb2, 0x5d, 0x6a, 0x68, 0x60, 0x9a, 0xb5, 0x88, 0xbd, 0x41, 0x11, 0x0e, 0x97, 0x27, 0x98, 0x1b, 0x3b, 0x65, 0x3b, 0x54, 0xd0, 0xc0, 0x34, 0x2b, 0x11, 0x7b, 0x8d, 0x3c,
0xf3, 0x89, 0x9f, 0x2e, 0xca, 0xcb, 0x6e, 0x73, 0x0e, 0x6b, 0x49, 0x32, 0xc0, 0x6f, 0x14, 0xe8, 0x1c, 0xe6, 0x13, 0x3f, 0x9d, 0xa7, 0x97, 0xdd, 0xe6, 0x1c, 0x56, 0x93, 0x64, 0x80, 0xdf, 0x2c,
0xfc, 0x40, 0xa4, 0xc8, 0xfe, 0xde, 0xda, 0x7f, 0x1b, 0x20, 0xf8, 0xd2, 0x42, 0x42, 0xce, 0x61, 0xd0, 0xf9, 0x81, 0x48, 0x91, 0xfd, 0x63, 0x69, 0xef, 0x4d, 0x80, 0x60, 0x4b, 0x03, 0x09, 0x39,
0x7d, 0x21, 0x9d, 0x1a, 0x8d, 0x6c, 0x89, 0x77, 0x60, 0xe5, 0x99, 0x96, 0xce, 0x15, 0x98, 0xb1, 0x87, 0xb5, 0xb9, 0x74, 0x6a, 0x34, 0xb2, 0x05, 0xde, 0x85, 0xe5, 0x67, 0x5a, 0x3a, 0x57, 0x60,
0x88, 0xea, 0xd6, 0xd7, 0x67, 0xd6, 0x8c, 0xe8, 0x4a, 0xb3, 0x06, 0x69, 0x8f, 0xa4, 0x96, 0x6e, 0xc6, 0x22, 0xca, 0x5b, 0x5f, 0x9f, 0x59, 0x33, 0xa2, 0x2b, 0xcd, 0x5a, 0xb4, 0x7b, 0x24, 0xb5,
0x1c, 0x26, 0x06, 0x60, 0xb9, 0x2a, 0x60, 0x73, 0xdf, 0x41, 0x67, 0x88, 0x23, 0x1a, 0x8e, 0x92, 0x74, 0xe3, 0xd0, 0x31, 0x00, 0x8b, 0x55, 0x02, 0xdb, 0x7b, 0x0e, 0xba, 0x43, 0x1c, 0x51, 0x73,
0x7b, 0x0b, 0x58, 0x5d, 0x5e, 0xb0, 0xcf, 0xd3, 0x8e, 0x68, 0x78, 0x8f, 0xad, 0x79, 0x25, 0xf5, 0x94, 0xdc, 0x9b, 0xc0, 0x9a, 0xf2, 0x9c, 0xbd, 0x0e, 0x3b, 0xa2, 0xe6, 0x3d, 0xb6, 0xe6, 0x95,
0x88, 0x35, 0x88, 0x6c, 0x88, 0x42, 0x05, 0xe2, 0x55, 0x68, 0x1d, 0xa9, 0x22, 0x44, 0x69, 0x86, 0xd4, 0x23, 0xd6, 0x22, 0xb2, 0x21, 0x0a, 0x15, 0x88, 0x57, 0x60, 0xe9, 0x48, 0x15, 0xc1, 0x4b,
0x98, 0x24, 0x90, 0xd9, 0x0d, 0x52, 0x25, 0xd6, 0x4c, 0x26, 0x98, 0xb1, 0xe5, 0xfd, 0xef, 0xb5, 0x3b, 0xf8, 0x24, 0x81, 0xd4, 0x6e, 0xd0, 0x56, 0x62, 0xcd, 0x64, 0x82, 0x19, 0x5b, 0xdc, 0xfb,
0xc3, 0xfe, 0x08, 0x6b, 0x60, 0x0d, 0xda, 0xcf, 0x74, 0x86, 0x97, 0x52, 0x63, 0xc6, 0x96, 0x42, 0x7e, 0x27, 0xcc, 0x8f, 0x30, 0x06, 0x56, 0xa1, 0xf3, 0x4c, 0x67, 0x78, 0x29, 0x35, 0x66, 0x6c,
0x2b, 0x42, 0xcb, 0x6a, 0x35, 0xc9, 0xe8, 0xc4, 0xe4, 0x5d, 0xc3, 0x90, 0xea, 0xf9, 0x48, 0xb8, 0x21, 0x94, 0x22, 0x94, 0xac, 0x91, 0x93, 0x8c, 0x4e, 0x4c, 0xd6, 0x0d, 0x0c, 0x29, 0x9f, 0x8f,
0x1a, 0x74, 0x49, 0xfd, 0x4d, 0xd0, 0xa5, 0x56, 0x5e, 0xd4, 0xdd, 0x47, 0x54, 0xe7, 0xe1, 0xd8, 0x84, 0x6b, 0x40, 0x97, 0x54, 0xdf, 0x04, 0x5d, 0x6a, 0xe5, 0x45, 0xd3, 0x7c, 0x44, 0x79, 0x1e,
0xbc, 0x5a, 0x60, 0x8e, 0x8d, 0x29, 0xd2, 0x31, 0xfa, 0xe1, 0xd4, 0x79, 0xcc, 0x7b, 0x46, 0x5f, 0x8e, 0xcd, 0xab, 0x39, 0xe6, 0xd8, 0x98, 0x3c, 0x1d, 0xa3, 0x1f, 0x4e, 0x9d, 0xc7, 0xbc, 0x67,
0xca, 0x91, 0x63, 0x92, 0x22, 0x3d, 0x31, 0x22, 0xab, 0xb9, 0x7f, 0x9d, 0x3a, 0x3c, 0x40, 0x85, 0xf4, 0xa5, 0x1c, 0x39, 0x26, 0xc9, 0xd3, 0x13, 0x23, 0xb2, 0x86, 0xf9, 0x37, 0xa8, 0xc2, 0x03,
0xc2, 0xd5, 0x59, 0x5f, 0x86, 0x61, 0x0c, 0xa9, 0x1e, 0x28, 0x29, 0x1c, 0x53, 0x74, 0x14, 0xca, 0x54, 0x28, 0x5c, 0x93, 0xf5, 0x65, 0x68, 0xc6, 0x10, 0xea, 0xbe, 0x92, 0xc2, 0x31, 0x45, 0x47,
0xb2, 0x14, 0x73, 0x6a, 0xc2, 0x81, 0xf2, 0x68, 0x4b, 0x59, 0xf3, 0x2d, 0xd8, 0x28, 0xed, 0xcf, 0xa1, 0x28, 0x4b, 0x31, 0xa7, 0x22, 0xec, 0x2b, 0x8f, 0xb6, 0x94, 0x35, 0xdf, 0x84, 0xf5, 0x52,
0x84, 0xf5, 0x32, 0x90, 0xfc, 0x26, 0x0a, 0xed, 0xb6, 0x66, 0xb2, 0xc0, 0x7e, 0x4b, 0x77, 0xbf, 0xff, 0x4c, 0x58, 0x2f, 0x03, 0xc9, 0x6f, 0xa3, 0x50, 0x6e, 0x6b, 0x26, 0x73, 0xec, 0x77, 0x74,
0xf3, 0x48, 0xb8, 0x05, 0xf4, 0xbb, 0x88, 0xef, 0xc0, 0xcd, 0xd9, 0xd1, 0x16, 0xf8, 0xef, 0x23, 0xf7, 0xbb, 0x8f, 0x84, 0x9b, 0x43, 0xbf, 0x8f, 0xf8, 0x36, 0xdc, 0x9c, 0x1d, 0x6d, 0x8e, 0xff,
0xbe, 0x09, 0xeb, 0x74, 0xb4, 0x39, 0xe6, 0xd8, 0x1f, 0x02, 0x48, 0x87, 0xa8, 0x81, 0x7f, 0x0c, 0x21, 0xe2, 0x1b, 0xb0, 0x46, 0x47, 0xab, 0x31, 0xc7, 0xfe, 0x18, 0x40, 0x3a, 0x44, 0x03, 0xfc,
0x0c, 0xd5, 0x29, 0x6a, 0xf8, 0x9f, 0x42, 0x30, 0x62, 0xa8, 0xba, 0xee, 0xd8, 0xbb, 0x11, 0x65, 0x53, 0x60, 0xa8, 0x4e, 0xd1, 0xc0, 0xff, 0x1c, 0x9c, 0x11, 0x43, 0x55, 0x75, 0xc7, 0xde, 0x8e,
0x3a, 0x0b, 0x56, 0xc1, 0xec, 0xbd, 0x60, 0x48, 0xac, 0x73, 0xc3, 0xf7, 0x83, 0x61, 0xc5, 0x39, 0x28, 0xd2, 0x99, 0xb3, 0x0a, 0x66, 0xef, 0x04, 0x45, 0x62, 0xad, 0x15, 0xdf, 0x0d, 0x8a, 0x15,
0x47, 0x3f, 0x08, 0xe8, 0x23, 0xa1, 0x33, 0x73, 0x79, 0x39, 0x47, 0x3f, 0x8c, 0xf8, 0x2e, 0x6c, 0x67, 0x8d, 0xbe, 0x17, 0xd0, 0x47, 0x42, 0x67, 0xe6, 0xf2, 0xb2, 0x46, 0xdf, 0x8f, 0xf8, 0x0e,
0x92, 0x7b, 0x57, 0x28, 0xa1, 0xd3, 0x85, 0xfd, 0x47, 0x11, 0x67, 0xb3, 0x42, 0x86, 0xa9, 0x66, 0x6c, 0x90, 0xf9, 0x81, 0x50, 0x42, 0xa7, 0x73, 0xfd, 0x0f, 0x22, 0xce, 0x66, 0x89, 0x0c, 0x5d,
0xdf, 0x6f, 0x84, 0xa2, 0x54, 0x09, 0x94, 0xd8, 0x0f, 0x1a, 0x7c, 0xbd, 0xac, 0x6e, 0x29, 0xff, 0xcd, 0x7e, 0xd0, 0x0a, 0x49, 0xa9, 0x02, 0x28, 0xb1, 0x1f, 0xb6, 0xf8, 0x5a, 0x99, 0xdd, 0x52,
0xb0, 0xc1, 0x57, 0x61, 0xb9, 0xaf, 0x1d, 0x5a, 0xcf, 0xbe, 0x43, 0x93, 0xb7, 0x5c, 0xde, 0x5d, 0xfe, 0x51, 0x8b, 0xaf, 0xc0, 0x62, 0x5f, 0x3b, 0xb4, 0x9e, 0x7d, 0x97, 0x3a, 0x6f, 0xb1, 0xbc,
0xf6, 0x5d, 0x9a, 0xef, 0x1b, 0x61, 0xf2, 0xd8, 0x3b, 0x41, 0x51, 0x6e, 0x19, 0xf6, 0x8f, 0x38, 0xbb, 0xec, 0x7b, 0xd4, 0xdf, 0x37, 0x42, 0xe7, 0xb1, 0xb7, 0xc2, 0x46, 0x39, 0x65, 0xd8, 0x3f,
0x1c, 0xb5, 0xbe, 0x72, 0xfe, 0x19, 0x53, 0xa4, 0x63, 0xf4, 0x8b, 0xeb, 0xc4, 0xfe, 0x15, 0xf3, 0xe3, 0x70, 0xd4, 0xe6, 0xc8, 0xf9, 0x57, 0x4c, 0x9e, 0x8e, 0xd1, 0xcf, 0xaf, 0x13, 0xfb, 0x77,
0xdb, 0xb0, 0x3d, 0xc3, 0xc2, 0x02, 0x98, 0x5f, 0xa4, 0x7f, 0xc7, 0xfc, 0x0e, 0xdc, 0x3a, 0x46, 0xcc, 0x6f, 0xc3, 0xd6, 0x0c, 0x0b, 0x03, 0xa0, 0xbe, 0x48, 0xff, 0x89, 0xf9, 0x1d, 0xb8, 0x75,
0xbf, 0x98, 0x03, 0x72, 0x92, 0xce, 0xcb, 0xd4, 0xb1, 0xff, 0xc4, 0xfc, 0x53, 0xb0, 0x73, 0x8c, 0x8c, 0x7e, 0xde, 0x07, 0x64, 0x24, 0x9d, 0x97, 0xa9, 0x63, 0xff, 0x8d, 0xf9, 0xa7, 0x60, 0xfb,
0x7e, 0x5e, 0xdf, 0x9a, 0xf2, 0xbf, 0x31, 0x5f, 0x83, 0x95, 0x01, 0x6d, 0x08, 0xbc, 0x42, 0xf6, 0x18, 0x7d, 0x9d, 0xdf, 0xc6, 0xe6, 0xff, 0x62, 0xbe, 0x0a, 0xcb, 0x03, 0x9a, 0x10, 0x78, 0x85,
0x6e, 0x4c, 0x4d, 0x9a, 0x89, 0x55, 0x3a, 0xef, 0xc5, 0x54, 0xba, 0xaf, 0x08, 0x9f, 0x8e, 0x93, 0xec, 0xed, 0x98, 0x8a, 0x34, 0x13, 0xab, 0x70, 0xde, 0x89, 0x29, 0x75, 0x5f, 0x11, 0x3e, 0x1d,
0xbc, 0x37, 0x16, 0x5a, 0xa3, 0x72, 0xec, 0xfd, 0x98, 0x6f, 0x03, 0x1b, 0x60, 0x6e, 0xae, 0xb0, 0x27, 0x79, 0x6f, 0x2c, 0xb4, 0x46, 0xe5, 0xd8, 0xbb, 0x31, 0xdf, 0x02, 0x36, 0xc0, 0xdc, 0x5c,
0x06, 0x7f, 0x40, 0x9b, 0x9f, 0x07, 0xe3, 0x2f, 0x17, 0x68, 0xa7, 0x73, 0xc5, 0x87, 0x31, 0x95, 0x61, 0x03, 0x7e, 0x8f, 0x26, 0x3f, 0x0f, 0xca, 0x5f, 0x2e, 0xd0, 0x4e, 0xeb, 0x8d, 0xf7, 0x63,
0xba, 0xb4, 0xff, 0xb8, 0xe6, 0xa3, 0x98, 0x7f, 0x1a, 0x76, 0xcb, 0xdb, 0x3a, 0xab, 0x3f, 0x29, 0x4a, 0x75, 0xa9, 0xff, 0xe1, 0x9d, 0x0f, 0x62, 0xfe, 0x69, 0xd8, 0x29, 0x6f, 0xeb, 0x2c, 0xff,
0x47, 0xd8, 0xd7, 0x97, 0x86, 0x7d, 0xab, 0x39, 0x67, 0x4c, 0x50, 0x79, 0x31, 0xf7, 0xfb, 0x76, 0xb4, 0x39, 0xc2, 0xbe, 0xbe, 0x34, 0xec, 0xdb, 0xed, 0x9a, 0x31, 0x41, 0xe5, 0x45, 0x6d, 0xf7,
0x93, 0x5a, 0x54, 0x79, 0x04, 0xd3, 0x3f, 0x37, 0xf9, 0x06, 0x40, 0x79, 0x77, 0x02, 0xf0, 0x97, 0x9d, 0x36, 0x95, 0xa8, 0xb2, 0x08, 0xaa, 0x7f, 0x69, 0xf3, 0x75, 0x80, 0xf2, 0xee, 0x04, 0xe0,
0x26, 0xa5, 0x7e, 0x8c, 0x9e, 0x56, 0xff, 0x15, 0xda, 0x69, 0x40, 0xff, 0x3a, 0x43, 0xeb, 0x2b, 0xaf, 0x6d, 0x0a, 0xfd, 0x18, 0x3d, 0x8d, 0xfe, 0x2b, 0xb4, 0xd3, 0x80, 0xfe, 0x6d, 0x86, 0x36,
0x85, 0xfd, 0xad, 0x49, 0xa5, 0x38, 0x97, 0x39, 0x9e, 0xcb, 0xf4, 0x25, 0xfb, 0x51, 0x9b, 0x4a, 0x47, 0x0a, 0xfb, 0x7b, 0x9b, 0x52, 0x71, 0x2e, 0x73, 0x3c, 0x97, 0xe9, 0x4b, 0xf6, 0xe3, 0x0e,
0x11, 0x32, 0x3d, 0x35, 0x19, 0x92, 0x8d, 0x63, 0x3f, 0x6e, 0x53, 0xbf, 0x69, 0x5e, 0xca, 0x7e, 0xa5, 0x22, 0x44, 0x7a, 0x6a, 0x32, 0x24, 0x1d, 0xc7, 0x7e, 0xd2, 0xa1, 0x7a, 0x53, 0xbf, 0x94,
0xff, 0x24, 0xc8, 0xd5, 0x56, 0xec, 0x27, 0xec, 0xa7, 0xf4, 0x0b, 0x82, 0x4a, 0x3e, 0x1f, 0x3e, 0xf5, 0xfe, 0x69, 0x90, 0xab, 0xa9, 0xd8, 0x4f, 0xd8, 0xcf, 0xe8, 0x09, 0x82, 0x4a, 0x3e, 0x1f,
0x65, 0x3f, 0x6b, 0x53, 0xa8, 0x03, 0xa5, 0x4c, 0x2a, 0xfc, 0x7c, 0x6a, 0x7f, 0xde, 0xa6, 0xb1, 0x3e, 0x65, 0x3f, 0xef, 0x90, 0xab, 0x7d, 0xa5, 0x4c, 0x2a, 0x7c, 0xdd, 0xb5, 0xbf, 0xe8, 0x50,
0xaf, 0x45, 0xaf, 0xba, 0xf1, 0x8b, 0x36, 0xd5, 0xb4, 0xc2, 0xc3, 0xac, 0x24, 0xb4, 0xe8, 0x7e, 0xdb, 0x37, 0xbc, 0x57, 0xd5, 0xf8, 0x65, 0x87, 0x72, 0x5a, 0xe1, 0xa1, 0x57, 0x12, 0x1a, 0x74,
0x19, 0x58, 0xe9, 0x65, 0x45, 0x99, 0x9c, 0x7b, 0xf6, 0xab, 0xf6, 0xfe, 0x1e, 0xb4, 0x12, 0xa7, 0xbf, 0x0a, 0xac, 0xf4, 0xb3, 0xa2, 0x48, 0xce, 0x3d, 0xfb, 0x75, 0x67, 0x6f, 0x17, 0x96, 0x12,
0xc2, 0xaa, 0x6a, 0x41, 0x9c, 0x38, 0xc5, 0x96, 0xe8, 0x66, 0x77, 0x8d, 0x51, 0x87, 0xd7, 0x13, 0xa7, 0xc2, 0xa8, 0x5a, 0x82, 0x38, 0x71, 0x8a, 0x2d, 0xd0, 0xcd, 0x3e, 0x30, 0x46, 0x1d, 0x5e,
0xfb, 0xfc, 0x73, 0x2c, 0xda, 0xef, 0xc2, 0x46, 0xcf, 0xe4, 0x13, 0x31, 0x9f, 0x88, 0xb0, 0x9d, 0x4f, 0xec, 0xf3, 0xcf, 0xb1, 0x68, 0xef, 0x00, 0xd6, 0x7b, 0x26, 0x9f, 0x88, 0xba, 0x23, 0xc2,
0xca, 0xb5, 0x86, 0x59, 0x79, 0xea, 0x25, 0x5a, 0x0f, 0x87, 0xd7, 0x98, 0x16, 0x9e, 0x36, 0x62, 0x74, 0x2a, 0xc7, 0x1a, 0x66, 0xe5, 0xa9, 0x17, 0x68, 0x3c, 0x1c, 0x5e, 0x63, 0x5a, 0x78, 0x9a,
0x44, 0x22, 0x39, 0xd1, 0xd0, 0x66, 0xac, 0xb1, 0xff, 0x36, 0xb0, 0x9e, 0xd1, 0x4e, 0x3a, 0x8f, 0x88, 0x11, 0x89, 0x64, 0x44, 0x4d, 0x9b, 0xb1, 0xd6, 0xde, 0x9b, 0xc0, 0x7a, 0x46, 0x3b, 0xe9,
0x3a, 0x9d, 0x3e, 0xc1, 0x2b, 0x54, 0x61, 0xb7, 0x7a, 0x6b, 0xf4, 0x88, 0x2d, 0x85, 0x17, 0x03, 0x3c, 0xea, 0x74, 0xfa, 0x04, 0xaf, 0x50, 0x85, 0xd9, 0xea, 0xad, 0xd1, 0x23, 0xb6, 0x10, 0x7e,
0x86, 0x3f, 0x7f, 0xb9, 0x81, 0xbb, 0xf4, 0x8b, 0x0c, 0xcf, 0x82, 0x75, 0x80, 0xc3, 0x2b, 0xd4, 0x0c, 0x18, 0x5e, 0xfe, 0x72, 0x02, 0x1f, 0xd0, 0x13, 0x19, 0xbe, 0x05, 0x6b, 0x00, 0x87, 0x57,
0xbe, 0x10, 0x4a, 0x4d, 0x59, 0x4c, 0x72, 0xaf, 0x70, 0xde, 0xe4, 0xf2, 0x9b, 0xb4, 0x88, 0xbb, 0xa8, 0x7d, 0x21, 0x94, 0x9a, 0xb2, 0x98, 0xe4, 0x5e, 0xe1, 0xbc, 0xc9, 0xe5, 0xb7, 0xc2, 0x88,
0x5f, 0xf8, 0xea, 0xc3, 0x91, 0xf4, 0xe3, 0xe2, 0x82, 0x9e, 0x2d, 0x0f, 0xca, 0x77, 0xcc, 0x9b, 0xff, 0x1a, 0xac, 0xf4, 0x73, 0xfa, 0xb7, 0xd5, 0x91, 0x95, 0xe2, 0x19, 0xea, 0x4c, 0x06, 0x6e,
0xd2, 0x54, 0x5f, 0x0f, 0xa4, 0xf6, 0x68, 0xb5, 0x50, 0x0f, 0xc2, 0xd3, 0xe6, 0x41, 0xf9, 0xb4, 0x7a, 0xa6, 0x03, 0xd4, 0x8c, 0xaf, 0x06, 0x1b, 0x51, 0x86, 0xe7, 0x2f, 0x80, 0xd5, 0x03, 0x12,
0x99, 0x5c, 0x5c, 0x2c, 0x07, 0xf9, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x51, 0x37, 0xf3, 0x1f, 0x7c, 0xe1, 0xab, 0x0f, 0x47, 0xd2, 0x8f, 0x8b, 0x0b, 0xfa, 0x14, 0x3d, 0x28, 0x7f, 0x49,
0x7a, 0x2b, 0x0b, 0x00, 0x00, 0xaf, 0x4b, 0x53, 0xad, 0x1e, 0x48, 0xed, 0xd1, 0x6a, 0xa1, 0x1e, 0x84, 0x8f, 0xd3, 0x83, 0xf2,
0xe3, 0x34, 0xb9, 0xb8, 0x58, 0x0c, 0xf2, 0xc3, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x88, 0x33,
0x41, 0xc8, 0x89, 0x0b, 0x00, 0x00,
} }

View File

@ -41,6 +41,11 @@ service DataCoord {
rpc WatchChannels(WatchChannelsRequest) returns (WatchChannelsResponse) {} rpc WatchChannels(WatchChannelsRequest) returns (WatchChannelsResponse) {}
rpc GetFlushState(milvus.GetFlushStateRequest) returns (milvus.GetFlushStateResponse) {} rpc GetFlushState(milvus.GetFlushStateRequest) returns (milvus.GetFlushStateResponse) {}
rpc DropVirtualChannel(DropVirtualChannelRequest) returns (DropVirtualChannelResponse) {} rpc DropVirtualChannel(DropVirtualChannelRequest) returns (DropVirtualChannelResponse) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
rpc Import(milvus.ImportRequest) returns (milvus.ImportResponse) {}
rpc GetImportState(milvus.GetImportStateRequest) returns (milvus.GetImportStateResponse) {}
rpc CompleteImport(ImportResult) returns (common.Status) {}
} }
service DataNode { service DataNode {
@ -53,6 +58,9 @@ service DataNode {
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {} rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {}
rpc Compaction(CompactionPlan) returns (common.Status) {} rpc Compaction(CompactionPlan) returns (common.Status) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
rpc Import(milvus.ImportRequest) returns(common.Status) {}
} }
message FlushRequest { message FlushRequest {
@ -411,3 +419,9 @@ message DropVirtualChannelSegment {
message DropVirtualChannelResponse { message DropVirtualChannelResponse {
common.Status status = 1; common.Status status = 1;
} }
message ImportResult {
common.Status status = 1;
repeated int64 segments = 2; // id array of new sealed segments
int64 row_count = 3; // how many rows are imported by this task
}

View File

@ -3113,6 +3113,61 @@ func (m *DropVirtualChannelResponse) GetStatus() *commonpb.Status {
return nil return nil
} }
type ImportResult 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"`
RowCount int64 `protobuf:"varint,3,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ImportResult) Reset() { *m = ImportResult{} }
func (m *ImportResult) String() string { return proto.CompactTextString(m) }
func (*ImportResult) ProtoMessage() {}
func (*ImportResult) Descriptor() ([]byte, []int) {
return fileDescriptor_82cd95f524594f49, []int{50}
}
func (m *ImportResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResult.Unmarshal(m, b)
}
func (m *ImportResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ImportResult.Marshal(b, m, deterministic)
}
func (m *ImportResult) XXX_Merge(src proto.Message) {
xxx_messageInfo_ImportResult.Merge(m, src)
}
func (m *ImportResult) XXX_Size() int {
return xxx_messageInfo_ImportResult.Size(m)
}
func (m *ImportResult) XXX_DiscardUnknown() {
xxx_messageInfo_ImportResult.DiscardUnknown(m)
}
var xxx_messageInfo_ImportResult proto.InternalMessageInfo
func (m *ImportResult) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *ImportResult) GetSegments() []int64 {
if m != nil {
return m.Segments
}
return nil
}
func (m *ImportResult) GetRowCount() int64 {
if m != nil {
return m.RowCount
}
return 0
}
func init() { func init() {
proto.RegisterEnum("milvus.proto.data.ChannelWatchState", ChannelWatchState_name, ChannelWatchState_value) proto.RegisterEnum("milvus.proto.data.ChannelWatchState", ChannelWatchState_name, ChannelWatchState_value)
proto.RegisterEnum("milvus.proto.data.CompactionType", CompactionType_name, CompactionType_value) proto.RegisterEnum("milvus.proto.data.CompactionType", CompactionType_name, CompactionType_value)
@ -3166,194 +3221,201 @@ func init() {
proto.RegisterType((*DropVirtualChannelRequest)(nil), "milvus.proto.data.DropVirtualChannelRequest") proto.RegisterType((*DropVirtualChannelRequest)(nil), "milvus.proto.data.DropVirtualChannelRequest")
proto.RegisterType((*DropVirtualChannelSegment)(nil), "milvus.proto.data.DropVirtualChannelSegment") proto.RegisterType((*DropVirtualChannelSegment)(nil), "milvus.proto.data.DropVirtualChannelSegment")
proto.RegisterType((*DropVirtualChannelResponse)(nil), "milvus.proto.data.DropVirtualChannelResponse") proto.RegisterType((*DropVirtualChannelResponse)(nil), "milvus.proto.data.DropVirtualChannelResponse")
proto.RegisterType((*ImportResult)(nil), "milvus.proto.data.ImportResult")
} }
func init() { proto.RegisterFile("data_coord.proto", fileDescriptor_82cd95f524594f49) } func init() { proto.RegisterFile("data_coord.proto", fileDescriptor_82cd95f524594f49) }
var fileDescriptor_82cd95f524594f49 = []byte{ var fileDescriptor_82cd95f524594f49 = []byte{
// 2907 bytes of a gzipped FileDescriptorProto // 2998 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3b, 0xcb, 0x6f, 0x1b, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3b, 0xdb, 0x6f, 0xdb, 0xd6,
0xf9, 0x5e, 0x3e, 0x24, 0xf2, 0xe3, 0x43, 0xd4, 0xc8, 0x51, 0x68, 0xda, 0x96, 0xe5, 0x4d, 0x6c, 0xf9, 0xa1, 0x28, 0xc9, 0xd2, 0xa7, 0x8b, 0x95, 0x93, 0xd4, 0x55, 0x94, 0xd4, 0x71, 0xd8, 0x36,
0xcb, 0x8e, 0x23, 0xd9, 0xf2, 0x2f, 0xf8, 0x05, 0x75, 0xd2, 0x20, 0xb2, 0x2c, 0x99, 0xa8, 0xe4, 0x75, 0xd3, 0x34, 0x69, 0x9d, 0x5f, 0xf1, 0x2b, 0xd6, 0x76, 0x45, 0x1d, 0xd7, 0xae, 0x50, 0x3b,
0x2a, 0x4b, 0xc5, 0x2e, 0x9a, 0xa2, 0xc4, 0x8a, 0x3b, 0xa2, 0xb6, 0xde, 0x07, 0xbd, 0xbb, 0x94, 0x73, 0x29, 0xb7, 0x1d, 0xd6, 0x61, 0x02, 0x2d, 0x1e, 0xcb, 0x5c, 0x78, 0x51, 0x49, 0x2a, 0xb1,
0xa5, 0x5c, 0x62, 0x34, 0x40, 0x81, 0x16, 0x41, 0x9a, 0xa2, 0xa7, 0x02, 0x3d, 0x14, 0x3d, 0xb5, 0x8b, 0x01, 0x0d, 0x56, 0x60, 0xc0, 0x86, 0xa2, 0xdb, 0xb0, 0xa7, 0x01, 0x7b, 0x18, 0xb6, 0x3d,
0xe8, 0xa5, 0x3d, 0xb6, 0x45, 0xef, 0x41, 0x7b, 0xef, 0xbf, 0xd0, 0x5b, 0xff, 0x86, 0x62, 0x1e, 0x6c, 0xd8, 0xcb, 0xf6, 0xb8, 0x0d, 0x7b, 0x2f, 0xb6, 0x3f, 0x64, 0x6f, 0xfb, 0x1b, 0x86, 0x73,
0x3b, 0xfb, 0xe0, 0x92, 0x5c, 0x4a, 0x7e, 0xdc, 0x34, 0xb3, 0xdf, 0x6b, 0xbe, 0xf7, 0x37, 0x1c, 0xe1, 0xe1, 0x45, 0xa4, 0x44, 0xd9, 0x4e, 0xf3, 0xe6, 0x73, 0xf8, 0xdd, 0xce, 0x77, 0xbe, 0xbb,
0x41, 0x4d, 0x53, 0x3d, 0xb5, 0xdd, 0xb1, 0x6d, 0x47, 0x5b, 0xee, 0x39, 0xb6, 0x67, 0xa3, 0x59, 0x8e, 0xa1, 0xa5, 0x6b, 0xbe, 0xd6, 0x1f, 0x38, 0x8e, 0xab, 0xdf, 0x1a, 0xb9, 0x8e, 0xef, 0xa0,
0x53, 0x37, 0x0e, 0xfb, 0x2e, 0x5b, 0x2d, 0x93, 0xcf, 0x8d, 0x72, 0xc7, 0x36, 0x4d, 0xdb, 0x62, 0xf3, 0x96, 0x61, 0x3e, 0x18, 0x7b, 0x6c, 0x75, 0x8b, 0x7c, 0xee, 0xd4, 0x07, 0x8e, 0x65, 0x39,
0x5b, 0x8d, 0xaa, 0x6e, 0x79, 0xd8, 0xb1, 0x54, 0x83, 0xaf, 0xcb, 0x61, 0x84, 0x46, 0xd9, 0xed, 0x36, 0xdb, 0xea, 0x34, 0x0d, 0xdb, 0xc7, 0xae, 0xad, 0x99, 0x7c, 0x5d, 0x8f, 0x22, 0x74, 0xea,
0x1c, 0x60, 0x53, 0x65, 0x2b, 0xf9, 0x08, 0xca, 0x1b, 0x46, 0xdf, 0x3d, 0x50, 0xf0, 0xd3, 0x3e, 0xde, 0xe0, 0x10, 0x5b, 0x1a, 0x5b, 0x29, 0x47, 0x50, 0xdf, 0x34, 0xc7, 0xde, 0xa1, 0x8a, 0x3f,
0x76, 0x3d, 0x74, 0x0b, 0x72, 0x7b, 0xaa, 0x8b, 0xeb, 0xd2, 0xa2, 0xb4, 0x54, 0x5a, 0xbd, 0xb0, 0x1d, 0x63, 0xcf, 0x47, 0xaf, 0x40, 0x71, 0x5f, 0xf3, 0x70, 0x5b, 0x5a, 0x91, 0x56, 0x6b, 0x6b,
0x1c, 0xe1, 0xc5, 0xb9, 0x6c, 0xbb, 0xdd, 0x35, 0xd5, 0xc5, 0x0a, 0x85, 0x44, 0x08, 0x72, 0xda, 0x57, 0x6e, 0xc5, 0x78, 0x71, 0x2e, 0x3b, 0xde, 0x70, 0x5d, 0xf3, 0xb0, 0x4a, 0x21, 0x11, 0x82,
0x5e, 0x73, 0xbd, 0x9e, 0x59, 0x94, 0x96, 0xb2, 0x0a, 0xfd, 0x1b, 0xc9, 0x50, 0xee, 0xd8, 0x86, 0xa2, 0xbe, 0xdf, 0xdd, 0x68, 0x17, 0x56, 0xa4, 0x55, 0x59, 0xa5, 0x7f, 0x23, 0x05, 0xea, 0x03,
0x81, 0x3b, 0x9e, 0x6e, 0x5b, 0xcd, 0xf5, 0x7a, 0x8e, 0x7e, 0x8b, 0xec, 0xc9, 0xbf, 0x95, 0xa0, 0xc7, 0x34, 0xf1, 0xc0, 0x37, 0x1c, 0xbb, 0xbb, 0xd1, 0x2e, 0xd2, 0x6f, 0xb1, 0x3d, 0xe5, 0x37,
0xc2, 0x59, 0xbb, 0x3d, 0xdb, 0x72, 0x31, 0xba, 0x03, 0x53, 0xae, 0xa7, 0x7a, 0x7d, 0x97, 0x73, 0x12, 0x34, 0x38, 0x6b, 0x6f, 0xe4, 0xd8, 0x1e, 0x46, 0x77, 0xa0, 0xec, 0xf9, 0x9a, 0x3f, 0xf6,
0x3f, 0x9f, 0xc8, 0xbd, 0x45, 0x41, 0x14, 0x0e, 0x9a, 0x8a, 0x7d, 0x76, 0x90, 0x3d, 0x5a, 0x00, 0x38, 0xf7, 0xcb, 0xa9, 0xdc, 0x7b, 0x14, 0x44, 0xe5, 0xa0, 0xb9, 0xd8, 0xcb, 0x93, 0xec, 0xd1,
0x70, 0x71, 0xd7, 0xc4, 0x96, 0xd7, 0x5c, 0x77, 0xeb, 0xb9, 0xc5, 0xec, 0x52, 0x56, 0x09, 0xed, 0x32, 0x80, 0x87, 0x87, 0x16, 0xb6, 0xfd, 0xee, 0x86, 0xd7, 0x2e, 0xae, 0xc8, 0xab, 0xb2, 0x1a,
0xc8, 0xbf, 0x92, 0xa0, 0xd6, 0xf2, 0x97, 0xbe, 0x76, 0xce, 0x42, 0xbe, 0x63, 0xf7, 0x2d, 0x8f, 0xd9, 0x51, 0x7e, 0x29, 0x41, 0xab, 0x17, 0x2c, 0x03, 0xed, 0x5c, 0x84, 0xd2, 0xc0, 0x19, 0xdb,
0x0a, 0x58, 0x51, 0xd8, 0x02, 0x5d, 0x86, 0x72, 0xe7, 0x40, 0xb5, 0x2c, 0x6c, 0xb4, 0x2d, 0xd5, 0x3e, 0x15, 0xb0, 0xa1, 0xb2, 0x05, 0xba, 0x06, 0xf5, 0xc1, 0xa1, 0x66, 0xdb, 0xd8, 0xec, 0xdb,
0xc4, 0x54, 0x94, 0xa2, 0x52, 0xe2, 0x7b, 0x0f, 0x55, 0x13, 0xa7, 0x92, 0x68, 0x11, 0x4a, 0x3d, 0x9a, 0x85, 0xa9, 0x28, 0x55, 0xb5, 0xc6, 0xf7, 0xee, 0x69, 0x16, 0xce, 0x25, 0xd1, 0x0a, 0xd4,
0xd5, 0xf1, 0xf4, 0x88, 0xce, 0xc2, 0x5b, 0xf2, 0xef, 0x24, 0x98, 0xff, 0xd8, 0x75, 0xf5, 0xae, 0x46, 0x9a, 0xeb, 0x1b, 0x31, 0x9d, 0x45, 0xb7, 0x94, 0xdf, 0x4a, 0xb0, 0xf4, 0x8e, 0xe7, 0x19,
0x35, 0x20, 0xd9, 0x3c, 0x4c, 0x59, 0xb6, 0x86, 0x9b, 0xeb, 0x54, 0xb4, 0xac, 0xc2, 0x57, 0xe8, 0x43, 0x7b, 0x42, 0xb2, 0x25, 0x28, 0xdb, 0x8e, 0x8e, 0xbb, 0x1b, 0x54, 0x34, 0x59, 0xe5, 0x2b,
0x3c, 0x14, 0x7b, 0x18, 0x3b, 0x6d, 0xc7, 0x36, 0x7c, 0xc1, 0x0a, 0x64, 0x43, 0xb1, 0x0d, 0x8c, 0x74, 0x19, 0xaa, 0x23, 0x8c, 0xdd, 0xbe, 0xeb, 0x98, 0x81, 0x60, 0x15, 0xb2, 0xa1, 0x3a, 0x26,
0x3e, 0x81, 0x59, 0x37, 0x46, 0xc8, 0xad, 0x67, 0x17, 0xb3, 0x4b, 0xa5, 0xd5, 0xb7, 0x96, 0x07, 0x46, 0x1f, 0xc0, 0x79, 0x2f, 0x41, 0xc8, 0x6b, 0xcb, 0x2b, 0xf2, 0x6a, 0x6d, 0xed, 0xd9, 0x5b,
0xbc, 0x6c, 0x39, 0xce, 0x54, 0x19, 0xc4, 0x96, 0x9f, 0x67, 0x60, 0x4e, 0xc0, 0x31, 0x59, 0xc9, 0x13, 0x56, 0x76, 0x2b, 0xc9, 0x54, 0x9d, 0xc4, 0x56, 0x1e, 0x15, 0xe0, 0x82, 0x80, 0x63, 0xb2,
0xdf, 0x44, 0x73, 0x2e, 0xee, 0x0a, 0xf1, 0xd8, 0x22, 0x8d, 0xe6, 0x84, 0xca, 0xb3, 0x61, 0x95, 0x92, 0xbf, 0x89, 0xe6, 0x3c, 0x3c, 0x14, 0xe2, 0xb1, 0x45, 0x1e, 0xcd, 0x09, 0x95, 0xcb, 0x51,
0xa7, 0x70, 0xb0, 0xb8, 0x3e, 0xf3, 0x03, 0xfa, 0x44, 0x97, 0xa0, 0x84, 0x8f, 0x7a, 0xba, 0x83, 0x95, 0xe7, 0x30, 0xb0, 0xa4, 0x3e, 0x4b, 0x13, 0xfa, 0x44, 0x57, 0xa1, 0x86, 0x8f, 0x46, 0x86,
0xdb, 0x9e, 0x6e, 0xe2, 0xfa, 0xd4, 0xa2, 0xb4, 0x94, 0x53, 0x80, 0x6d, 0xed, 0xea, 0x66, 0xd8, 0x8b, 0xfb, 0xbe, 0x61, 0xe1, 0x76, 0x79, 0x45, 0x5a, 0x2d, 0xaa, 0xc0, 0xb6, 0xf6, 0x0c, 0x2b,
0x23, 0xa7, 0x53, 0x7b, 0xa4, 0xfc, 0x7b, 0x09, 0xde, 0x1c, 0xb0, 0x12, 0x77, 0x71, 0x05, 0x6a, 0x6a, 0x91, 0x0b, 0xb9, 0x2d, 0x52, 0xf9, 0x9d, 0x04, 0x4f, 0x4f, 0xdc, 0x12, 0x37, 0x71, 0x15,
0xf4, 0xe4, 0x81, 0x66, 0x88, 0xb3, 0x13, 0x85, 0x5f, 0x1d, 0xa5, 0xf0, 0x00, 0x5c, 0x19, 0xc0, 0x5a, 0xf4, 0xe4, 0xa1, 0x66, 0x88, 0xb1, 0x13, 0x85, 0x5f, 0x9f, 0xa6, 0xf0, 0x10, 0x5c, 0x9d,
0x0f, 0x09, 0x99, 0x49, 0x2f, 0xe4, 0x13, 0x78, 0x73, 0x13, 0x7b, 0x9c, 0x01, 0xf9, 0x86, 0xdd, 0xc0, 0x8f, 0x08, 0x59, 0xc8, 0x2f, 0xe4, 0x7d, 0x78, 0x7a, 0x0b, 0xfb, 0x9c, 0x01, 0xf9, 0x86,
0x93, 0xa7, 0x80, 0x68, 0x2c, 0x65, 0x06, 0x62, 0xe9, 0xcf, 0x19, 0x11, 0x4b, 0x94, 0x55, 0xd3, 0xbd, 0x93, 0x87, 0x80, 0xb8, 0x2f, 0x15, 0x26, 0x7c, 0xe9, 0x2f, 0x05, 0xe1, 0x4b, 0x94, 0x55,
0xda, 0xb7, 0xd1, 0x05, 0x28, 0x0a, 0x10, 0xee, 0x15, 0xc1, 0x06, 0xfa, 0x7f, 0xc8, 0x13, 0x49, 0xd7, 0x3e, 0x70, 0xd0, 0x15, 0xa8, 0x0a, 0x10, 0x6e, 0x15, 0xe1, 0x06, 0xfa, 0x7f, 0x28, 0x11,
0x99, 0x4b, 0x54, 0x57, 0x2f, 0x27, 0x9f, 0x29, 0x44, 0x53, 0x61, 0xf0, 0xa8, 0x09, 0x55, 0xd7, 0x49, 0x99, 0x49, 0x34, 0xd7, 0xae, 0xa5, 0x9f, 0x29, 0x42, 0x53, 0x65, 0xf0, 0xa8, 0x0b, 0x4d,
0x53, 0x1d, 0xaf, 0xdd, 0xb3, 0x5d, 0x6a, 0x67, 0xea, 0x38, 0xa5, 0x55, 0x39, 0x4a, 0x41, 0xa4, 0xcf, 0xd7, 0x5c, 0xbf, 0x3f, 0x72, 0x3c, 0x7a, 0xcf, 0xd4, 0x70, 0x6a, 0x6b, 0x4a, 0x9c, 0x82,
0xc8, 0x6d, 0xb7, 0xbb, 0xc3, 0x21, 0x95, 0x0a, 0xc5, 0xf4, 0x97, 0xe8, 0x3e, 0x94, 0xb1, 0xa5, 0x08, 0x91, 0x3b, 0xde, 0x70, 0x97, 0x43, 0xaa, 0x0d, 0x8a, 0x19, 0x2c, 0xd1, 0xbb, 0x50, 0xc7,
0x05, 0x84, 0x72, 0xa9, 0x09, 0x95, 0xb0, 0xa5, 0x09, 0x32, 0x81, 0x7d, 0xf2, 0xe9, 0xed, 0xf3, 0xb6, 0x1e, 0x12, 0x2a, 0xe6, 0x26, 0x54, 0xc3, 0xb6, 0x2e, 0xc8, 0x84, 0xf7, 0x53, 0xca, 0x7f,
0x95, 0x04, 0xf5, 0x41, 0x03, 0x9d, 0x26, 0x51, 0xde, 0x65, 0x48, 0x98, 0x19, 0x68, 0x64, 0x84, 0x3f, 0x5f, 0x4a, 0xd0, 0x9e, 0xbc, 0xa0, 0xd3, 0x04, 0xca, 0x37, 0x18, 0x12, 0x66, 0x17, 0x34,
0x0b, 0x23, 0x29, 0x1c, 0x45, 0xd6, 0xe1, 0x8d, 0x40, 0x1a, 0xfa, 0xe5, 0xa5, 0x39, 0xcb, 0x97, 0xd5, 0xc3, 0xc5, 0x25, 0xa9, 0x1c, 0x45, 0x31, 0xe0, 0xa9, 0x50, 0x1a, 0xfa, 0xe5, 0xb1, 0x19,
0x12, 0xcc, 0xc7, 0x79, 0x9d, 0xe6, 0xdc, 0xff, 0x07, 0x79, 0xdd, 0xda, 0xb7, 0xfd, 0x63, 0x2f, 0xcb, 0x17, 0x12, 0x2c, 0x25, 0x79, 0x9d, 0xe6, 0xdc, 0xff, 0x07, 0x25, 0xc3, 0x3e, 0x70, 0x82,
0x8c, 0x88, 0x33, 0xc2, 0x8b, 0x01, 0xcb, 0x26, 0x9c, 0xdf, 0xc4, 0x5e, 0xd3, 0x72, 0xb1, 0xe3, 0x63, 0x2f, 0x4f, 0xf1, 0x33, 0xc2, 0x8b, 0x01, 0x2b, 0x16, 0x5c, 0xde, 0xc2, 0x7e, 0xd7, 0xf6,
0xad, 0xe9, 0x96, 0x61, 0x77, 0x77, 0x54, 0xef, 0xe0, 0x14, 0x31, 0x12, 0x71, 0xf7, 0x4c, 0xcc, 0xb0, 0xeb, 0xaf, 0x1b, 0xb6, 0xe9, 0x0c, 0x77, 0x35, 0xff, 0xf0, 0x14, 0x3e, 0x12, 0x33, 0xf7,
0xdd, 0xe5, 0x3f, 0x48, 0x70, 0x21, 0x99, 0x1f, 0x3f, 0x7a, 0x03, 0x0a, 0xfb, 0x3a, 0x36, 0x34, 0x42, 0xc2, 0xdc, 0x95, 0x3f, 0x4a, 0x70, 0x25, 0x9d, 0x1f, 0x3f, 0x7a, 0x07, 0x2a, 0x07, 0x06,
0xa2, 0x33, 0x89, 0xea, 0x4c, 0xac, 0x49, 0xac, 0xf4, 0x08, 0x30, 0x3f, 0xe1, 0xe5, 0x21, 0x0e, 0x36, 0x75, 0xa2, 0x33, 0x89, 0xea, 0x4c, 0xac, 0x89, 0xaf, 0x8c, 0x08, 0x30, 0x3f, 0xe1, 0xb5,
0xda, 0xf2, 0x1c, 0xdd, 0xea, 0x6e, 0xe9, 0xae, 0xa7, 0x30, 0xf8, 0x90, 0x3e, 0xb3, 0xe9, 0x3d, 0x0c, 0x03, 0xed, 0xf9, 0xae, 0x61, 0x0f, 0xb7, 0x0d, 0xcf, 0x57, 0x19, 0x7c, 0x44, 0x9f, 0x72,
0xf3, 0x17, 0x12, 0x2c, 0x6c, 0x62, 0xef, 0x9e, 0x48, 0xb5, 0xe4, 0xbb, 0xee, 0x7a, 0x7a, 0xc7, 0x7e, 0xcb, 0xfc, 0x99, 0x04, 0xcb, 0x5b, 0xd8, 0xbf, 0x2b, 0x42, 0x2d, 0xf9, 0x6e, 0x78, 0xbe,
0x7d, 0xb9, 0x4d, 0x44, 0x42, 0xcd, 0x94, 0x7f, 0x29, 0xc1, 0xa5, 0xa1, 0xc2, 0x70, 0xd5, 0xf1, 0x31, 0xf0, 0x1e, 0x6f, 0x11, 0x91, 0x92, 0x33, 0x95, 0x9f, 0x4b, 0x70, 0x35, 0x53, 0x18, 0xae,
0x54, 0xe2, 0x27, 0xda, 0xe4, 0x54, 0xf2, 0x3d, 0x7c, 0xfc, 0x48, 0x35, 0xfa, 0x78, 0x47, 0xd5, 0x3a, 0x1e, 0x4a, 0x82, 0x40, 0x9b, 0x1e, 0x4a, 0xde, 0xc7, 0xc7, 0x1f, 0x69, 0xe6, 0x18, 0xef,
0x1d, 0x96, 0x4a, 0x4e, 0x98, 0x58, 0xff, 0x24, 0xc1, 0xc5, 0x4d, 0xec, 0xed, 0xf8, 0x65, 0xe6, 0x6a, 0x86, 0xcb, 0x42, 0xc9, 0x09, 0x03, 0xeb, 0x9f, 0x25, 0x78, 0x66, 0x0b, 0xfb, 0xbb, 0x41,
0x35, 0x6a, 0x27, 0x45, 0x47, 0xf1, 0x35, 0x33, 0x66, 0xa2, 0xb4, 0xaf, 0x45, 0x7d, 0x0b, 0x34, 0x9a, 0x79, 0x82, 0xda, 0xc9, 0x51, 0x51, 0x7c, 0xc5, 0x2e, 0x33, 0x55, 0xda, 0x27, 0xa2, 0xbe,
0x0e, 0x42, 0x01, 0x79, 0x8f, 0xf5, 0x02, 0x5c, 0x79, 0xf2, 0xf3, 0x2c, 0x94, 0x1f, 0xf1, 0xfe, 0x65, 0xea, 0x07, 0x11, 0x87, 0xbc, 0xcb, 0x6a, 0x01, 0xae, 0x3c, 0xe5, 0x91, 0x0c, 0xf5, 0x8f,
0x80, 0x96, 0x91, 0xb8, 0x1e, 0xa4, 0x64, 0x3d, 0x84, 0x5a, 0x8a, 0xa4, 0x2e, 0x63, 0x13, 0x2a, 0x78, 0x7d, 0x40, 0xd3, 0x48, 0x52, 0x0f, 0x52, 0xba, 0x1e, 0x22, 0x25, 0x45, 0x5a, 0x95, 0xb1,
0x2e, 0xc6, 0x4f, 0x4e, 0x52, 0x34, 0xca, 0x04, 0x51, 0x24, 0xfb, 0x2d, 0x98, 0xed, 0x5b, 0xfb, 0x05, 0x0d, 0x0f, 0xe3, 0xfb, 0x27, 0x49, 0x1a, 0x75, 0x82, 0x28, 0x82, 0xfd, 0x36, 0x9c, 0x1f,
0xa4, 0xad, 0xc5, 0x1a, 0x3f, 0x05, 0xeb, 0x2e, 0xc7, 0x67, 0x9e, 0x41, 0x44, 0xf4, 0x00, 0x66, 0xdb, 0x07, 0xa4, 0xac, 0xc5, 0x3a, 0x3f, 0x05, 0xab, 0x2e, 0x67, 0x47, 0x9e, 0x49, 0x44, 0xf4,
0xe2, 0xb4, 0xf2, 0xa9, 0x68, 0xc5, 0xd1, 0x50, 0x13, 0x6a, 0x9a, 0x63, 0xf7, 0x7a, 0x58, 0x6b, 0x1e, 0x2c, 0x26, 0x69, 0x95, 0x72, 0xd1, 0x4a, 0xa2, 0xa1, 0x2e, 0xb4, 0x74, 0xd7, 0x19, 0x8d,
0xbb, 0x3e, 0xa9, 0xa9, 0x74, 0xa4, 0x38, 0x9e, 0x4f, 0x4a, 0xfe, 0xb9, 0x04, 0xf3, 0x8f, 0x55, 0xb0, 0xde, 0xf7, 0x02, 0x52, 0xe5, 0x7c, 0xa4, 0x38, 0x5e, 0x40, 0x4a, 0xf9, 0xa9, 0x04, 0x4b,
0xaf, 0x73, 0xb0, 0x6e, 0x72, 0xe3, 0x9c, 0xc2, 0xb5, 0x3f, 0x84, 0xe2, 0x21, 0x37, 0x84, 0x9f, 0x1f, 0x6b, 0xfe, 0xe0, 0x70, 0xc3, 0xe2, 0x97, 0x73, 0x0a, 0xd3, 0x7e, 0x0b, 0xaa, 0x0f, 0xf8,
0xbf, 0x2e, 0x25, 0x08, 0x14, 0x36, 0xb9, 0x12, 0x60, 0xc8, 0xdf, 0x4a, 0x70, 0x96, 0x0e, 0x11, 0x45, 0x04, 0xf1, 0xeb, 0x6a, 0x8a, 0x40, 0xd1, 0x2b, 0x57, 0x43, 0x0c, 0xe5, 0x6b, 0x09, 0x2e,
0xbe, 0x74, 0xaf, 0x3e, 0xc8, 0xc6, 0x0c, 0x12, 0xe8, 0x2a, 0x54, 0x4d, 0xd5, 0x79, 0xd2, 0x0a, 0xd2, 0x26, 0x22, 0x90, 0xee, 0x9b, 0x77, 0xb2, 0x19, 0x8d, 0x04, 0xba, 0x0e, 0x4d, 0x4b, 0x73,
0x60, 0xf2, 0x14, 0x26, 0xb6, 0x2b, 0x1f, 0x01, 0xf0, 0xd5, 0xb6, 0xdb, 0x3d, 0x81, 0xfc, 0xef, 0xef, 0xf7, 0x42, 0x98, 0x12, 0x85, 0x49, 0xec, 0x2a, 0x47, 0x00, 0x7c, 0xb5, 0xe3, 0x0d, 0x4f,
0xc3, 0x34, 0xe7, 0xca, 0xe3, 0x6d, 0x9c, 0x61, 0x7d, 0x70, 0xf9, 0x9f, 0x12, 0x54, 0x83, 0x0c, 0x20, 0xff, 0xeb, 0xb0, 0xc0, 0xb9, 0x72, 0x7f, 0x9b, 0x75, 0xb1, 0x01, 0xb8, 0xf2, 0x2f, 0x09,
0x4a, 0xa3, 0xaa, 0x0a, 0x19, 0x11, 0x4b, 0x99, 0xe6, 0x3a, 0xfa, 0x10, 0xa6, 0xd8, 0xd8, 0xc8, 0x9a, 0x61, 0x04, 0xa5, 0x5e, 0xd5, 0x84, 0x82, 0xf0, 0xa5, 0x42, 0x77, 0x03, 0xbd, 0x05, 0x65,
0x69, 0x5f, 0x89, 0xd2, 0xe6, 0x23, 0x65, 0x28, 0x0d, 0xd3, 0x0d, 0x85, 0x23, 0x11, 0x1d, 0x89, 0xd6, 0x36, 0x72, 0xda, 0xcf, 0xc7, 0x69, 0xf3, 0x96, 0x32, 0x12, 0x86, 0xe9, 0x86, 0xca, 0x91,
0xac, 0xc3, 0x26, 0x8c, 0xac, 0x12, 0xda, 0x41, 0x4d, 0x98, 0x89, 0x36, 0x6d, 0x7e, 0xcc, 0x2c, 0x88, 0x8e, 0x44, 0xd4, 0x61, 0x1d, 0x86, 0xac, 0x46, 0x76, 0x50, 0x17, 0x16, 0xe3, 0x45, 0x5b,
0x0e, 0xcb, 0x36, 0xeb, 0xaa, 0xa7, 0xd2, 0x64, 0x53, 0x8d, 0xf4, 0x6c, 0xae, 0xfc, 0xdf, 0x3c, 0xe0, 0x33, 0x2b, 0x59, 0xd1, 0x66, 0x43, 0xf3, 0x35, 0x1a, 0x6c, 0x9a, 0xb1, 0x9a, 0xcd, 0x53,
0x94, 0x42, 0xa7, 0x1c, 0x38, 0x49, 0xdc, 0xa4, 0x99, 0xf1, 0x79, 0x33, 0x3b, 0x38, 0x39, 0x5c, 0xfe, 0x5b, 0x82, 0x5a, 0xe4, 0x94, 0x13, 0x27, 0x49, 0x5e, 0x69, 0x61, 0x76, 0xdc, 0x94, 0x27,
0x81, 0xaa, 0x4e, 0x6b, 0x75, 0x9b, 0xbb, 0x22, 0x4d, 0xae, 0x45, 0xa5, 0xc2, 0x76, 0x79, 0x5c, 0x3b, 0x87, 0xe7, 0xa1, 0x69, 0xd0, 0x5c, 0xdd, 0xe7, 0xa6, 0x48, 0x83, 0x6b, 0x55, 0x6d, 0xb0,
0xa0, 0x05, 0x28, 0x59, 0x7d, 0xb3, 0x6d, 0xef, 0xb7, 0x1d, 0xfb, 0x99, 0xcb, 0x47, 0x90, 0xa2, 0x5d, 0xee, 0x17, 0x68, 0x19, 0x6a, 0xf6, 0xd8, 0xea, 0x3b, 0x07, 0x7d, 0xd7, 0x79, 0xe8, 0xf1,
0xd5, 0x37, 0xbf, 0xbf, 0xaf, 0xd8, 0xcf, 0xdc, 0xa0, 0xcb, 0x9d, 0x9a, 0xb0, 0xcb, 0x5d, 0x80, 0x16, 0xa4, 0x6a, 0x8f, 0xad, 0xef, 0x1c, 0xa8, 0xce, 0x43, 0x2f, 0xac, 0x72, 0xcb, 0x73, 0x56,
0x92, 0xa9, 0x1e, 0x11, 0xaa, 0x6d, 0xab, 0x6f, 0xd2, 0xe9, 0x24, 0xab, 0x14, 0x4d, 0xf5, 0x48, 0xb9, 0xcb, 0x50, 0xb3, 0xb4, 0x23, 0x42, 0xb5, 0x6f, 0x8f, 0x2d, 0xda, 0x9d, 0xc8, 0x6a, 0xd5,
0xb1, 0x9f, 0x3d, 0xec, 0x9b, 0x68, 0x09, 0x6a, 0x86, 0xea, 0x7a, 0xed, 0xf0, 0x78, 0x53, 0xa0, 0xd2, 0x8e, 0x54, 0xe7, 0xe1, 0xbd, 0xb1, 0x85, 0x56, 0xa1, 0x65, 0x6a, 0x9e, 0xdf, 0x8f, 0xb6,
0xe3, 0x4d, 0x95, 0xec, 0xdf, 0x0f, 0x46, 0x9c, 0xc1, 0x7e, 0xb9, 0x78, 0x8a, 0x7e, 0x59, 0x33, 0x37, 0x15, 0xda, 0xde, 0x34, 0xc9, 0xfe, 0xbb, 0x61, 0x8b, 0x33, 0x59, 0x2f, 0x57, 0x4f, 0x51,
0x8d, 0x80, 0x10, 0xa4, 0xef, 0x97, 0x35, 0xd3, 0x10, 0x64, 0xde, 0x87, 0xe9, 0x3d, 0xda, 0x01, 0x2f, 0xeb, 0x96, 0x19, 0x12, 0x82, 0xfc, 0xf5, 0xb2, 0x6e, 0x99, 0x82, 0xcc, 0xeb, 0xb0, 0xb0,
0xb9, 0xf5, 0xd2, 0xd0, 0x0c, 0xb5, 0x41, 0x9a, 0x1f, 0xd6, 0x28, 0x29, 0x3e, 0x38, 0xfa, 0x00, 0x4f, 0x2b, 0x20, 0xaf, 0x5d, 0xcb, 0x8c, 0x50, 0x9b, 0xa4, 0xf8, 0x61, 0x85, 0x92, 0x1a, 0x80,
0x8a, 0xb4, 0xf4, 0x50, 0xdc, 0x72, 0x2a, 0xdc, 0x00, 0x81, 0x60, 0x6b, 0xd8, 0xf0, 0x54, 0x8a, 0xa3, 0x37, 0xa1, 0x4a, 0x53, 0x0f, 0xc5, 0xad, 0xe7, 0xc2, 0x0d, 0x11, 0x08, 0xb6, 0x8e, 0x4d,
0x5d, 0x49, 0x87, 0x2d, 0x10, 0xd0, 0x2d, 0x98, 0xeb, 0x38, 0x58, 0xf5, 0xb0, 0xb6, 0x76, 0x7c, 0x5f, 0xa3, 0xd8, 0x8d, 0x7c, 0xd8, 0x02, 0x01, 0xbd, 0x02, 0x17, 0x06, 0x2e, 0xd6, 0x7c, 0xac,
0xcf, 0x36, 0x7b, 0x2a, 0x75, 0xa6, 0x7a, 0x75, 0x51, 0x5a, 0x2a, 0x28, 0x49, 0x9f, 0x48, 0x62, 0xaf, 0x1f, 0xdf, 0x75, 0xac, 0x91, 0x46, 0x8d, 0xa9, 0xdd, 0x5c, 0x91, 0x56, 0x2b, 0x6a, 0xda,
0xe8, 0x88, 0xd5, 0x86, 0x63, 0x9b, 0xf5, 0x19, 0x96, 0x18, 0xa2, 0xbb, 0xe8, 0x22, 0x80, 0x9f, 0x27, 0x12, 0x18, 0x06, 0x62, 0xb5, 0xe9, 0x3a, 0x56, 0x7b, 0x91, 0x05, 0x86, 0xf8, 0x2e, 0x7a,
0xba, 0x55, 0xaf, 0x5e, 0xa3, 0x56, 0x2c, 0xf2, 0x9d, 0x8f, 0x3d, 0xf9, 0x0b, 0x38, 0x1b, 0x78, 0x06, 0x20, 0x08, 0xdd, 0x9a, 0xdf, 0x6e, 0xd1, 0x5b, 0xac, 0xf2, 0x9d, 0x77, 0x7c, 0xe5, 0x73,
0x48, 0xc8, 0x1a, 0x83, 0x86, 0x95, 0x4e, 0x6a, 0xd8, 0xd1, 0xbd, 0xeb, 0x5f, 0x72, 0x30, 0xdf, 0xb8, 0x18, 0x5a, 0x48, 0xe4, 0x36, 0x26, 0x2f, 0x56, 0x3a, 0xe9, 0xc5, 0x4e, 0xaf, 0x5d, 0xff,
0x52, 0x0f, 0xf1, 0xcb, 0x6f, 0x93, 0x53, 0xe5, 0xe3, 0x2d, 0x98, 0xa5, 0x9d, 0xf1, 0x6a, 0x48, 0x5a, 0x84, 0xa5, 0x9e, 0xf6, 0x00, 0x3f, 0xfe, 0x32, 0x39, 0x57, 0x3c, 0xde, 0x86, 0xf3, 0xb4,
0x9e, 0x11, 0x15, 0x38, 0x6c, 0xce, 0x41, 0x44, 0xf4, 0x11, 0x69, 0x1d, 0x70, 0xe7, 0xc9, 0x8e, 0x32, 0x5e, 0x8b, 0xc8, 0x33, 0x25, 0x03, 0x47, 0xaf, 0x73, 0x12, 0x11, 0xbd, 0x4d, 0x4a, 0x07,
0xad, 0x07, 0xd5, 0xf7, 0x62, 0x02, 0x9d, 0x7b, 0x02, 0x4a, 0x09, 0x63, 0xa0, 0x9d, 0xc1, 0xd4, 0x3c, 0xb8, 0xbf, 0xeb, 0x18, 0x61, 0xf6, 0x7d, 0x26, 0x85, 0xce, 0x5d, 0x01, 0xa5, 0x46, 0x31,
0xc6, 0xea, 0xee, 0xb5, 0x91, 0xf3, 0x57, 0xa0, 0xfd, 0x78, 0x86, 0x43, 0x75, 0x98, 0xe6, 0xd5, 0xd0, 0xee, 0x64, 0x68, 0x63, 0x79, 0xf7, 0x85, 0xa9, 0xfd, 0x57, 0xa8, 0xfd, 0x64, 0x84, 0x43,
0x9d, 0xc6, 0x7d, 0x41, 0xf1, 0x97, 0x68, 0x07, 0xe6, 0xd8, 0x09, 0x5a, 0xdc, 0xa9, 0xd9, 0xe1, 0x6d, 0x58, 0xe0, 0xd9, 0x9d, 0xfa, 0x7d, 0x45, 0x0d, 0x96, 0x68, 0x17, 0x2e, 0xb0, 0x13, 0xf4,
0x0b, 0xa9, 0x0e, 0x9f, 0x84, 0x1a, 0x8d, 0x89, 0xe2, 0xa4, 0x31, 0x51, 0x87, 0x69, 0xee, 0xa7, 0xb8, 0x51, 0xb3, 0xc3, 0x57, 0x72, 0x1d, 0x3e, 0x0d, 0x35, 0xee, 0x13, 0xd5, 0x79, 0x7d, 0xa2,
0x34, 0x17, 0x14, 0x14, 0x7f, 0x49, 0x86, 0x08, 0x08, 0x34, 0x36, 0xe6, 0x2e, 0xe0, 0xbb, 0x50, 0x0d, 0x0b, 0xdc, 0x4e, 0x69, 0x2c, 0xa8, 0xa8, 0xc1, 0x92, 0x34, 0x11, 0x10, 0x6a, 0x6c, 0xc6,
0x10, 0x3e, 0x9c, 0x49, 0xed, 0xc3, 0x02, 0x27, 0x9e, 0x85, 0xb3, 0xb1, 0x2c, 0x2c, 0xff, 0x4b, 0x2c, 0xe0, 0xdb, 0x50, 0x11, 0x36, 0x5c, 0xc8, 0x6d, 0xc3, 0x02, 0x27, 0x19, 0x85, 0xe5, 0x44,
0x82, 0xf2, 0x3a, 0x11, 0x7a, 0xcb, 0xee, 0xd2, 0x9a, 0x71, 0x05, 0xaa, 0x0e, 0xee, 0xd8, 0x8e, 0x14, 0x56, 0xfe, 0x2d, 0x41, 0x7d, 0x83, 0x08, 0xbd, 0xed, 0x0c, 0x69, 0xce, 0x78, 0x1e, 0x9a,
0xd6, 0xc6, 0x96, 0xe7, 0xe8, 0x98, 0xcd, 0x9b, 0x39, 0xa5, 0xc2, 0x76, 0xef, 0xb3, 0x4d, 0x02, 0x2e, 0x1e, 0x38, 0xae, 0xde, 0xc7, 0xb6, 0xef, 0x1a, 0x98, 0xf5, 0x9b, 0x45, 0xb5, 0xc1, 0x76,
0x46, 0x12, 0xab, 0xeb, 0xa9, 0x66, 0xaf, 0xbd, 0x4f, 0x02, 0x38, 0xc3, 0xc0, 0xc4, 0x2e, 0x8d, 0xdf, 0x65, 0x9b, 0x04, 0x8c, 0x04, 0x56, 0xcf, 0xd7, 0xac, 0x51, 0xff, 0x80, 0x38, 0x70, 0x81,
0xdf, 0xcb, 0x50, 0x0e, 0xc0, 0x3c, 0x9b, 0xf2, 0xcf, 0x29, 0x25, 0xb1, 0xb7, 0x6b, 0xa3, 0xb7, 0x81, 0x89, 0x5d, 0xea, 0xbf, 0xd7, 0xa0, 0x1e, 0x82, 0xf9, 0x0e, 0xe5, 0x5f, 0x54, 0x6b, 0x62,
0xa1, 0x4a, 0xb5, 0xd6, 0x36, 0xec, 0x6e, 0x9b, 0xcc, 0x66, 0xbc, 0x9c, 0x94, 0x35, 0x2e, 0x16, 0x6f, 0xcf, 0x41, 0xcf, 0x41, 0x93, 0x6a, 0xad, 0x6f, 0x3a, 0xc3, 0x3e, 0xe9, 0xcd, 0x78, 0x3a,
0xb1, 0x46, 0x14, 0xca, 0xd5, 0x3f, 0xc7, 0xbc, 0xa0, 0x08, 0xa8, 0x96, 0xfe, 0x39, 0x26, 0xd5, 0xa9, 0xeb, 0x5c, 0x2c, 0x72, 0x1b, 0x71, 0x28, 0xcf, 0xf8, 0x0c, 0xf3, 0x84, 0x22, 0xa0, 0x7a,
0xbc, 0x42, 0xaa, 0xe3, 0x43, 0x5b, 0xc3, 0xbb, 0x27, 0xec, 0x25, 0x52, 0xdc, 0xcb, 0x5d, 0x80, 0xc6, 0x67, 0x98, 0x64, 0xf3, 0x06, 0xc9, 0x8e, 0xf7, 0x1c, 0x1d, 0xef, 0x9d, 0xb0, 0x96, 0xc8,
0xa2, 0x38, 0x01, 0x3f, 0x52, 0xb0, 0x81, 0x36, 0xa0, 0xea, 0xb7, 0x99, 0x6d, 0x36, 0x3d, 0xe4, 0x31, 0x97, 0xbb, 0x02, 0x55, 0x71, 0x02, 0x7e, 0xa4, 0x70, 0x03, 0x6d, 0x42, 0x33, 0x28, 0x33,
0x86, 0xf6, 0x76, 0xa1, 0xfa, 0xe6, 0x2a, 0x15, 0x1f, 0x8d, 0x2e, 0xe5, 0x0d, 0x28, 0x87, 0x3f, 0xfb, 0xac, 0x7b, 0x28, 0x66, 0xd6, 0x76, 0x91, 0xfc, 0xe6, 0xa9, 0x8d, 0x00, 0x8d, 0x2e, 0x95,
0x13, 0xae, 0xad, 0xb8, 0xa3, 0x88, 0x0d, 0xe2, 0x6f, 0x0f, 0xfb, 0x26, 0xb1, 0x29, 0x4f, 0x1d, 0x4d, 0xa8, 0x47, 0x3f, 0x13, 0xae, 0xbd, 0xa4, 0xa1, 0x88, 0x0d, 0x62, 0x6f, 0xf7, 0xc6, 0x16,
0xfe, 0x52, 0xfe, 0x52, 0x82, 0x0a, 0x2f, 0xca, 0x2d, 0x71, 0x6f, 0x4c, 0x8f, 0x26, 0xd1, 0xa3, 0xb9, 0x53, 0x1e, 0x3a, 0x82, 0xa5, 0xf2, 0x85, 0x04, 0x0d, 0x9e, 0x94, 0x7b, 0x62, 0x6e, 0x4c,
0xd1, 0xbf, 0xd1, 0x77, 0xa2, 0x97, 0x4e, 0x6f, 0x27, 0x86, 0x39, 0x25, 0x42, 0xfb, 0xdf, 0x48, 0x8f, 0x26, 0xd1, 0xa3, 0xd1, 0xbf, 0xd1, 0xb7, 0xe2, 0x43, 0xa7, 0xe7, 0x52, 0xdd, 0x9c, 0x12,
0x45, 0x4e, 0x33, 0xad, 0x3e, 0x27, 0x8e, 0xc6, 0x4d, 0x43, 0x1d, 0xad, 0x0e, 0xd3, 0xaa, 0xa6, 0xa1, 0xf5, 0x6f, 0x2c, 0x23, 0xe7, 0xe9, 0x56, 0x1f, 0x11, 0x43, 0xe3, 0x57, 0x43, 0x0d, 0xad,
0x39, 0xd8, 0x75, 0xb9, 0x1c, 0xfe, 0x92, 0x7c, 0x39, 0xc4, 0x8e, 0xeb, 0xbb, 0x7c, 0x56, 0xf1, 0x0d, 0x0b, 0x9a, 0xae, 0xbb, 0xd8, 0xf3, 0xb8, 0x1c, 0xc1, 0x92, 0x7c, 0x79, 0x80, 0x5d, 0x2f,
0x97, 0xe8, 0x03, 0x28, 0x88, 0x86, 0x39, 0x9b, 0xd4, 0x24, 0x85, 0xe5, 0xe4, 0xd3, 0x95, 0xc0, 0x30, 0x79, 0x59, 0x0d, 0x96, 0xe8, 0x4d, 0xa8, 0x88, 0x82, 0x59, 0x4e, 0x2b, 0x92, 0xa2, 0x72,
0x90, 0xbf, 0xce, 0x40, 0x95, 0x2b, 0x6c, 0x8d, 0x57, 0xcd, 0xd1, 0xc1, 0xb7, 0x06, 0xe5, 0xfd, 0xf2, 0xee, 0x4a, 0x60, 0x28, 0x5f, 0x15, 0xa0, 0xc9, 0x15, 0xb6, 0xce, 0xb3, 0xe6, 0x74, 0xe7,
0x20, 0xba, 0x47, 0xdd, 0xa2, 0x84, 0x93, 0x40, 0x04, 0x67, 0x5c, 0x00, 0x46, 0xeb, 0x76, 0xee, 0x5b, 0x87, 0xfa, 0x41, 0xe8, 0xdd, 0xd3, 0xa6, 0x28, 0xd1, 0x20, 0x10, 0xc3, 0x99, 0xe5, 0x80,
0x54, 0x75, 0x3b, 0x3f, 0x61, 0x8e, 0x92, 0x7f, 0x04, 0xa5, 0xd0, 0x17, 0x9a, 0x5c, 0xd9, 0xbd, 0xf1, 0xbc, 0x5d, 0x3c, 0x55, 0xde, 0x2e, 0xcd, 0x19, 0xa3, 0x94, 0xef, 0x43, 0x2d, 0xf2, 0x85,
0x0a, 0x57, 0x85, 0xbf, 0x44, 0x77, 0x82, 0xb6, 0x84, 0xe9, 0xe0, 0x5c, 0x02, 0x93, 0x58, 0x47, 0x06, 0x57, 0x36, 0x57, 0xe1, 0xaa, 0x08, 0x96, 0xe8, 0x4e, 0x58, 0x96, 0x30, 0x1d, 0x5c, 0x4a,
0x22, 0xff, 0x51, 0x82, 0x29, 0x4e, 0xf9, 0x12, 0x94, 0x78, 0x36, 0xa1, 0x2d, 0x1b, 0xa3, 0x0e, 0x61, 0x92, 0xa8, 0x48, 0x94, 0x3f, 0x49, 0x50, 0xe6, 0x94, 0xaf, 0x42, 0x8d, 0x47, 0x13, 0x5a,
0x7c, 0x8b, 0xf4, 0x6c, 0x2f, 0x2e, 0x9d, 0x9c, 0x83, 0x42, 0x2c, 0x91, 0x4c, 0xf3, 0x8c, 0xee, 0xb2, 0x31, 0xea, 0xc0, 0xb7, 0x48, 0xcd, 0x76, 0x76, 0xe1, 0xe4, 0x12, 0x54, 0x12, 0x81, 0x64,
0x7f, 0x0a, 0x65, 0x0f, 0xf2, 0x89, 0x26, 0x8e, 0x6f, 0x25, 0x7a, 0x27, 0xac, 0xe0, 0x8e, 0x7d, 0x81, 0x47, 0xf4, 0xe0, 0x53, 0x24, 0x7a, 0x90, 0x4f, 0x34, 0x70, 0x7c, 0x2d, 0xd1, 0x99, 0xb0,
0x88, 0x9d, 0xe3, 0xd3, 0xdf, 0xbc, 0xdd, 0x0d, 0x79, 0x6a, 0xca, 0xd1, 0x4e, 0x20, 0xa0, 0xbb, 0x8a, 0x07, 0xce, 0x03, 0xec, 0x1e, 0x9f, 0x7e, 0xf2, 0xf6, 0x46, 0xc4, 0x52, 0x73, 0xb6, 0x76,
0x81, 0xba, 0xb3, 0x49, 0x17, 0x0f, 0xe1, 0xd4, 0xc1, 0xfd, 0x2c, 0x50, 0xfb, 0x37, 0xec, 0x0e, 0x02, 0x01, 0xbd, 0x11, 0xaa, 0x5b, 0x4e, 0x1b, 0x3c, 0x44, 0x43, 0x07, 0xb7, 0xb3, 0x50, 0xed,
0x31, 0x7a, 0x94, 0x93, 0xb6, 0x24, 0x2f, 0x64, 0x62, 0x90, 0x7f, 0x2d, 0xc1, 0xb9, 0x4d, 0xec, 0xbf, 0x60, 0x33, 0xc4, 0xf8, 0x51, 0x4e, 0x5a, 0x92, 0x9c, 0x49, 0xc7, 0xa0, 0xfc, 0x4a, 0x82,
0x6d, 0x44, 0xe7, 0xf2, 0xd7, 0x2d, 0x95, 0x09, 0x8d, 0x24, 0xa1, 0x4e, 0x63, 0xf5, 0x06, 0x14, 0x4b, 0x5b, 0xd8, 0xdf, 0x8c, 0xf7, 0xe5, 0x4f, 0x5a, 0x2a, 0x0b, 0x3a, 0x69, 0x42, 0x9d, 0xe6,
0xc4, 0x0d, 0x03, 0xbb, 0xdd, 0x15, 0x6b, 0xf9, 0x67, 0x12, 0xd4, 0x39, 0x17, 0xca, 0x93, 0x74, 0xd6, 0x3b, 0x50, 0x11, 0x13, 0x06, 0x36, 0xdd, 0x15, 0x6b, 0xe5, 0x27, 0x12, 0xb4, 0x39, 0x17,
0xc3, 0x06, 0xf6, 0xb0, 0xf6, 0xaa, 0x47, 0xde, 0x7f, 0x48, 0x50, 0x0b, 0xa7, 0x72, 0x9a, 0x8d, 0xca, 0x93, 0x54, 0xc3, 0x26, 0xf6, 0xb1, 0xfe, 0x4d, 0xb7, 0xbc, 0xff, 0x94, 0xa0, 0x15, 0x0d,
0xdf, 0x83, 0x3c, 0xbd, 0x59, 0xe0, 0x12, 0x8c, 0x75, 0x56, 0x06, 0x4d, 0x52, 0x06, 0xed, 0xd0, 0xe5, 0x34, 0x1a, 0xbf, 0x06, 0x25, 0x3a, 0x59, 0xe0, 0x12, 0xcc, 0x34, 0x56, 0x06, 0x4d, 0x42,
0x76, 0x45, 0xd5, 0xe1, 0xcb, 0xa0, 0x9e, 0x64, 0x27, 0xaf, 0x27, 0xbc, 0xbe, 0xda, 0x7d, 0x42, 0x06, 0xad, 0xd0, 0xf6, 0x44, 0xd6, 0xe1, 0xcb, 0x30, 0x9f, 0xc8, 0xf3, 0xe7, 0x13, 0x9e, 0x5f,
0x97, 0xdd, 0xdc, 0x05, 0x1b, 0xf2, 0x57, 0x19, 0xa8, 0x07, 0xa3, 0xc4, 0x2b, 0x4f, 0xe8, 0x43, 0x9d, 0x31, 0xa1, 0xcb, 0x26, 0x77, 0xe1, 0x86, 0xf2, 0x65, 0x01, 0xda, 0x61, 0x2b, 0xf1, 0x8d,
0x1a, 0xcd, 0xec, 0x0b, 0x6a, 0x34, 0x73, 0x93, 0x26, 0xf1, 0xbf, 0x67, 0xa0, 0x1a, 0xa8, 0x63, 0x07, 0xf4, 0x8c, 0x42, 0x53, 0x3e, 0xa3, 0x42, 0xb3, 0x38, 0x6f, 0x10, 0xff, 0x47, 0x01, 0x9a,
0xc7, 0x50, 0x2d, 0x34, 0x0f, 0x53, 0x3d, 0x43, 0x0d, 0x6e, 0x04, 0xf9, 0x0a, 0xb5, 0x44, 0x67, 0xa1, 0x3a, 0x76, 0x4d, 0xcd, 0x46, 0x4b, 0x50, 0x1e, 0x99, 0x5a, 0x38, 0x11, 0xe4, 0x2b, 0xd4,
0x12, 0x55, 0xc0, 0x3b, 0x49, 0xc6, 0x19, 0xa2, 0x61, 0x25, 0x46, 0x82, 0x8c, 0x68, 0xac, 0xc9, 0x13, 0x95, 0x49, 0x5c, 0x01, 0x2f, 0xa5, 0x5d, 0x4e, 0x86, 0x86, 0xd5, 0x04, 0x09, 0xd2, 0xa2,
0xa7, 0x83, 0x36, 0xef, 0x86, 0x98, 0x17, 0x90, 0x19, 0xfb, 0x26, 0x20, 0x6e, 0xba, 0xb6, 0x6e, 0xb1, 0x22, 0x9f, 0x36, 0xda, 0xbc, 0x1a, 0x62, 0x56, 0x40, 0x7a, 0xec, 0x9b, 0x80, 0xf8, 0xd5,
0xb5, 0x5d, 0xdc, 0xb1, 0x2d, 0x8d, 0x19, 0x35, 0xaf, 0xd4, 0xf8, 0x97, 0xa6, 0xd5, 0x62, 0xfb, 0xf5, 0x0d, 0xbb, 0xef, 0xe1, 0x81, 0x63, 0xeb, 0xec, 0x52, 0x4b, 0x6a, 0x8b, 0x7f, 0xe9, 0xda,
0xe8, 0x3d, 0xc8, 0x79, 0xc7, 0x3d, 0x96, 0x9e, 0xab, 0x89, 0x69, 0x2f, 0x90, 0x6b, 0xf7, 0xb8, 0x3d, 0xb6, 0x8f, 0x5e, 0x83, 0xa2, 0x7f, 0x3c, 0x62, 0xe1, 0xb9, 0x99, 0x1a, 0xf6, 0x42, 0xb9,
0x87, 0x15, 0x0a, 0x8e, 0x16, 0x00, 0x08, 0x29, 0xcf, 0x51, 0x0f, 0xb1, 0xe1, 0xff, 0x96, 0x19, 0xf6, 0x8e, 0x47, 0x58, 0xa5, 0xe0, 0x68, 0x19, 0x80, 0x90, 0xf2, 0x5d, 0xed, 0x01, 0x36, 0x83,
0xec, 0x10, 0x37, 0xf5, 0xef, 0x2a, 0xa6, 0x59, 0x4d, 0xe0, 0x4b, 0xf9, 0xaf, 0x19, 0xa8, 0x05, 0xdf, 0x32, 0xc3, 0x1d, 0x62, 0xa6, 0xc1, 0xac, 0x62, 0x81, 0xe5, 0x04, 0xbe, 0x54, 0xfe, 0x56,
0x24, 0x15, 0xec, 0xf6, 0x0d, 0x6f, 0xa8, 0xfe, 0x46, 0x0f, 0x68, 0xe3, 0x2a, 0xfd, 0x47, 0x50, 0x80, 0x56, 0x48, 0x52, 0xc5, 0xde, 0xd8, 0xf4, 0x33, 0xf5, 0x37, 0xbd, 0x41, 0x9b, 0x95, 0xe9,
0xe2, 0xf7, 0x26, 0x13, 0x18, 0x1a, 0x18, 0xca, 0xd6, 0x08, 0xcf, 0xcb, 0xbf, 0x20, 0xcf, 0x9b, 0xdf, 0x86, 0x1a, 0x9f, 0x9b, 0xcc, 0x71, 0xd1, 0xc0, 0x50, 0xb6, 0xa7, 0x58, 0x5e, 0xe9, 0x8c,
0x9a, 0xd4, 0xf3, 0x5a, 0x30, 0xef, 0x27, 0xb4, 0x00, 0x60, 0x1b, 0x7b, 0xea, 0x88, 0x4e, 0xe2, 0x2c, 0xaf, 0x3c, 0xaf, 0xe5, 0xf5, 0x60, 0x29, 0x08, 0x68, 0x21, 0xc0, 0x0e, 0xf6, 0xb5, 0x29,
0x12, 0x94, 0x58, 0xa1, 0x62, 0x15, 0x9a, 0x35, 0xd7, 0xb0, 0x27, 0xa6, 0x4e, 0xf9, 0xc7, 0x70, 0x95, 0xc4, 0x55, 0xa8, 0xb1, 0x44, 0xc5, 0x32, 0x34, 0x2b, 0xae, 0x61, 0x5f, 0x74, 0x9d, 0xca,
0x96, 0x26, 0x84, 0xf8, 0xf5, 0x6a, 0x9a, 0xbb, 0x6e, 0x59, 0xb4, 0xee, 0xa4, 0x4d, 0x67, 0xde, 0x0f, 0xe0, 0x22, 0x0d, 0x08, 0xc9, 0xf1, 0x6a, 0x9e, 0x59, 0xb7, 0x22, 0x4a, 0x77, 0x52, 0xa6,
0x5d, 0x54, 0x22, 0x7b, 0xf2, 0x16, 0xbc, 0x11, 0xa3, 0x7f, 0x8a, 0x84, 0x2f, 0xff, 0x4d, 0x82, 0x33, 0xeb, 0xae, 0xaa, 0xb1, 0x3d, 0x65, 0x1b, 0x9e, 0x4a, 0xd0, 0x3f, 0x45, 0xc0, 0x57, 0xfe,
0x73, 0xeb, 0x8e, 0xdd, 0x7b, 0xa4, 0x3b, 0x5e, 0x5f, 0x35, 0xa2, 0x17, 0xf6, 0x2f, 0x67, 0xf8, 0x2e, 0xc1, 0xa5, 0x0d, 0xd7, 0x19, 0x7d, 0x64, 0xb8, 0xfe, 0x58, 0x33, 0xe3, 0x03, 0xfb, 0xc7,
0x78, 0x10, 0xaa, 0x31, 0x2c, 0xe9, 0xdc, 0x4c, 0x30, 0xd9, 0xa0, 0x50, 0xdc, 0x54, 0xa1, 0x8a, 0xd3, 0x7c, 0xbc, 0x17, 0xc9, 0x31, 0x2c, 0xe8, 0xdc, 0x4c, 0xb9, 0xb2, 0x49, 0xa1, 0xf8, 0x55,
0xf4, 0x9f, 0x6c, 0x92, 0xf0, 0x1c, 0x6e, 0x4c, 0x26, 0x4d, 0x53, 0x82, 0x13, 0x6f, 0x23, 0xb2, 0x45, 0x32, 0xd2, 0x7f, 0xe4, 0x34, 0xe1, 0x39, 0xdc, 0x8c, 0x48, 0x9a, 0x27, 0x05, 0xa7, 0x4e,
0x27, 0xbd, 0x8d, 0x18, 0xe2, 0xfd, 0xb9, 0x17, 0xe4, 0xfd, 0x93, 0x36, 0xcf, 0xe8, 0x01, 0x44, 0x23, 0xe4, 0x93, 0x4e, 0x23, 0x32, 0xac, 0xbf, 0x78, 0x46, 0xd6, 0x3f, 0x6f, 0xf1, 0x8c, 0xde,
0x6f, 0x8a, 0x68, 0xda, 0x39, 0xd1, 0x15, 0xd3, 0x1a, 0x40, 0x70, 0x6b, 0xc2, 0x5f, 0x5b, 0xa4, 0x83, 0xf8, 0xa4, 0x88, 0x86, 0x9d, 0x13, 0x8d, 0x98, 0xd6, 0x01, 0xc2, 0xa9, 0x09, 0x7f, 0x6d,
0x21, 0x13, 0xc2, 0x22, 0xd6, 0x12, 0x99, 0x86, 0xde, 0x76, 0x46, 0xa6, 0xfc, 0x4f, 0xa0, 0x91, 0x91, 0x87, 0x4c, 0x04, 0x8b, 0xdc, 0x96, 0x88, 0x34, 0x74, 0xda, 0x19, 0xeb, 0xf2, 0x3f, 0x80,
0xe4, 0xa5, 0xa7, 0xf0, 0xfc, 0x1b, 0xbf, 0x91, 0x60, 0x76, 0xa0, 0x80, 0xa3, 0x2a, 0xc0, 0xa7, 0x4e, 0x9a, 0x95, 0x9e, 0xc6, 0xf2, 0x7f, 0x04, 0xf5, 0xae, 0x35, 0x72, 0x5c, 0x9f, 0xc7, 0xcc,
0x56, 0x87, 0x77, 0x36, 0xb5, 0x33, 0xa8, 0x0c, 0x05, 0xbf, 0xcf, 0xa9, 0x49, 0xa8, 0x04, 0xd3, 0xb3, 0xae, 0x97, 0xd0, 0x65, 0xa8, 0xba, 0xce, 0xc3, 0x7e, 0xf8, 0x00, 0x46, 0x56, 0x2b, 0xae,
0xbb, 0x36, 0x85, 0xae, 0x65, 0x50, 0x0d, 0xca, 0x0c, 0xb1, 0xdf, 0xe9, 0x60, 0xd7, 0xad, 0x65, 0xf3, 0xf0, 0x2e, 0x59, 0xdf, 0xf8, 0xb5, 0x04, 0xe7, 0x27, 0xca, 0x07, 0xd4, 0x04, 0xf8, 0xd0,
0xc5, 0xce, 0x86, 0xaa, 0x1b, 0x7d, 0x07, 0xd7, 0x72, 0xa8, 0x02, 0xc5, 0x5d, 0x5b, 0xc1, 0x06, 0x1e, 0xf0, 0xba, 0xaa, 0x75, 0x0e, 0xd5, 0xa1, 0x12, 0x54, 0x59, 0x2d, 0x09, 0xd5, 0x60, 0x61,
0x56, 0x5d, 0x5c, 0xcb, 0x23, 0x04, 0x55, 0xbe, 0xf0, 0x91, 0xa6, 0x42, 0x7b, 0x3e, 0xda, 0xf4, 0xcf, 0xa1, 0xd0, 0xad, 0x02, 0x6a, 0x41, 0x9d, 0x21, 0x8e, 0x07, 0x03, 0xec, 0x79, 0x2d, 0x59,
0x8d, 0xfd, 0x70, 0x45, 0x24, 0x65, 0x02, 0xbd, 0x09, 0x73, 0x9f, 0x5a, 0x1a, 0xde, 0xd7, 0x2d, 0xec, 0x6c, 0x6a, 0x86, 0x39, 0x76, 0x71, 0xab, 0x88, 0x1a, 0x50, 0xdd, 0x73, 0x54, 0x6c, 0x62,
0xac, 0x05, 0x9f, 0x6a, 0x67, 0xd0, 0x1c, 0xcc, 0x34, 0x2d, 0x0b, 0x3b, 0xa1, 0x4d, 0x89, 0x6c, 0xcd, 0xc3, 0xad, 0x12, 0x42, 0xd0, 0xe4, 0x8b, 0x00, 0xa9, 0x1c, 0xd9, 0x0b, 0xd0, 0x16, 0x6e,
0x6e, 0x63, 0xa7, 0x8b, 0x43, 0x9b, 0x19, 0x34, 0x0b, 0x95, 0x6d, 0xfd, 0x28, 0xb4, 0x95, 0x5d, 0x1c, 0x44, 0xf3, 0x31, 0x49, 0x52, 0xe8, 0x69, 0xb8, 0xf0, 0xa1, 0xad, 0xe3, 0x03, 0xc3, 0xc6,
0xfd, 0x66, 0x0e, 0x8a, 0x64, 0xa6, 0xbd, 0x67, 0xdb, 0x8e, 0x86, 0x7a, 0x80, 0xe8, 0xcf, 0xb1, 0x7a, 0xf8, 0xa9, 0x75, 0x0e, 0x5d, 0x80, 0xc5, 0xae, 0x6d, 0x63, 0x37, 0xb2, 0x29, 0x91, 0xcd,
0x66, 0xcf, 0xb6, 0xc4, 0xbb, 0x05, 0x74, 0x6b, 0x88, 0x21, 0x07, 0x41, 0x79, 0xd6, 0x68, 0x5c, 0x1d, 0xec, 0x0e, 0x71, 0x64, 0xb3, 0x80, 0xce, 0x43, 0x63, 0xc7, 0x38, 0x8a, 0x6c, 0xc9, 0x6b,
0x1d, 0x82, 0x11, 0x03, 0x97, 0xcf, 0x20, 0x93, 0x72, 0x24, 0x65, 0x76, 0x57, 0xef, 0x3c, 0xf1, 0x7f, 0x78, 0x0a, 0xaa, 0xa4, 0xa3, 0xbe, 0xeb, 0x38, 0xae, 0x8e, 0x46, 0x80, 0xe8, 0x8f, 0xc1,
0x2f, 0xde, 0x47, 0x70, 0x8c, 0x81, 0xfa, 0x1c, 0x63, 0xcf, 0x21, 0xf8, 0x82, 0xfd, 0x66, 0xee, 0xd6, 0xc8, 0xb1, 0xc5, 0xab, 0x09, 0xf4, 0x4a, 0x86, 0x19, 0x4d, 0x82, 0xf2, 0x98, 0xd5, 0xb9,
0x7b, 0x89, 0x7c, 0x06, 0x3d, 0x85, 0xb3, 0x9b, 0xd8, 0x0b, 0x7e, 0x26, 0xf5, 0x19, 0xae, 0x0e, 0x9e, 0x81, 0x91, 0x00, 0x57, 0xce, 0x21, 0x8b, 0x72, 0x24, 0x49, 0x7e, 0xcf, 0x18, 0xdc, 0x0f,
0x67, 0x38, 0x00, 0x3c, 0x21, 0xcb, 0x2d, 0xc8, 0xd3, 0x66, 0x19, 0x25, 0x35, 0xa4, 0xe1, 0xc7, 0xc6, 0xfe, 0x53, 0x38, 0x26, 0x40, 0x03, 0x8e, 0x89, 0xc7, 0x18, 0x7c, 0xc1, 0x7e, 0xb1, 0x0f,
0x7b, 0x8d, 0xc5, 0xe1, 0x00, 0x82, 0xda, 0x4f, 0x60, 0x26, 0xf6, 0x38, 0x09, 0x5d, 0x4f, 0x40, 0x6c, 0x54, 0x39, 0x87, 0x3e, 0x85, 0x8b, 0x5b, 0xd8, 0x0f, 0x7f, 0xa4, 0x0d, 0x18, 0xae, 0x65,
0x4b, 0x7e, 0x66, 0xd6, 0xb8, 0x91, 0x06, 0x54, 0xf0, 0xea, 0x42, 0x35, 0xfa, 0x63, 0x2e, 0x5a, 0x33, 0x9c, 0x00, 0x9e, 0x93, 0xe5, 0x36, 0x94, 0x68, 0xa9, 0x8e, 0xd2, 0xca, 0xe1, 0xe8, 0xd3,
0x4a, 0xc0, 0x4f, 0x7c, 0x58, 0xd2, 0xb8, 0x9e, 0x02, 0x52, 0x30, 0x32, 0xa1, 0x16, 0x7f, 0x2c, 0xc1, 0xce, 0x4a, 0x36, 0x80, 0xa0, 0xf6, 0x43, 0x58, 0x4c, 0x3c, 0x8d, 0x42, 0x2f, 0xa6, 0xa0,
0x83, 0x6e, 0x8c, 0x24, 0x10, 0x75, 0xb7, 0x77, 0x52, 0xc1, 0x0a, 0x76, 0xc7, 0xd4, 0x09, 0x06, 0xa5, 0x3f, 0x72, 0xeb, 0xdc, 0xc8, 0x03, 0x2a, 0x78, 0x0d, 0xa1, 0x19, 0xff, 0x29, 0x19, 0xad,
0x1e, 0x6b, 0xa0, 0xe5, 0x64, 0x32, 0xc3, 0x5e, 0x91, 0x34, 0x56, 0x52, 0xc3, 0x0b, 0xd6, 0x3f, 0xa6, 0xe0, 0xa7, 0x3e, 0x6b, 0xe9, 0xbc, 0x98, 0x03, 0x52, 0x30, 0xb2, 0xa0, 0x95, 0x7c, 0xaa,
0x65, 0x43, 0x7a, 0xd2, 0x83, 0x07, 0x74, 0x3b, 0x99, 0xdc, 0x88, 0x97, 0x1a, 0x8d, 0xd5, 0x49, 0x83, 0x6e, 0x4c, 0x25, 0x10, 0x37, 0xb7, 0x97, 0x72, 0xc1, 0x0a, 0x76, 0xc7, 0xd4, 0x08, 0x26,
0x50, 0x84, 0x10, 0x5f, 0xd0, 0xe9, 0x3a, 0xe1, 0xd1, 0x40, 0x3c, 0xee, 0x7c, 0x7a, 0xc3, 0x5f, 0x9e, 0x8a, 0xa0, 0x5b, 0xe9, 0x64, 0xb2, 0xde, 0xb0, 0x74, 0x6e, 0xe7, 0x86, 0x17, 0xac, 0x7f,
0x43, 0x34, 0x6e, 0x4f, 0x80, 0x21, 0x04, 0xb0, 0xe3, 0xcf, 0x91, 0xfc, 0x30, 0x5c, 0x19, 0xeb, 0xcc, 0x46, 0x04, 0x69, 0xcf, 0x2d, 0xd0, 0xab, 0xe9, 0xe4, 0xa6, 0xbc, 0x13, 0xe9, 0xac, 0xcd,
0x35, 0x27, 0x8b, 0xc1, 0xcf, 0x60, 0x26, 0xf6, 0x13, 0x47, 0x62, 0xd4, 0x24, 0xff, 0x0c, 0xd2, 0x83, 0x22, 0x84, 0xf8, 0x9c, 0xf6, 0xf6, 0x29, 0x4f, 0x16, 0x92, 0x7e, 0x17, 0xd0, 0xcb, 0x7e,
0x18, 0x55, 0x4c, 0x58, 0x48, 0xc6, 0x2e, 0x2b, 0xd0, 0x10, 0xef, 0x4f, 0xb8, 0xd0, 0x68, 0xdc, 0x8b, 0xd1, 0x79, 0x75, 0x0e, 0x0c, 0x21, 0x80, 0x93, 0x7c, 0x0c, 0x15, 0xb8, 0xe1, 0xed, 0x99,
0x48, 0x03, 0x2a, 0x0e, 0xe2, 0xd2, 0x74, 0x19, 0x1b, 0xf8, 0xd1, 0xcd, 0x64, 0x1a, 0xc9, 0x97, 0x56, 0x73, 0x32, 0x1f, 0xfc, 0x04, 0x16, 0x13, 0x3f, 0xb0, 0xa4, 0x7a, 0x4d, 0xfa, 0x8f, 0x30,
0x15, 0x8d, 0x77, 0x53, 0x42, 0x0b, 0xa6, 0x6d, 0x80, 0x4d, 0xec, 0x6d, 0x63, 0xcf, 0x21, 0x3e, 0x9d, 0x69, 0x59, 0x88, 0xb9, 0x64, 0x62, 0x54, 0x82, 0x32, 0xac, 0x3f, 0x65, 0x9c, 0xd2, 0xb9,
0x72, 0x35, 0x51, 0xe5, 0x01, 0x80, 0xcf, 0xe6, 0xda, 0x58, 0x38, 0xc1, 0xe0, 0x07, 0x80, 0xfc, 0x91, 0x07, 0x54, 0x1c, 0xc4, 0xa3, 0xe1, 0x32, 0x31, 0x6e, 0x40, 0x37, 0xd3, 0x69, 0xa4, 0x8f,
0x12, 0x1b, 0xfa, 0x81, 0xed, 0xad, 0x91, 0xa3, 0x13, 0x9b, 0x73, 0xc6, 0xd9, 0xe6, 0x29, 0xd4, 0x4a, 0x3a, 0x2f, 0xe7, 0x84, 0x16, 0x4c, 0xfb, 0x00, 0x5b, 0xd8, 0xdf, 0xc1, 0xbe, 0x4b, 0x6c,
0xb6, 0x55, 0x8b, 0x34, 0x0c, 0x01, 0xdd, 0x9b, 0x89, 0x82, 0xc5, 0xc1, 0x86, 0x68, 0x6b, 0x28, 0xe4, 0x7a, 0xaa, 0xca, 0x43, 0x80, 0x80, 0xcd, 0x0b, 0x33, 0xe1, 0x04, 0x83, 0xef, 0x02, 0x0a,
0xb4, 0x38, 0xcc, 0x33, 0x51, 0x43, 0x55, 0x11, 0x82, 0x38, 0x9e, 0x5b, 0x02, 0x6d, 0xc4, 0x00, 0x52, 0x6c, 0xe4, 0xe7, 0xbd, 0x67, 0xa7, 0x36, 0x6e, 0xac, 0x62, 0x98, 0x75, 0x37, 0x9f, 0x42,
0x87, 0xe4, 0x96, 0x11, 0xf0, 0x82, 0xf1, 0x73, 0x89, 0x3e, 0x7a, 0x8b, 0x01, 0x3c, 0xd6, 0xbd, 0x6b, 0x47, 0xb3, 0x49, 0xb9, 0x12, 0xd2, 0xbd, 0x99, 0x2a, 0x58, 0x12, 0x2c, 0x43, 0x5b, 0x99,
0x03, 0x32, 0x51, 0xbb, 0x69, 0x44, 0xa0, 0x80, 0x13, 0x88, 0xc0, 0xe1, 0x85, 0x08, 0x1a, 0x54, 0xd0, 0xe2, 0x30, 0x0f, 0x45, 0x0e, 0xd5, 0x84, 0x0b, 0xe2, 0x64, 0x6c, 0x09, 0xb5, 0x91, 0x00,
0x22, 0x93, 0x09, 0x4a, 0xfa, 0x95, 0x2c, 0x69, 0x36, 0x6a, 0x2c, 0x8d, 0x07, 0x14, 0x5c, 0x0e, 0xcc, 0x88, 0x2d, 0x53, 0xe0, 0x05, 0xe3, 0x47, 0x12, 0x7d, 0x72, 0x97, 0x00, 0xf8, 0xd8, 0xf0,
0xa0, 0xe2, 0xfb, 0x2b, 0x53, 0xee, 0xf5, 0x61, 0x92, 0x06, 0x30, 0x43, 0xc2, 0x2d, 0x19, 0x34, 0x0f, 0x49, 0x3f, 0xef, 0xe5, 0x11, 0x81, 0x02, 0xce, 0x21, 0x02, 0x87, 0x17, 0x22, 0xe8, 0xd0,
0x1c, 0x6e, 0x83, 0x4d, 0x27, 0x4a, 0x37, 0xac, 0x8c, 0x0a, 0xb7, 0xe1, 0x9d, 0xac, 0x7c, 0x66, 0x88, 0xf5, 0x45, 0x28, 0xed, 0x37, 0xba, 0xb4, 0xce, 0xac, 0xb3, 0x3a, 0x1b, 0x50, 0x70, 0x39,
0xf5, 0xdf, 0x39, 0x28, 0xf8, 0x3f, 0x33, 0xbc, 0x86, 0x8e, 0xec, 0x35, 0xb4, 0x48, 0x9f, 0xc1, 0x84, 0x46, 0x60, 0xaf, 0x4c, 0xb9, 0x2f, 0x66, 0x49, 0x1a, 0xc2, 0x64, 0xb8, 0x5b, 0x3a, 0x68,
0x4c, 0xec, 0x45, 0x52, 0x62, 0x06, 0x4d, 0x7e, 0xb5, 0x34, 0x2e, 0x05, 0x3c, 0xe6, 0xff, 0xa7, 0xd4, 0xdd, 0x26, 0x4b, 0x5e, 0x94, 0xaf, 0x55, 0x9a, 0xe6, 0x6e, 0xd9, 0x75, 0xb4, 0x72, 0x0e,
0x20, 0xb2, 0xe5, 0xb5, 0x61, 0x6d, 0x56, 0x3c, 0x51, 0x8e, 0x21, 0xfc, 0xd2, 0xd3, 0xe2, 0x43, 0xf5, 0xa0, 0xcc, 0x8a, 0x62, 0xa4, 0xa4, 0x0a, 0x1b, 0x54, 0xcc, 0xd3, 0x22, 0xa0, 0xa8, 0xaa,
0x80, 0x50, 0xda, 0x1a, 0x7d, 0x93, 0x44, 0x22, 0x71, 0x8c, 0xc0, 0x6b, 0x77, 0x7e, 0x78, 0xbb, 0x03, 0xa2, 0xf7, 0x69, 0x2e, 0x67, 0xdb, 0x4c, 0x69, 0x99, 0x9a, 0x88, 0x00, 0x65, 0x24, 0xd8,
0xab, 0x7b, 0x07, 0xfd, 0x3d, 0xf2, 0x65, 0x85, 0x81, 0xbe, 0xab, 0xdb, 0xfc, 0xaf, 0x15, 0xdf, 0x0c, 0x58, 0xc1, 0x6c, 0x97, 0x15, 0xaf, 0xc4, 0x9f, 0xf9, 0x49, 0xd2, 0x6a, 0x9f, 0x68, 0xe5,
0xa2, 0x2b, 0x14, 0x7b, 0x85, 0x30, 0xe8, 0xed, 0xed, 0x4d, 0xd1, 0xd5, 0x9d, 0xff, 0x05, 0x00, 0x3f, 0xc3, 0x8f, 0xd7, 0x7e, 0x5f, 0x82, 0x4a, 0xf0, 0xc3, 0xcf, 0x13, 0xa8, 0x52, 0x9f, 0x40,
0x00, 0xff, 0xff, 0x08, 0xcc, 0x9c, 0x5d, 0xc9, 0x32, 0x00, 0x00, 0xd9, 0xf8, 0x09, 0x2c, 0x26, 0xde, 0x88, 0xa5, 0x66, 0x95, 0xf4, 0x77, 0x64, 0xb3, 0xc2, 0xe2,
0xc7, 0xfc, 0x3f, 0x47, 0x44, 0x06, 0x79, 0x21, 0xab, 0xf4, 0x4c, 0x26, 0x8f, 0x19, 0x84, 0x1f,
0x7b, 0xaa, 0xb8, 0x07, 0x10, 0x09, 0xe5, 0xd3, 0x67, 0x7b, 0x24, 0x3a, 0xcd, 0x12, 0xf8, 0xfd,
0xb9, 0x9c, 0x6d, 0x3a, 0xb1, 0xf5, 0x3b, 0xdf, 0x7b, 0x75, 0x68, 0xf8, 0x87, 0xe3, 0x7d, 0xf2,
0xe5, 0x36, 0x03, 0x7d, 0xd9, 0x70, 0xf8, 0x5f, 0xb7, 0x03, 0xf3, 0xb8, 0x4d, 0xb1, 0x6f, 0x13,
0x69, 0x47, 0xfb, 0xfb, 0x65, 0xba, 0xba, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x6d,
0x1a, 0x78, 0xa8, 0x34, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -3391,6 +3453,10 @@ type DataCoordClient interface {
WatchChannels(ctx context.Context, in *WatchChannelsRequest, opts ...grpc.CallOption) (*WatchChannelsResponse, error) WatchChannels(ctx context.Context, in *WatchChannelsRequest, opts ...grpc.CallOption) (*WatchChannelsResponse, error)
GetFlushState(ctx context.Context, in *milvuspb.GetFlushStateRequest, opts ...grpc.CallOption) (*milvuspb.GetFlushStateResponse, error) GetFlushState(ctx context.Context, in *milvuspb.GetFlushStateRequest, opts ...grpc.CallOption) (*milvuspb.GetFlushStateResponse, error)
DropVirtualChannel(ctx context.Context, in *DropVirtualChannelRequest, opts ...grpc.CallOption) (*DropVirtualChannelResponse, error) DropVirtualChannel(ctx context.Context, in *DropVirtualChannelRequest, opts ...grpc.CallOption) (*DropVirtualChannelResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(ctx context.Context, in *milvuspb.ImportRequest, opts ...grpc.CallOption) (*milvuspb.ImportResponse, error)
GetImportState(ctx context.Context, in *milvuspb.GetImportStateRequest, opts ...grpc.CallOption) (*milvuspb.GetImportStateResponse, error)
CompleteImport(ctx context.Context, in *ImportResult, opts ...grpc.CallOption) (*commonpb.Status, error)
} }
type dataCoordClient struct { type dataCoordClient struct {
@ -3599,6 +3665,33 @@ func (c *dataCoordClient) DropVirtualChannel(ctx context.Context, in *DropVirtua
return out, nil return out, nil
} }
func (c *dataCoordClient) Import(ctx context.Context, in *milvuspb.ImportRequest, opts ...grpc.CallOption) (*milvuspb.ImportResponse, error) {
out := new(milvuspb.ImportResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/Import", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *dataCoordClient) GetImportState(ctx context.Context, in *milvuspb.GetImportStateRequest, opts ...grpc.CallOption) (*milvuspb.GetImportStateResponse, error) {
out := new(milvuspb.GetImportStateResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/GetImportState", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *dataCoordClient) CompleteImport(ctx context.Context, in *ImportResult, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/CompleteImport", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DataCoordServer is the server API for DataCoord service. // DataCoordServer is the server API for DataCoord service.
type DataCoordServer interface { type DataCoordServer interface {
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error) GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
@ -3624,6 +3717,10 @@ type DataCoordServer interface {
WatchChannels(context.Context, *WatchChannelsRequest) (*WatchChannelsResponse, error) WatchChannels(context.Context, *WatchChannelsRequest) (*WatchChannelsResponse, error)
GetFlushState(context.Context, *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error) GetFlushState(context.Context, *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error)
DropVirtualChannel(context.Context, *DropVirtualChannelRequest) (*DropVirtualChannelResponse, error) DropVirtualChannel(context.Context, *DropVirtualChannelRequest) (*DropVirtualChannelResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(context.Context, *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error)
GetImportState(context.Context, *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error)
CompleteImport(context.Context, *ImportResult) (*commonpb.Status, error)
} }
// UnimplementedDataCoordServer can be embedded to have forward compatible implementations. // UnimplementedDataCoordServer can be embedded to have forward compatible implementations.
@ -3696,6 +3793,15 @@ func (*UnimplementedDataCoordServer) GetFlushState(ctx context.Context, req *mil
func (*UnimplementedDataCoordServer) DropVirtualChannel(ctx context.Context, req *DropVirtualChannelRequest) (*DropVirtualChannelResponse, error) { func (*UnimplementedDataCoordServer) DropVirtualChannel(ctx context.Context, req *DropVirtualChannelRequest) (*DropVirtualChannelResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DropVirtualChannel not implemented") return nil, status.Errorf(codes.Unimplemented, "method DropVirtualChannel not implemented")
} }
func (*UnimplementedDataCoordServer) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Import not implemented")
}
func (*UnimplementedDataCoordServer) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetImportState not implemented")
}
func (*UnimplementedDataCoordServer) CompleteImport(ctx context.Context, req *ImportResult) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method CompleteImport not implemented")
}
func RegisterDataCoordServer(s *grpc.Server, srv DataCoordServer) { func RegisterDataCoordServer(s *grpc.Server, srv DataCoordServer) {
s.RegisterService(&_DataCoord_serviceDesc, srv) s.RegisterService(&_DataCoord_serviceDesc, srv)
@ -4097,6 +4203,60 @@ func _DataCoord_DropVirtualChannel_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _DataCoord_Import_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.ImportRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataCoordServer).Import(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataCoord/Import",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataCoordServer).Import(ctx, req.(*milvuspb.ImportRequest))
}
return interceptor(ctx, in, info, handler)
}
func _DataCoord_GetImportState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.GetImportStateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataCoordServer).GetImportState(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataCoord/GetImportState",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataCoordServer).GetImportState(ctx, req.(*milvuspb.GetImportStateRequest))
}
return interceptor(ctx, in, info, handler)
}
func _DataCoord_CompleteImport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ImportResult)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataCoordServer).CompleteImport(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataCoord/CompleteImport",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataCoordServer).CompleteImport(ctx, req.(*ImportResult))
}
return interceptor(ctx, in, info, handler)
}
var _DataCoord_serviceDesc = grpc.ServiceDesc{ var _DataCoord_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.data.DataCoord", ServiceName: "milvus.proto.data.DataCoord",
HandlerType: (*DataCoordServer)(nil), HandlerType: (*DataCoordServer)(nil),
@ -4189,6 +4349,18 @@ var _DataCoord_serviceDesc = grpc.ServiceDesc{
MethodName: "DropVirtualChannel", MethodName: "DropVirtualChannel",
Handler: _DataCoord_DropVirtualChannel_Handler, Handler: _DataCoord_DropVirtualChannel_Handler,
}, },
{
MethodName: "Import",
Handler: _DataCoord_Import_Handler,
},
{
MethodName: "GetImportState",
Handler: _DataCoord_GetImportState_Handler,
},
{
MethodName: "CompleteImport",
Handler: _DataCoord_CompleteImport_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "data_coord.proto", Metadata: "data_coord.proto",
@ -4205,6 +4377,8 @@ type DataNodeClient interface {
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy // 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) GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error)
Compaction(ctx context.Context, in *CompactionPlan, opts ...grpc.CallOption) (*commonpb.Status, error) Compaction(ctx context.Context, in *CompactionPlan, opts ...grpc.CallOption) (*commonpb.Status, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(ctx context.Context, in *milvuspb.ImportRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
} }
type dataNodeClient struct { type dataNodeClient struct {
@ -4269,6 +4443,15 @@ func (c *dataNodeClient) Compaction(ctx context.Context, in *CompactionPlan, opt
return out, nil return out, nil
} }
func (c *dataNodeClient) Import(ctx context.Context, in *milvuspb.ImportRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataNode/Import", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DataNodeServer is the server API for DataNode service. // DataNodeServer is the server API for DataNode service.
type DataNodeServer interface { type DataNodeServer interface {
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error) GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
@ -4278,6 +4461,8 @@ type DataNodeServer interface {
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
Compaction(context.Context, *CompactionPlan) (*commonpb.Status, error) Compaction(context.Context, *CompactionPlan) (*commonpb.Status, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(context.Context, *milvuspb.ImportRequest) (*commonpb.Status, error)
} }
// UnimplementedDataNodeServer can be embedded to have forward compatible implementations. // UnimplementedDataNodeServer can be embedded to have forward compatible implementations.
@ -4302,6 +4487,9 @@ func (*UnimplementedDataNodeServer) GetMetrics(ctx context.Context, req *milvusp
func (*UnimplementedDataNodeServer) Compaction(ctx context.Context, req *CompactionPlan) (*commonpb.Status, error) { func (*UnimplementedDataNodeServer) Compaction(ctx context.Context, req *CompactionPlan) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method Compaction not implemented") return nil, status.Errorf(codes.Unimplemented, "method Compaction not implemented")
} }
func (*UnimplementedDataNodeServer) Import(ctx context.Context, req *milvuspb.ImportRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method Import not implemented")
}
func RegisterDataNodeServer(s *grpc.Server, srv DataNodeServer) { func RegisterDataNodeServer(s *grpc.Server, srv DataNodeServer) {
s.RegisterService(&_DataNode_serviceDesc, srv) s.RegisterService(&_DataNode_serviceDesc, srv)
@ -4415,6 +4603,24 @@ func _DataNode_Compaction_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _DataNode_Import_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.ImportRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataNodeServer).Import(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataNode/Import",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataNodeServer).Import(ctx, req.(*milvuspb.ImportRequest))
}
return interceptor(ctx, in, info, handler)
}
var _DataNode_serviceDesc = grpc.ServiceDesc{ var _DataNode_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.data.DataNode", ServiceName: "milvus.proto.data.DataNode",
HandlerType: (*DataNodeServer)(nil), HandlerType: (*DataNodeServer)(nil),
@ -4443,6 +4649,10 @@ var _DataNode_serviceDesc = grpc.ServiceDesc{
MethodName: "Compaction", MethodName: "Compaction",
Handler: _DataNode_Compaction_Handler, Handler: _DataNode_Compaction_Handler,
}, },
{
MethodName: "Import",
Handler: _DataNode_Import_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "data_coord.proto", Metadata: "data_coord.proto",

View File

@ -56,6 +56,10 @@ service MilvusService {
rpc GetCompactionState(GetCompactionStateRequest) returns (GetCompactionStateResponse) {} rpc GetCompactionState(GetCompactionStateRequest) returns (GetCompactionStateResponse) {}
rpc ManualCompaction(ManualCompactionRequest) returns (ManualCompactionResponse) {} rpc ManualCompaction(ManualCompactionRequest) returns (ManualCompactionResponse) {}
rpc GetCompactionStateWithPlans(GetCompactionPlansRequest) returns (GetCompactionPlansResponse) {} rpc GetCompactionStateWithPlans(GetCompactionPlansRequest) returns (GetCompactionPlansResponse) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
rpc Import(ImportRequest) returns (ImportResponse) {}
rpc GetImportState(GetImportStateRequest) returns (GetImportStateResponse) {}
} }
message CreateAliasRequest { message CreateAliasRequest {
@ -783,6 +787,29 @@ message GetFlushStateResponse {
bool flushed = 2; bool flushed = 2;
} }
message ImportRequest {
string collection_name = 1; // target collection
string partition_name = 2; // target partition
bool row_based = 3; // the file is row-based or column-based
repeated string files = 4; // file paths to be imported
repeated common.KeyValuePair options = 5; // import options
}
message ImportResponse {
common.Status status = 1;
repeated int64 tasks = 2; // id array of import tasks
}
message GetImportStateRequest {
int64 task = 1; // id of an import task
}
message GetImportStateResponse {
common.Status status = 1;
common.ImportState state = 2; // is this import task finished or not
int64 row_count = 3; // if the task is finished, this value is how many rows are imported. if the task is not finished, this value is how many rows are parsed.
}
service ProxyService { service ProxyService {
rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {}
} }

View File

@ -4945,6 +4945,218 @@ func (m *GetFlushStateResponse) GetFlushed() bool {
return false return false
} }
type ImportRequest struct {
CollectionName string `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
PartitionName string `protobuf:"bytes,2,opt,name=partition_name,json=partitionName,proto3" json:"partition_name,omitempty"`
RowBased bool `protobuf:"varint,3,opt,name=row_based,json=rowBased,proto3" json:"row_based,omitempty"`
Files []string `protobuf:"bytes,4,rep,name=files,proto3" json:"files,omitempty"`
Options []*commonpb.KeyValuePair `protobuf:"bytes,5,rep,name=options,proto3" json:"options,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ImportRequest) Reset() { *m = ImportRequest{} }
func (m *ImportRequest) String() string { return proto.CompactTextString(m) }
func (*ImportRequest) ProtoMessage() {}
func (*ImportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{76}
}
func (m *ImportRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportRequest.Unmarshal(m, b)
}
func (m *ImportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ImportRequest.Marshal(b, m, deterministic)
}
func (m *ImportRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ImportRequest.Merge(m, src)
}
func (m *ImportRequest) XXX_Size() int {
return xxx_messageInfo_ImportRequest.Size(m)
}
func (m *ImportRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ImportRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ImportRequest proto.InternalMessageInfo
func (m *ImportRequest) GetCollectionName() string {
if m != nil {
return m.CollectionName
}
return ""
}
func (m *ImportRequest) GetPartitionName() string {
if m != nil {
return m.PartitionName
}
return ""
}
func (m *ImportRequest) GetRowBased() bool {
if m != nil {
return m.RowBased
}
return false
}
func (m *ImportRequest) GetFiles() []string {
if m != nil {
return m.Files
}
return nil
}
func (m *ImportRequest) GetOptions() []*commonpb.KeyValuePair {
if m != nil {
return m.Options
}
return nil
}
type ImportResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Tasks []int64 `protobuf:"varint,2,rep,packed,name=tasks,proto3" json:"tasks,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ImportResponse) Reset() { *m = ImportResponse{} }
func (m *ImportResponse) String() string { return proto.CompactTextString(m) }
func (*ImportResponse) ProtoMessage() {}
func (*ImportResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{77}
}
func (m *ImportResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResponse.Unmarshal(m, b)
}
func (m *ImportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ImportResponse.Marshal(b, m, deterministic)
}
func (m *ImportResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ImportResponse.Merge(m, src)
}
func (m *ImportResponse) XXX_Size() int {
return xxx_messageInfo_ImportResponse.Size(m)
}
func (m *ImportResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ImportResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ImportResponse proto.InternalMessageInfo
func (m *ImportResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *ImportResponse) GetTasks() []int64 {
if m != nil {
return m.Tasks
}
return nil
}
type GetImportStateRequest struct {
Task int64 `protobuf:"varint,1,opt,name=task,proto3" json:"task,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetImportStateRequest) Reset() { *m = GetImportStateRequest{} }
func (m *GetImportStateRequest) String() string { return proto.CompactTextString(m) }
func (*GetImportStateRequest) ProtoMessage() {}
func (*GetImportStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{78}
}
func (m *GetImportStateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetImportStateRequest.Unmarshal(m, b)
}
func (m *GetImportStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetImportStateRequest.Marshal(b, m, deterministic)
}
func (m *GetImportStateRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetImportStateRequest.Merge(m, src)
}
func (m *GetImportStateRequest) XXX_Size() int {
return xxx_messageInfo_GetImportStateRequest.Size(m)
}
func (m *GetImportStateRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetImportStateRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetImportStateRequest proto.InternalMessageInfo
func (m *GetImportStateRequest) GetTask() int64 {
if m != nil {
return m.Task
}
return 0
}
type GetImportStateResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
State commonpb.ImportState `protobuf:"varint,2,opt,name=state,proto3,enum=milvus.proto.common.ImportState" json:"state,omitempty"`
RowCount int64 `protobuf:"varint,3,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetImportStateResponse) Reset() { *m = GetImportStateResponse{} }
func (m *GetImportStateResponse) String() string { return proto.CompactTextString(m) }
func (*GetImportStateResponse) ProtoMessage() {}
func (*GetImportStateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{79}
}
func (m *GetImportStateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetImportStateResponse.Unmarshal(m, b)
}
func (m *GetImportStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetImportStateResponse.Marshal(b, m, deterministic)
}
func (m *GetImportStateResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetImportStateResponse.Merge(m, src)
}
func (m *GetImportStateResponse) XXX_Size() int {
return xxx_messageInfo_GetImportStateResponse.Size(m)
}
func (m *GetImportStateResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetImportStateResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetImportStateResponse proto.InternalMessageInfo
func (m *GetImportStateResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetImportStateResponse) GetState() commonpb.ImportState {
if m != nil {
return m.State
}
return commonpb.ImportState_ImportPending
}
func (m *GetImportStateResponse) GetRowCount() int64 {
if m != nil {
return m.RowCount
}
return 0
}
func init() { func init() {
proto.RegisterEnum("milvus.proto.milvus.ShowType", ShowType_name, ShowType_value) proto.RegisterEnum("milvus.proto.milvus.ShowType", ShowType_name, ShowType_value)
proto.RegisterEnum("milvus.proto.milvus.PlaceholderType", PlaceholderType_name, PlaceholderType_value) proto.RegisterEnum("milvus.proto.milvus.PlaceholderType", PlaceholderType_name, PlaceholderType_value)
@ -5025,238 +5237,252 @@ func init() {
proto.RegisterType((*CompactionMergeInfo)(nil), "milvus.proto.milvus.CompactionMergeInfo") proto.RegisterType((*CompactionMergeInfo)(nil), "milvus.proto.milvus.CompactionMergeInfo")
proto.RegisterType((*GetFlushStateRequest)(nil), "milvus.proto.milvus.GetFlushStateRequest") proto.RegisterType((*GetFlushStateRequest)(nil), "milvus.proto.milvus.GetFlushStateRequest")
proto.RegisterType((*GetFlushStateResponse)(nil), "milvus.proto.milvus.GetFlushStateResponse") proto.RegisterType((*GetFlushStateResponse)(nil), "milvus.proto.milvus.GetFlushStateResponse")
proto.RegisterType((*ImportRequest)(nil), "milvus.proto.milvus.ImportRequest")
proto.RegisterType((*ImportResponse)(nil), "milvus.proto.milvus.ImportResponse")
proto.RegisterType((*GetImportStateRequest)(nil), "milvus.proto.milvus.GetImportStateRequest")
proto.RegisterType((*GetImportStateResponse)(nil), "milvus.proto.milvus.GetImportStateResponse")
} }
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) } func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{ var fileDescriptor_02345ba45cc0e303 = []byte{
// 3609 bytes of a gzipped FileDescriptorProto // 3772 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3b, 0x4b, 0x73, 0x1b, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3b, 0x4d, 0x6f, 0x1c, 0xc7,
0xd1, 0x5c, 0x80, 0x78, 0x35, 0x00, 0x12, 0x1c, 0x52, 0x14, 0x04, 0xbd, 0xa8, 0xb5, 0x65, 0x51, 0x72, 0x9c, 0x5d, 0xee, 0x57, 0xed, 0x2e, 0xb9, 0x6c, 0x52, 0xd4, 0x6a, 0xf5, 0x45, 0xcd, 0xb3,
0x92, 0x25, 0x59, 0x94, 0x5f, 0x9f, 0xfc, 0x7d, 0x9f, 0x2d, 0x89, 0xb1, 0xc4, 0xb2, 0xa4, 0xd0, 0x9e, 0x28, 0xe9, 0x49, 0x7a, 0xa2, 0x6c, 0xbf, 0x17, 0x39, 0x89, 0x2d, 0x91, 0xb1, 0x44, 0x58,
0x4b, 0xdb, 0x29, 0xc7, 0xa5, 0x42, 0x2d, 0xb1, 0x43, 0x70, 0x4b, 0x8b, 0x5d, 0x78, 0x67, 0x20, 0x52, 0xe8, 0xa1, 0xed, 0xc0, 0x31, 0x84, 0xc1, 0x70, 0xa7, 0xb9, 0x1c, 0x70, 0x76, 0x66, 0x3d,
0x89, 0x3e, 0xb9, 0xca, 0x79, 0x54, 0xca, 0x8e, 0x5d, 0xa9, 0xa4, 0xf2, 0x38, 0x24, 0x87, 0x3c, 0xdd, 0x2b, 0x8a, 0x3e, 0x19, 0x70, 0x90, 0x20, 0xb0, 0x63, 0x23, 0x48, 0x90, 0x8f, 0x43, 0x72,
0x0e, 0x39, 0x24, 0x15, 0xc7, 0xa9, 0x24, 0x95, 0x4b, 0x72, 0xc8, 0x21, 0x87, 0x54, 0xe5, 0x71, 0x70, 0x92, 0x43, 0x0e, 0x09, 0xe2, 0x38, 0x48, 0x82, 0x5c, 0x92, 0x43, 0x80, 0xe4, 0x10, 0x20,
0xc9, 0x21, 0x97, 0xfc, 0x01, 0xff, 0x83, 0x1c, 0x52, 0xf3, 0xd8, 0xc5, 0xee, 0x62, 0x16, 0x04, 0x1f, 0x97, 0x1c, 0x72, 0xc9, 0x1f, 0xf0, 0x3f, 0xc8, 0x21, 0xe8, 0x8f, 0x99, 0x9d, 0x99, 0xed,
0x05, 0x2b, 0x24, 0x6f, 0x3b, 0x3d, 0xdd, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0xbd, 0x50, 0x59, 0x2e, 0xb5, 0xd6, 0x23, 0x79, 0x9b, 0xa9, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xaa, 0xee, 0xae,
0xe9, 0xd8, 0xce, 0xbd, 0x1e, 0x39, 0xdf, 0xf5, 0x3d, 0xea, 0xa1, 0xd9, 0x68, 0xeb, 0xbc, 0x68, 0xae, 0x86, 0x5a, 0xd7, 0x71, 0x9f, 0xf5, 0xc9, 0xcd, 0x5e, 0xe0, 0x53, 0x1f, 0xcd, 0xc7, 0xff,
0x34, 0x2a, 0x2d, 0xaf, 0xd3, 0xf1, 0x5c, 0x01, 0x6c, 0x54, 0x48, 0x6b, 0x13, 0x77, 0x4c, 0xd1, 0x6e, 0x8a, 0x9f, 0x56, 0xad, 0xed, 0x77, 0xbb, 0xbe, 0x27, 0x80, 0xad, 0x1a, 0x69, 0xef, 0xe0,
0xd2, 0x7f, 0xa0, 0x01, 0xba, 0xe6, 0x63, 0x93, 0xe2, 0x2b, 0x8e, 0x6d, 0x12, 0x03, 0xbf, 0xdd, 0xae, 0x25, 0xfe, 0xf4, 0x3f, 0xd6, 0x00, 0xad, 0x06, 0xd8, 0xa2, 0xf8, 0x9e, 0xeb, 0x58, 0xc4,
0xc3, 0x84, 0xa2, 0xa7, 0x60, 0x72, 0xdd, 0x24, 0xb8, 0xae, 0x2d, 0x68, 0x8b, 0xe5, 0xa5, 0x23, 0xc0, 0x1f, 0xf7, 0x31, 0xa1, 0xe8, 0xc7, 0x30, 0xbd, 0x65, 0x11, 0xdc, 0xd4, 0x96, 0xb4, 0xe5,
0xe7, 0x63, 0x6c, 0x25, 0xbb, 0x5b, 0xa4, 0x7d, 0xd5, 0x24, 0xd8, 0xe0, 0x98, 0xe8, 0x20, 0x14, 0xea, 0xca, 0xb9, 0x9b, 0x09, 0xb6, 0x92, 0xdd, 0x63, 0xd2, 0xb9, 0x6f, 0x11, 0x6c, 0x70, 0x4c,
0xac, 0xf5, 0xa6, 0x6b, 0x76, 0x70, 0x3d, 0xb3, 0xa0, 0x2d, 0x96, 0x8c, 0xbc, 0xb5, 0x7e, 0xdb, 0x74, 0x1a, 0x4a, 0xf6, 0x96, 0xe9, 0x59, 0x5d, 0xdc, 0xcc, 0x2d, 0x69, 0xcb, 0x15, 0xa3, 0x68,
0xec, 0x60, 0x74, 0x0a, 0xa6, 0x5b, 0x9e, 0xe3, 0xe0, 0x16, 0xb5, 0x3d, 0x57, 0x20, 0x64, 0x39, 0x6f, 0x3d, 0xb1, 0xba, 0x18, 0x5d, 0x81, 0xd9, 0xb6, 0xef, 0xba, 0xb8, 0x4d, 0x1d, 0xdf, 0x13,
0xc2, 0x54, 0x1f, 0xcc, 0x11, 0xe7, 0x20, 0x67, 0x32, 0x19, 0xea, 0x93, 0xbc, 0x5b, 0x34, 0x74, 0x08, 0x79, 0x8e, 0x30, 0x33, 0x00, 0x73, 0xc4, 0x05, 0x28, 0x58, 0x4c, 0x86, 0xe6, 0x34, 0x6f,
0x02, 0xb5, 0x65, 0xdf, 0xeb, 0x3e, 0x2a, 0xe9, 0xc2, 0x41, 0xb3, 0xd1, 0x41, 0xbf, 0xaf, 0xc1, 0x16, 0x3f, 0x3a, 0x81, 0xc6, 0x5a, 0xe0, 0xf7, 0x5e, 0x96, 0x74, 0x51, 0xa7, 0xf9, 0x78, 0xa7,
0xcc, 0x15, 0x87, 0x62, 0x7f, 0x8f, 0x2a, 0xe5, 0xbb, 0x19, 0x38, 0x28, 0x56, 0xed, 0x5a, 0x88, 0x7f, 0xa4, 0xc1, 0xdc, 0x3d, 0x97, 0xe2, 0xe0, 0x98, 0x2a, 0xe5, 0x0f, 0x72, 0x70, 0x5a, 0xcc,
0xbe, 0x9b, 0x52, 0xce, 0x43, 0x5e, 0x58, 0x15, 0x17, 0xb3, 0x62, 0xc8, 0x16, 0x3a, 0x0a, 0x40, 0xda, 0x6a, 0x84, 0x7e, 0x94, 0x52, 0x2e, 0x42, 0x51, 0x58, 0x15, 0x17, 0xb3, 0x66, 0xc8, 0x3f,
0x36, 0x4d, 0xdf, 0x22, 0x4d, 0xb7, 0xd7, 0xa9, 0xe7, 0x16, 0xb4, 0xc5, 0x9c, 0x51, 0x12, 0x90, 0x74, 0x1e, 0x80, 0xec, 0x58, 0x81, 0x4d, 0x4c, 0xaf, 0xdf, 0x6d, 0x16, 0x96, 0xb4, 0xe5, 0x82,
0xdb, 0xbd, 0x0e, 0x32, 0x60, 0xa6, 0xe5, 0xb9, 0xc4, 0x26, 0x14, 0xbb, 0xad, 0xad, 0xa6, 0x83, 0x51, 0x11, 0x90, 0x27, 0xfd, 0x2e, 0x32, 0x60, 0xae, 0xed, 0x7b, 0xc4, 0x21, 0x14, 0x7b, 0xed,
0xef, 0x61, 0xa7, 0x9e, 0x5f, 0xd0, 0x16, 0xa7, 0x96, 0x4e, 0x2a, 0xe5, 0xbe, 0xd6, 0xc7, 0xbe, 0x7d, 0xd3, 0xc5, 0xcf, 0xb0, 0xdb, 0x2c, 0x2e, 0x69, 0xcb, 0x33, 0x2b, 0x97, 0x95, 0x72, 0xaf,
0xc9, 0x90, 0x8d, 0x5a, 0x2b, 0x01, 0xd1, 0xdf, 0xd7, 0xe0, 0x00, 0x33, 0x98, 0x3d, 0xa1, 0x18, 0x0e, 0xb0, 0x1f, 0x31, 0x64, 0xa3, 0xd1, 0x4e, 0x41, 0xf4, 0xcf, 0x35, 0x38, 0xc5, 0x0c, 0xe6,
0xfd, 0xa7, 0x1a, 0xcc, 0xdd, 0x30, 0xc9, 0xde, 0x58, 0xa5, 0xa3, 0x00, 0xd4, 0xee, 0xe0, 0x26, 0x58, 0x28, 0x46, 0xff, 0x73, 0x0d, 0x16, 0x1e, 0x5a, 0xe4, 0x78, 0xcc, 0xd2, 0x79, 0x00, 0xea,
0xa1, 0x66, 0xa7, 0xcb, 0x57, 0x6a, 0xd2, 0x28, 0x31, 0xc8, 0x1a, 0x03, 0xe8, 0x6f, 0x42, 0xe5, 0x74, 0xb1, 0x49, 0xa8, 0xd5, 0xed, 0xf1, 0x99, 0x9a, 0x36, 0x2a, 0x0c, 0xb2, 0xc9, 0x00, 0xfa,
0xaa, 0xe7, 0x39, 0x06, 0x26, 0x5d, 0xcf, 0x25, 0x18, 0x5d, 0x82, 0x3c, 0xa1, 0x26, 0xed, 0x11, 0x87, 0x50, 0xbb, 0xef, 0xfb, 0xae, 0x81, 0x49, 0xcf, 0xf7, 0x08, 0x46, 0x77, 0xa0, 0x48, 0xa8,
0x29, 0xe4, 0x61, 0xa5, 0x90, 0x6b, 0x1c, 0xc5, 0x90, 0xa8, 0xcc, 0x5e, 0xef, 0x99, 0x4e, 0x4f, 0x45, 0xfb, 0x44, 0x0a, 0x79, 0x56, 0x29, 0xe4, 0x26, 0x47, 0x31, 0x24, 0x2a, 0xb3, 0xd7, 0x67,
0xc8, 0x58, 0x34, 0x44, 0x43, 0x7f, 0x0b, 0xa6, 0xd6, 0xa8, 0x6f, 0xbb, 0xed, 0xcf, 0x90, 0x79, 0x96, 0xdb, 0x17, 0x32, 0x96, 0x0d, 0xf1, 0xa3, 0x7f, 0x04, 0x33, 0x9b, 0x34, 0x70, 0xbc, 0xce,
0x29, 0x60, 0xfe, 0x77, 0x0d, 0x0e, 0x2d, 0x63, 0xd2, 0xf2, 0xed, 0xf5, 0x3d, 0xb2, 0x1d, 0x74, 0xf7, 0xc8, 0xbc, 0x12, 0x32, 0xff, 0x2f, 0x0d, 0xce, 0xac, 0x61, 0xd2, 0x0e, 0x9c, 0xad, 0x63,
0xa8, 0xf4, 0x21, 0x2b, 0xcb, 0x5c, 0xd5, 0x59, 0x23, 0x06, 0x4b, 0x2c, 0x46, 0x2e, 0xb9, 0x18, 0xe2, 0x0e, 0x3a, 0xd4, 0x06, 0x90, 0xf5, 0x35, 0xae, 0xea, 0xbc, 0x91, 0x80, 0xa5, 0x26, 0xa3,
0xef, 0xe6, 0xa0, 0xa1, 0x9a, 0xd4, 0x38, 0xea, 0xfb, 0xbf, 0x70, 0x97, 0x66, 0x38, 0x51, 0x62, 0x90, 0x9e, 0x8c, 0x4f, 0x0b, 0xd0, 0x52, 0x0d, 0x6a, 0x12, 0xf5, 0xfd, 0x42, 0xe4, 0xa5, 0x39,
0x8f, 0xc9, 0x73, 0xa1, 0x3f, 0xda, 0x1a, 0x07, 0x84, 0x9b, 0x39, 0x39, 0xab, 0xac, 0x62, 0x56, 0x4e, 0x94, 0xf2, 0x31, 0xb9, 0x2e, 0x0c, 0x7a, 0xdb, 0xe4, 0x80, 0xc8, 0x99, 0xd3, 0xa3, 0xca,
0x4b, 0x70, 0xe0, 0x9e, 0xed, 0xd3, 0x9e, 0xe9, 0x34, 0x5b, 0x9b, 0xa6, 0xeb, 0x62, 0x87, 0xeb, 0x2b, 0x46, 0xb5, 0x02, 0xa7, 0x9e, 0x39, 0x01, 0xed, 0x5b, 0xae, 0xd9, 0xde, 0xb1, 0x3c, 0x0f,
0x89, 0xb9, 0xaf, 0xec, 0x62, 0xc9, 0x98, 0x95, 0x9d, 0xd7, 0x44, 0x1f, 0x53, 0x16, 0x41, 0x4f, 0xbb, 0x5c, 0x4f, 0x2c, 0x7c, 0xe5, 0x97, 0x2b, 0xc6, 0xbc, 0x6c, 0x5c, 0x15, 0x6d, 0x4c, 0x59,
0xc3, 0x7c, 0x77, 0x73, 0x8b, 0xd8, 0xad, 0x01, 0xa2, 0x1c, 0x27, 0x9a, 0x0b, 0x7a, 0x63, 0x54, 0x04, 0xbd, 0x0a, 0x8b, 0xbd, 0x9d, 0x7d, 0xe2, 0xb4, 0x87, 0x88, 0x0a, 0x9c, 0x68, 0x21, 0x6c,
0x67, 0x61, 0xa6, 0xc5, 0x3d, 0xa0, 0xd5, 0x64, 0x5a, 0x13, 0x6a, 0xcc, 0x73, 0x35, 0xd6, 0x64, 0x4d, 0x50, 0x5d, 0x87, 0xb9, 0x36, 0x8f, 0x80, 0xb6, 0xc9, 0xb4, 0x26, 0xd4, 0x58, 0xe4, 0x6a,
0xc7, 0x6b, 0x01, 0x9c, 0x89, 0x15, 0x20, 0xf7, 0x68, 0x2b, 0x42, 0x50, 0xe0, 0x04, 0xb3, 0xb2, 0x6c, 0xc8, 0x86, 0xf7, 0x42, 0x38, 0x13, 0x2b, 0x44, 0xee, 0xd3, 0x76, 0x8c, 0xa0, 0xc4, 0x09,
0xf3, 0x75, 0xda, 0xea, 0xd3, 0xc4, 0x7d, 0x57, 0x31, 0xe9, 0xbb, 0xea, 0x50, 0xe0, 0xbe, 0x18, 0xe6, 0x65, 0xe3, 0xfb, 0xb4, 0x3d, 0xa0, 0x49, 0xc6, 0xae, 0x72, 0x3a, 0x76, 0x35, 0xa1, 0xc4,
0x93, 0x7a, 0x89, 0x8b, 0x19, 0x34, 0xd1, 0x0a, 0x4c, 0x13, 0x6a, 0xfa, 0xb4, 0xd9, 0xf5, 0x88, 0x63, 0x31, 0x26, 0xcd, 0x0a, 0x17, 0x33, 0xfc, 0x45, 0xeb, 0x30, 0x4b, 0xa8, 0x15, 0x50, 0xb3,
0xcd, 0xf4, 0x42, 0xea, 0xb0, 0x90, 0x5d, 0x2c, 0x2f, 0x2d, 0x28, 0x17, 0xe9, 0x15, 0xbc, 0xb5, 0xe7, 0x13, 0x87, 0xe9, 0x85, 0x34, 0x61, 0x29, 0xbf, 0x5c, 0x5d, 0x59, 0x52, 0x4e, 0xd2, 0x3b,
0x6c, 0x52, 0x73, 0xd5, 0xb4, 0x7d, 0x63, 0x8a, 0x13, 0xae, 0x06, 0x74, 0x6a, 0x07, 0x59, 0x1e, 0x78, 0x7f, 0xcd, 0xa2, 0xd6, 0x86, 0xe5, 0x04, 0xc6, 0x0c, 0x27, 0xdc, 0x08, 0xe9, 0xd4, 0x01,
0xcb, 0x41, 0xaa, 0xac, 0xb8, 0xa2, 0xf4, 0x5d, 0xcc, 0x93, 0xde, 0xf4, 0x4c, 0x6b, 0x6f, 0x78, 0xb2, 0x3a, 0x51, 0x80, 0x54, 0x59, 0x71, 0x4d, 0x19, 0xbb, 0x58, 0x24, 0x7d, 0xe4, 0x5b, 0xf6,
0xd2, 0x0f, 0x35, 0xa8, 0x1b, 0xd8, 0xc1, 0x26, 0xd9, 0x1b, 0x9b, 0x5c, 0xff, 0x96, 0x06, 0xc7, 0xf1, 0x88, 0xa4, 0x5f, 0x6a, 0xd0, 0x34, 0xb0, 0x8b, 0x2d, 0x72, 0x3c, 0x9c, 0x5c, 0xff, 0x5d,
0xae, 0x63, 0x1a, 0xd9, 0x2e, 0xd4, 0xa4, 0x36, 0xa1, 0x76, 0x6b, 0x37, 0x03, 0x06, 0xfd, 0x23, 0x0d, 0x2e, 0x3c, 0xc0, 0x34, 0xe6, 0x2e, 0xd4, 0xa2, 0x0e, 0xa1, 0x4e, 0xfb, 0x28, 0x37, 0x0c,
0x0d, 0x8e, 0xa7, 0x8a, 0x35, 0x8e, 0xf7, 0x78, 0x0e, 0x72, 0xec, 0x8b, 0xd4, 0x33, 0xdc, 0x98, 0xfa, 0x57, 0x1a, 0x5c, 0xcc, 0x14, 0x6b, 0x92, 0xe8, 0xf1, 0x13, 0x28, 0xb0, 0x2f, 0xd2, 0xcc,
0x4f, 0xa4, 0x19, 0xf3, 0x1b, 0xcc, 0x29, 0x73, 0x6b, 0x16, 0xf8, 0xfa, 0xbf, 0x34, 0x98, 0x5f, 0x71, 0x63, 0xbe, 0x94, 0x65, 0xcc, 0x1f, 0xb0, 0xa0, 0xcc, 0xad, 0x59, 0xe0, 0xeb, 0xff, 0xab,
0xdb, 0xf4, 0xee, 0xf7, 0x45, 0x7a, 0x14, 0x0a, 0x8a, 0xfb, 0xd3, 0x6c, 0xc2, 0x9f, 0xa2, 0x8b, 0xc1, 0xe2, 0xe6, 0x8e, 0xbf, 0x37, 0x10, 0xe9, 0x65, 0x28, 0x28, 0x19, 0x4f, 0xf3, 0xa9, 0x78,
0x30, 0x49, 0xb7, 0xba, 0x98, 0xbb, 0xe2, 0xa9, 0xa5, 0xa3, 0xe7, 0x15, 0x71, 0xf2, 0x79, 0x26, 0x8a, 0x6e, 0xc3, 0x34, 0xdd, 0xef, 0x61, 0x1e, 0x8a, 0x67, 0x56, 0xce, 0xdf, 0x54, 0xec, 0x93,
0xe4, 0x6b, 0x5b, 0x5d, 0x6c, 0x70, 0x54, 0x74, 0x1a, 0x6a, 0x09, 0x95, 0x07, 0x1e, 0x69, 0x3a, 0x6f, 0x32, 0x21, 0xdf, 0xdb, 0xef, 0x61, 0x83, 0xa3, 0xa2, 0xab, 0xd0, 0x48, 0xa9, 0x3c, 0x8c,
0xae, 0x73, 0xa2, 0xff, 0x36, 0x03, 0x07, 0x07, 0xa6, 0x38, 0x8e, 0xb2, 0x55, 0x63, 0x67, 0x94, 0x48, 0xb3, 0x49, 0x9d, 0x13, 0xfd, 0xef, 0x73, 0x70, 0x7a, 0x68, 0x88, 0x93, 0x28, 0x5b, 0xd5,
0x63, 0xa3, 0x93, 0x10, 0x31, 0x81, 0xa6, 0x6d, 0xb1, 0x50, 0x36, 0xbb, 0x98, 0x35, 0xaa, 0x11, 0x77, 0x4e, 0xd9, 0x37, 0xba, 0x0c, 0x31, 0x13, 0x30, 0x1d, 0x9b, 0x6d, 0x65, 0xf3, 0xcb, 0x79,
0xc7, 0x6c, 0x11, 0x74, 0x0e, 0xd0, 0x80, 0xbf, 0x14, 0x6e, 0x79, 0xd2, 0x98, 0x49, 0x3a, 0x4c, 0xa3, 0x1e, 0x0b, 0xcc, 0x36, 0x41, 0x37, 0x00, 0x0d, 0xc5, 0x4b, 0x11, 0x96, 0xa7, 0x8d, 0xb9,
0xee, 0x94, 0x95, 0x1e, 0x53, 0xa8, 0x60, 0xd2, 0x98, 0x53, 0xb8, 0x4c, 0x82, 0x2e, 0xc2, 0x9c, 0x74, 0xc0, 0xe4, 0x41, 0x59, 0x19, 0x31, 0x85, 0x0a, 0xa6, 0x8d, 0x05, 0x45, 0xc8, 0x24, 0xe8,
0xed, 0xde, 0xc2, 0x1d, 0xcf, 0xdf, 0x6a, 0x76, 0xb1, 0xdf, 0xc2, 0x2e, 0x35, 0xdb, 0x98, 0xd4, 0x36, 0x2c, 0x38, 0xde, 0x63, 0xdc, 0xf5, 0x83, 0x7d, 0xb3, 0x87, 0x83, 0x36, 0xf6, 0xa8, 0xd5,
0xf3, 0x5c, 0xa2, 0xd9, 0xa0, 0x6f, 0xb5, 0xdf, 0xa5, 0x7f, 0xa2, 0xc1, 0xbc, 0x08, 0x65, 0x57, 0xc1, 0xa4, 0x59, 0xe4, 0x12, 0xcd, 0x87, 0x6d, 0x1b, 0x83, 0x26, 0xfd, 0x5b, 0x0d, 0x16, 0xc5,
0x4d, 0x9f, 0xda, 0xbb, 0x7d, 0x74, 0x9f, 0x84, 0xa9, 0x6e, 0x20, 0x87, 0xc0, 0x13, 0x81, 0x77, 0x56, 0x76, 0xc3, 0x0a, 0xa8, 0x73, 0xd4, 0x4b, 0xf7, 0x65, 0x98, 0xe9, 0x85, 0x72, 0x08, 0x3c,
0x35, 0x84, 0xf2, 0x5d, 0xf6, 0xb1, 0x06, 0x73, 0x2c, 0xca, 0xdc, 0x4f, 0x32, 0xff, 0x42, 0x83, 0xb1, 0xf1, 0xae, 0x47, 0x50, 0xee, 0x65, 0xdf, 0x68, 0xb0, 0xc0, 0x76, 0x99, 0x27, 0x49, 0xe6,
0xd9, 0x1b, 0x26, 0xd9, 0x4f, 0x22, 0xff, 0x4a, 0x1e, 0x41, 0xa1, 0xcc, 0xbb, 0x7a, 0x17, 0x3b, 0xbf, 0xd2, 0x60, 0xfe, 0xa1, 0x45, 0x4e, 0x92, 0xc8, 0x7f, 0x23, 0x97, 0xa0, 0x48, 0xe6, 0x23,
0x05, 0xd3, 0x71, 0xa1, 0x83, 0xb0, 0x66, 0x2a, 0x26, 0x35, 0xd1, 0x7f, 0xd3, 0x3f, 0xab, 0xf6, 0x3d, 0x8b, 0x5d, 0x81, 0xd9, 0xa4, 0xd0, 0xe1, 0xb6, 0x66, 0x26, 0x21, 0x35, 0xd1, 0xff, 0x6e,
0x99, 0xe4, 0xbf, 0xd3, 0xe0, 0xe8, 0x75, 0x4c, 0x43, 0xa9, 0xf7, 0xc4, 0x99, 0x36, 0xaa, 0xb5, 0xb0, 0x56, 0x9d, 0x30, 0xc9, 0xff, 0x41, 0x83, 0xf3, 0x0f, 0x30, 0x8d, 0xa4, 0x3e, 0x16, 0x6b,
0x7c, 0x28, 0x4e, 0x64, 0xa5, 0xf0, 0xbb, 0x72, 0xf2, 0xbd, 0x9f, 0x81, 0x03, 0xec, 0x58, 0xd8, 0xda, 0xb8, 0xd6, 0xf2, 0xa5, 0x58, 0x91, 0x95, 0xc2, 0x1f, 0xc9, 0xca, 0xf7, 0x79, 0x0e, 0x4e,
0x1b, 0x46, 0x30, 0xca, 0xad, 0x44, 0x61, 0x28, 0x39, 0x95, 0xa1, 0x84, 0xe7, 0x69, 0x7e, 0xe4, 0xb1, 0x65, 0xe1, 0x78, 0x18, 0xc1, 0x38, 0xa7, 0x12, 0x85, 0xa1, 0x14, 0x54, 0x86, 0x12, 0xad,
0xf3, 0x54, 0xff, 0x65, 0x46, 0xc4, 0x01, 0x51, 0x6d, 0x8c, 0xb3, 0x2c, 0x0a, 0x59, 0x33, 0x4a, 0xa7, 0xc5, 0xb1, 0xd7, 0x53, 0xfd, 0xaf, 0x73, 0x62, 0x1f, 0x10, 0xd7, 0xc6, 0x24, 0xd3, 0xa2,
0x59, 0x75, 0xa8, 0x84, 0x90, 0x95, 0xe5, 0xe0, 0x7c, 0x8c, 0xc1, 0xf6, 0xec, 0xf1, 0xf8, 0x81, 0x90, 0x35, 0xa7, 0x94, 0x55, 0x87, 0x5a, 0x04, 0x59, 0x5f, 0x0b, 0xd7, 0xc7, 0x04, 0xec, 0xd8,
0x06, 0xf3, 0xc1, 0x3d, 0x70, 0x0d, 0xb7, 0x3b, 0xd8, 0xa5, 0x0f, 0x6f, 0x43, 0x49, 0x0b, 0xc8, 0x2e, 0x8f, 0x5f, 0x68, 0xb0, 0x18, 0x9e, 0x03, 0x37, 0x71, 0xa7, 0x8b, 0x3d, 0xfa, 0xe2, 0x36,
0x28, 0x2c, 0xe0, 0x08, 0x94, 0x88, 0x18, 0x27, 0xbc, 0xe2, 0xf5, 0x01, 0xfa, 0xef, 0x35, 0x38, 0x94, 0xb6, 0x80, 0x9c, 0xc2, 0x02, 0xce, 0x41, 0x85, 0x88, 0x7e, 0xa2, 0x23, 0xde, 0x00, 0xa0,
0x38, 0x20, 0xce, 0x38, 0x8b, 0x58, 0x87, 0x82, 0xed, 0x5a, 0xf8, 0x41, 0x28, 0x4d, 0xd0, 0x64, 0xff, 0xa3, 0x06, 0xa7, 0x87, 0xc4, 0x99, 0x64, 0x12, 0x9b, 0x50, 0x72, 0x3c, 0x1b, 0x3f, 0x8f,
0x3d, 0xeb, 0x3d, 0xdb, 0xb1, 0x42, 0x31, 0x82, 0x26, 0x3a, 0x01, 0x15, 0xec, 0x9a, 0xeb, 0x0e, 0xa4, 0x09, 0x7f, 0x59, 0xcb, 0x56, 0xdf, 0x71, 0xed, 0x48, 0x8c, 0xf0, 0x17, 0x5d, 0x82, 0x1a,
0x6e, 0x72, 0x5c, 0x6e, 0xc8, 0x45, 0xa3, 0x2c, 0x60, 0x2b, 0x0c, 0xc4, 0x88, 0x37, 0x6c, 0xcc, 0xf6, 0xac, 0x2d, 0x17, 0x9b, 0x1c, 0x97, 0x1b, 0x72, 0xd9, 0xa8, 0x0a, 0xd8, 0x3a, 0x03, 0x31,
0x89, 0x73, 0x82, 0x58, 0x36, 0xf5, 0xaf, 0x6b, 0x30, 0xcb, 0xac, 0x50, 0x4a, 0x4f, 0x1e, 0xad, 0xe2, 0x6d, 0x07, 0x73, 0xe2, 0x82, 0x20, 0x96, 0xbf, 0xfa, 0x6f, 0x69, 0x30, 0xcf, 0xac, 0x50,
0x36, 0x17, 0xa0, 0x1c, 0x31, 0x33, 0x39, 0x91, 0x28, 0x48, 0xbf, 0x0b, 0x73, 0x71, 0x71, 0xc6, 0x4a, 0x4f, 0x5e, 0xae, 0x36, 0x97, 0xa0, 0x1a, 0x33, 0x33, 0x39, 0x90, 0x38, 0x48, 0xdf, 0x85,
0xd1, 0xe6, 0x31, 0x80, 0x70, 0xad, 0xc4, 0x6e, 0xc8, 0x1a, 0x11, 0x88, 0xfe, 0x69, 0x98, 0xed, 0x85, 0xa4, 0x38, 0x93, 0x68, 0xf3, 0x02, 0x40, 0x34, 0x57, 0xc2, 0x1b, 0xf2, 0x46, 0x0c, 0xa2,
0xe5, 0x6a, 0xda, 0xe5, 0x64, 0x14, 0x5f, 0x92, 0xa8, 0x3f, 0x2f, 0x71, 0x08, 0xef, 0x5e, 0x86, 0x7f, 0x17, 0x65, 0x7b, 0xb9, 0x9a, 0x8e, 0x38, 0x19, 0xc5, 0xa7, 0x24, 0x1e, 0xcf, 0x2b, 0x1c,
0x0a, 0x7e, 0x40, 0x7d, 0xb3, 0xd9, 0x35, 0x7d, 0xb3, 0x23, 0xb6, 0xd5, 0x48, 0xae, 0xb7, 0xcc, 0xc2, 0x9b, 0xd7, 0xa0, 0x86, 0x9f, 0xd3, 0xc0, 0x32, 0x7b, 0x56, 0x60, 0x75, 0x85, 0x5b, 0x8d,
0xc9, 0x56, 0x39, 0x95, 0xfe, 0x27, 0x16, 0xa6, 0x49, 0x73, 0xdd, 0xeb, 0x33, 0x3e, 0x0a, 0xc0, 0x15, 0x7a, 0xab, 0x9c, 0x6c, 0x83, 0x53, 0xe9, 0xff, 0xca, 0xb6, 0x69, 0xd2, 0x5c, 0x8f, 0xfb,
0xcd, 0x59, 0x74, 0xe7, 0x44, 0x37, 0x87, 0xf0, 0xc3, 0xed, 0x27, 0x1a, 0xd4, 0xf8, 0x14, 0xc4, 0x88, 0xcf, 0x03, 0x70, 0x73, 0x16, 0xcd, 0x05, 0xd1, 0xcc, 0x21, 0x7c, 0x71, 0xfb, 0x33, 0x0d,
0x7c, 0xba, 0x8c, 0x6d, 0x82, 0x46, 0x4b, 0xd0, 0x0c, 0xd9, 0x5c, 0xff, 0x03, 0x79, 0xa9, 0xd8, 0x1a, 0x7c, 0x08, 0x62, 0x3c, 0x3d, 0xc6, 0x36, 0x45, 0xa3, 0xa5, 0x68, 0x46, 0x38, 0xd7, 0xcf,
0xec, 0xa8, 0x8a, 0x95, 0x04, 0xdb, 0x4c, 0x43, 0xff, 0xa1, 0x06, 0x07, 0x12, 0x2a, 0x1f, 0xc7, 0x41, 0x51, 0x2a, 0x36, 0x3f, 0xae, 0x62, 0x25, 0xc1, 0x01, 0xc3, 0xd0, 0xbf, 0xd6, 0xe0, 0x54,
0xa2, 0x5f, 0x03, 0x24, 0x66, 0x68, 0xf5, 0xa7, 0x1d, 0x1c, 0xc4, 0x27, 0x95, 0xa7, 0x4e, 0x52, 0x4a, 0xe5, 0x93, 0x58, 0xf4, 0x7b, 0x80, 0xc4, 0x08, 0xed, 0xc1, 0xb0, 0xc3, 0x85, 0xf8, 0xb2,
0x49, 0xc6, 0x8c, 0x9d, 0x80, 0x10, 0xfd, 0xaf, 0x1a, 0x1c, 0xb9, 0x8e, 0x29, 0x47, 0xbd, 0xca, 0x72, 0xd5, 0x49, 0x2b, 0xc9, 0x98, 0x73, 0x52, 0x10, 0xa2, 0xff, 0x87, 0x06, 0xe7, 0x1e, 0x60,
0xbc, 0xca, 0xaa, 0xef, 0xb5, 0x7d, 0x4c, 0xc8, 0xfe, 0xb5, 0x8f, 0x6f, 0x8b, 0xc8, 0x4d, 0x35, 0xca, 0x51, 0xef, 0xb3, 0xa8, 0xb2, 0x11, 0xf8, 0x9d, 0x00, 0x13, 0x72, 0x72, 0xed, 0xe3, 0xf7,
0xa5, 0x71, 0xf4, 0x7f, 0x02, 0x2a, 0x7c, 0x0c, 0x6c, 0x35, 0x7d, 0xef, 0x3e, 0x91, 0x76, 0x54, 0xc4, 0xce, 0x4d, 0x35, 0xa4, 0x49, 0xf4, 0x7f, 0x09, 0x6a, 0xbc, 0x0f, 0x6c, 0x9b, 0x81, 0xbf,
0x96, 0x30, 0xc3, 0xbb, 0xcf, 0x0d, 0x82, 0x7a, 0xd4, 0x74, 0x04, 0x82, 0x3c, 0x32, 0x38, 0x84, 0x47, 0xa4, 0x1d, 0x55, 0x25, 0xcc, 0xf0, 0xf7, 0xb8, 0x41, 0x50, 0x9f, 0x5a, 0xae, 0x40, 0x90,
0x75, 0xf3, 0x3d, 0x18, 0x08, 0xc6, 0x98, 0xe3, 0xfd, 0xab, 0xe3, 0x1f, 0x6b, 0x70, 0x20, 0x31, 0x4b, 0x06, 0x87, 0xb0, 0x66, 0xee, 0x83, 0xa1, 0x60, 0x8c, 0x39, 0x3e, 0xb9, 0x3a, 0xfe, 0x53,
0x95, 0x71, 0x74, 0xfb, 0x8c, 0x88, 0x2b, 0xc5, 0x64, 0xa6, 0x96, 0x8e, 0x2b, 0x69, 0x22, 0x83, 0x0d, 0x4e, 0xa5, 0x86, 0x32, 0x89, 0x6e, 0x5f, 0x13, 0xfb, 0x4a, 0x31, 0x98, 0x99, 0x95, 0x8b,
0x09, 0x6c, 0x74, 0x1c, 0xca, 0x1b, 0xa6, 0xed, 0x34, 0x7d, 0x6c, 0x12, 0xcf, 0x95, 0x13, 0x05, 0x4a, 0x9a, 0x58, 0x67, 0x02, 0x1b, 0x5d, 0x84, 0xea, 0xb6, 0xe5, 0xb8, 0x66, 0x80, 0x2d, 0xe2,
0x06, 0x32, 0x38, 0x44, 0xff, 0xa3, 0x26, 0xde, 0xcc, 0xf6, 0xb9, 0xc7, 0xfb, 0x51, 0x06, 0xaa, 0x7b, 0x72, 0xa0, 0xc0, 0x40, 0x06, 0x87, 0xe8, 0xff, 0xac, 0x89, 0x3b, 0xb3, 0x13, 0x1e, 0xf1,
0x2b, 0x2e, 0xc1, 0x3e, 0xdd, 0xfb, 0x77, 0x0f, 0xf4, 0x22, 0x94, 0xf9, 0xc4, 0x48, 0xd3, 0x32, 0xfe, 0x24, 0x07, 0xf5, 0x75, 0x8f, 0xe0, 0x80, 0x1e, 0xff, 0xb3, 0x07, 0x7a, 0x13, 0xaa, 0x7c,
0xa9, 0x29, 0x8f, 0xab, 0x63, 0xca, 0x04, 0xfb, 0xcb, 0x0c, 0x6f, 0xd9, 0xa4, 0xa6, 0x21, 0xb4, 0x60, 0xc4, 0xb4, 0x2d, 0x6a, 0xc9, 0xe5, 0xea, 0x82, 0x32, 0xc1, 0xfe, 0x36, 0xc3, 0x5b, 0xb3,
0x43, 0xd8, 0x37, 0x3a, 0x0c, 0xa5, 0x4d, 0x93, 0x6c, 0x36, 0xef, 0xe2, 0x2d, 0x11, 0x10, 0x56, 0xa8, 0x65, 0x08, 0xed, 0x10, 0xf6, 0x8d, 0xce, 0x42, 0x65, 0xc7, 0x22, 0x3b, 0xe6, 0x2e, 0xde,
0x8d, 0x22, 0x03, 0xbc, 0x82, 0xb7, 0x08, 0x3a, 0x04, 0x45, 0xb7, 0xd7, 0x11, 0x1b, 0xac, 0xb0, 0x17, 0x1b, 0xc2, 0xba, 0x51, 0x66, 0x80, 0x77, 0xf0, 0x3e, 0x41, 0x67, 0xa0, 0xec, 0xf5, 0xbb,
0xa0, 0x2d, 0x56, 0x8d, 0x82, 0xdb, 0xeb, 0xf0, 0xed, 0xf5, 0xe7, 0x0c, 0x4c, 0xdd, 0xea, 0xb1, 0xc2, 0xc1, 0x4a, 0x4b, 0xda, 0x72, 0xdd, 0x28, 0x79, 0xfd, 0x2e, 0x77, 0xaf, 0x7f, 0xcb, 0xc1,
0x9b, 0x0e, 0x7f, 0x1e, 0xe8, 0x39, 0xf4, 0xe1, 0x8c, 0xf1, 0x0c, 0x64, 0x45, 0xcc, 0xc0, 0x28, 0xcc, 0xe3, 0x3e, 0x3b, 0xe9, 0xf0, 0xeb, 0x81, 0xbe, 0x4b, 0x5f, 0xcc, 0x18, 0xaf, 0x41, 0x5e,
0xea, 0x4a, 0xc1, 0x57, 0x96, 0x89, 0xc1, 0x90, 0x78, 0x6a, 0xbc, 0xd7, 0x6a, 0xc9, 0xf0, 0x2b, 0xec, 0x19, 0x18, 0x45, 0x53, 0x29, 0xf8, 0xfa, 0x1a, 0x31, 0x18, 0x12, 0x4f, 0x8d, 0xf7, 0xdb,
0xcb, 0x85, 0x2d, 0x31, 0x88, 0x08, 0xbe, 0x0e, 0x43, 0x09, 0xfb, 0x7e, 0x18, 0x9c, 0xf1, 0xa9, 0x6d, 0xb9, 0xfd, 0xca, 0x73, 0x61, 0x2b, 0x0c, 0x22, 0x36, 0x5f, 0x67, 0xa1, 0x82, 0x83, 0x20,
0x60, 0xdf, 0x17, 0x9d, 0x3a, 0x54, 0xcc, 0xd6, 0x5d, 0xd7, 0xbb, 0xef, 0x60, 0xab, 0x8d, 0x2d, 0xda, 0x9c, 0xf1, 0xa1, 0xe0, 0x20, 0x10, 0x8d, 0x3a, 0xd4, 0xac, 0xf6, 0xae, 0xe7, 0xef, 0xb9,
0xbe, 0xec, 0x45, 0x23, 0x06, 0x13, 0x86, 0xc1, 0x16, 0xbe, 0xd9, 0x72, 0x29, 0xbf, 0x62, 0x64, 0xd8, 0xee, 0x60, 0x9b, 0x4f, 0x7b, 0xd9, 0x48, 0xc0, 0x84, 0x61, 0xb0, 0x89, 0x37, 0xdb, 0x1e,
0x99, 0x61, 0x30, 0xc8, 0x35, 0x97, 0xb2, 0x6e, 0x0b, 0x3b, 0x98, 0x62, 0xde, 0x5d, 0x10, 0xdd, 0xe5, 0x47, 0x8c, 0x3c, 0x33, 0x0c, 0x06, 0x59, 0xf5, 0x28, 0x6b, 0xb6, 0xb1, 0x8b, 0x29, 0xe6,
0x02, 0x22, 0xbb, 0x7b, 0xdd, 0x90, 0xba, 0x28, 0xba, 0x05, 0x84, 0x75, 0x1f, 0x81, 0x52, 0x3f, 0xcd, 0x25, 0xd1, 0x2c, 0x20, 0xb2, 0xb9, 0xdf, 0x8b, 0xa8, 0xcb, 0xa2, 0x59, 0x40, 0x58, 0xf3,
0xff, 0x5f, 0xea, 0xe7, 0x09, 0x39, 0x40, 0xff, 0xa7, 0x06, 0xd5, 0x65, 0xce, 0x6a, 0x1f, 0x18, 0x39, 0xa8, 0x0c, 0xf2, 0xff, 0x95, 0x41, 0x9e, 0x90, 0x03, 0xf4, 0xff, 0xd1, 0xa0, 0xbe, 0xc6,
0x1d, 0x82, 0x49, 0xfc, 0xa0, 0xeb, 0xcb, 0xad, 0xc3, 0xbf, 0x87, 0xda, 0x91, 0x7e, 0x0f, 0x6a, 0x59, 0x9d, 0x00, 0xa3, 0x43, 0x30, 0x8d, 0x9f, 0xf7, 0x02, 0xe9, 0x3a, 0xfc, 0x7b, 0xa4, 0x1d,
0xab, 0x8e, 0xd9, 0xc2, 0x9b, 0x9e, 0x63, 0x61, 0x9f, 0x9f, 0xed, 0xa8, 0x06, 0x59, 0x6a, 0xb6, 0xe9, 0xcf, 0xa0, 0xb1, 0xe1, 0x5a, 0x6d, 0xbc, 0xe3, 0xbb, 0x36, 0x0e, 0xf8, 0xda, 0x8e, 0x1a,
0x65, 0xf0, 0xc0, 0x3e, 0xd1, 0xf3, 0xf2, 0x6e, 0x27, 0xdc, 0xd2, 0xe3, 0xca, 0x53, 0x36, 0xc2, 0x90, 0xa7, 0x56, 0x47, 0x6e, 0x1e, 0xd8, 0x27, 0xfa, 0xa9, 0x3c, 0xdb, 0x89, 0xb0, 0xf4, 0x8a,
0x26, 0x92, 0x32, 0x9d, 0x87, 0x3c, 0x7f, 0x93, 0x13, 0x61, 0x45, 0xc5, 0x90, 0x2d, 0xfd, 0x4e, 0x72, 0x95, 0x8d, 0xb1, 0x89, 0xa5, 0x4c, 0x17, 0xa1, 0xc8, 0xef, 0xe4, 0xc4, 0xb6, 0xa2, 0x66,
0x6c, 0xdc, 0xeb, 0xbe, 0xd7, 0xeb, 0xa2, 0x15, 0xa8, 0x74, 0xfb, 0x30, 0x66, 0xab, 0xe9, 0x67, 0xc8, 0x3f, 0xfd, 0x69, 0xa2, 0xdf, 0x07, 0x81, 0xdf, 0xef, 0xa1, 0x75, 0xa8, 0xf5, 0x06, 0x30,
0x7a, 0x52, 0x68, 0x23, 0x46, 0xaa, 0x7f, 0x9a, 0x85, 0xea, 0x1a, 0x36, 0xfd, 0xd6, 0xe6, 0x7e, 0x66, 0xab, 0xd9, 0x6b, 0x7a, 0x5a, 0x68, 0x23, 0x41, 0xaa, 0x7f, 0x97, 0x87, 0xfa, 0x26, 0xb6,
0x48, 0xb2, 0x30, 0x8d, 0x5b, 0xc4, 0x91, 0xab, 0xc6, 0x3e, 0xd1, 0x59, 0x98, 0x89, 0x4c, 0xa8, 0x82, 0xf6, 0xce, 0x49, 0x48, 0xb2, 0x30, 0x8d, 0xdb, 0xc4, 0x95, 0xb3, 0xc6, 0x3e, 0xd1, 0x75,
0xd9, 0x66, 0x0a, 0xe2, 0x76, 0x5f, 0x31, 0x6a, 0xdd, 0xa4, 0xe2, 0x9e, 0x83, 0xa2, 0x45, 0x9c, 0x98, 0x8b, 0x0d, 0xc8, 0xec, 0x30, 0x05, 0x71, 0xbb, 0xaf, 0x19, 0x8d, 0x5e, 0x5a, 0x71, 0x3f,
0x26, 0x5f, 0xa2, 0x02, 0x5f, 0x22, 0xf5, 0xfc, 0x96, 0x89, 0xc3, 0x97, 0xa6, 0x60, 0x89, 0x0f, 0x81, 0xb2, 0x4d, 0x5c, 0x93, 0x4f, 0x51, 0x89, 0x4f, 0x91, 0x7a, 0x7c, 0x6b, 0xc4, 0xe5, 0x53,
0xf4, 0x18, 0x54, 0xbd, 0x1e, 0xed, 0xf6, 0x68, 0x53, 0xf8, 0x9d, 0x7a, 0x91, 0x8b, 0x57, 0x11, 0x53, 0xb2, 0xc5, 0x07, 0xfa, 0x01, 0xd4, 0xfd, 0x3e, 0xed, 0xf5, 0xa9, 0x29, 0xe2, 0x4e, 0xb3,
0x40, 0xee, 0x96, 0x08, 0x7a, 0x19, 0xaa, 0x84, 0xab, 0x32, 0x88, 0xbc, 0x4b, 0xa3, 0x06, 0x88, 0xcc, 0xc5, 0xab, 0x09, 0x20, 0x0f, 0x4b, 0x04, 0xbd, 0x0d, 0x75, 0xc2, 0x55, 0x19, 0xee, 0xbc,
0x15, 0x41, 0x27, 0x42, 0x6f, 0x74, 0x1a, 0x6a, 0xd4, 0x37, 0xef, 0x61, 0x27, 0xf2, 0xda, 0x06, 0x2b, 0xe3, 0x6e, 0x10, 0x6b, 0x82, 0x4e, 0x6c, 0xbd, 0xd1, 0x55, 0x68, 0xd0, 0xc0, 0x7a, 0x86,
0x7c, 0xb7, 0x4d, 0x0b, 0x78, 0xff, 0xa5, 0xed, 0x02, 0xcc, 0xb6, 0x7b, 0xa6, 0x6f, 0xba, 0x14, 0xdd, 0xd8, 0x6d, 0x1b, 0x70, 0x6f, 0x9b, 0x15, 0xf0, 0xc1, 0x4d, 0xdb, 0x2d, 0x98, 0xef, 0xf4,
0xe3, 0x08, 0x76, 0x99, 0x63, 0xa3, 0xb0, 0x2b, 0x24, 0xd0, 0x5f, 0x81, 0xc9, 0x1b, 0x36, 0xe5, 0xad, 0xc0, 0xf2, 0x28, 0xc6, 0x31, 0xec, 0x2a, 0xc7, 0x46, 0x51, 0x53, 0x44, 0xa0, 0xbf, 0x03,
0x8a, 0x64, 0x3e, 0x4b, 0xe3, 0xf7, 0x1c, 0xee, 0x99, 0x0e, 0x41, 0xd1, 0xf7, 0xee, 0x0b, 0x1f, 0xd3, 0x0f, 0x1d, 0xca, 0x15, 0xc9, 0x62, 0x96, 0xc6, 0xcf, 0x39, 0x3c, 0x32, 0x9d, 0x81, 0x72,
0x9c, 0xe1, 0x26, 0x58, 0xf0, 0xbd, 0xfb, 0xdc, 0xc1, 0xf2, 0x1a, 0x05, 0xcf, 0x97, 0xb6, 0x99, 0xe0, 0xef, 0x89, 0x18, 0x9c, 0xe3, 0x26, 0x58, 0x0a, 0xfc, 0x3d, 0x1e, 0x60, 0x79, 0x8d, 0x82,
0x31, 0x64, 0x4b, 0xff, 0xb9, 0xd6, 0x37, 0x1e, 0xe6, 0x3e, 0xc9, 0xc3, 0xf9, 0xcf, 0x17, 0xa1, 0x1f, 0x48, 0xdb, 0xcc, 0x19, 0xf2, 0x4f, 0xff, 0x4b, 0x6d, 0x60, 0x3c, 0x2c, 0x7c, 0x92, 0x17,
0xe0, 0x0b, 0xfa, 0xa1, 0xaf, 0xab, 0xd1, 0x91, 0xf8, 0x19, 0x10, 0x50, 0x8d, 0xfe, 0xc2, 0xf3, 0x8b, 0x9f, 0x6f, 0x42, 0x29, 0x10, 0xf4, 0x23, 0x6f, 0x57, 0xe3, 0x3d, 0xf1, 0x35, 0x20, 0xa4,
0x25, 0x0d, 0x2a, 0x2f, 0x3b, 0x3d, 0xf2, 0x28, 0x8c, 0x5d, 0xf5, 0xee, 0x90, 0x55, 0xbf, 0x79, 0x1a, 0xff, 0x86, 0xe7, 0xd7, 0x34, 0xa8, 0xbd, 0xed, 0xf6, 0xc9, 0xcb, 0x30, 0x76, 0xd5, 0xbd,
0x7c, 0x23, 0x03, 0x55, 0x29, 0xc6, 0x38, 0x41, 0x50, 0xaa, 0x28, 0x6b, 0x50, 0x66, 0x43, 0x36, 0x43, 0x5e, 0x7d, 0xe7, 0xf1, 0xdb, 0x39, 0xa8, 0x4b, 0x31, 0x26, 0xd9, 0x04, 0x65, 0x8a, 0xb2,
0x09, 0x6e, 0x07, 0x49, 0x9b, 0xf2, 0xd2, 0x92, 0xd2, 0x3d, 0xc4, 0xc4, 0xe0, 0x0f, 0xd8, 0x6b, 0x09, 0x55, 0xd6, 0xa5, 0x49, 0x70, 0x27, 0x4c, 0xda, 0x54, 0x57, 0x56, 0x94, 0xe1, 0x21, 0x21,
0x9c, 0xe8, 0x73, 0x2e, 0xf5, 0xb7, 0x0c, 0x68, 0x85, 0x80, 0xc6, 0x1d, 0x98, 0x4e, 0x74, 0x33, 0x06, 0xbf, 0xc0, 0xde, 0xe4, 0x44, 0xbf, 0xe4, 0xd1, 0x60, 0xdf, 0x80, 0x76, 0x04, 0x68, 0x3d,
0x23, 0xba, 0x8b, 0xb7, 0x02, 0xff, 0x77, 0x17, 0x6f, 0xa1, 0xa7, 0xa3, 0x65, 0x06, 0x69, 0xa7, 0x85, 0xd9, 0x54, 0x33, 0x33, 0xa2, 0x5d, 0xbc, 0x1f, 0xc6, 0xbf, 0x5d, 0xbc, 0x8f, 0x5e, 0x8d,
0xf8, 0x4d, 0xcf, 0x6d, 0x5f, 0xf1, 0x7d, 0x73, 0x4b, 0x96, 0x21, 0x5c, 0xce, 0x3c, 0xaf, 0xe9, 0x97, 0x19, 0x64, 0xad, 0xe2, 0x8f, 0x7c, 0xaf, 0x73, 0x2f, 0x08, 0xac, 0x7d, 0x59, 0x86, 0x70,
0x7f, 0xc8, 0x40, 0xe5, 0xd5, 0x1e, 0xf6, 0xb7, 0x76, 0xd3, 0x0f, 0x05, 0xa7, 0xc2, 0x64, 0xe4, 0x37, 0xf7, 0x53, 0x4d, 0xff, 0xa7, 0x1c, 0xd4, 0xde, 0xed, 0xe3, 0x60, 0xff, 0x28, 0xe3, 0x50,
0x54, 0x18, 0xd8, 0xfa, 0x39, 0xc5, 0xd6, 0x57, 0x38, 0xb0, 0xbc, 0xd2, 0x81, 0xa9, 0xf6, 0x76, 0xb8, 0x2a, 0x4c, 0xc7, 0x56, 0x85, 0x21, 0xd7, 0x2f, 0x28, 0x5c, 0x5f, 0x11, 0xc0, 0x8a, 0xca,
0x61, 0x47, 0x7b, 0xbb, 0x98, 0xba, 0xb7, 0x7f, 0xa6, 0x85, 0x2a, 0x1c, 0x6b, 0x37, 0xc6, 0xc2, 0x00, 0xa6, 0xf2, 0xed, 0xd2, 0xa1, 0x7c, 0xbb, 0x9c, 0xe9, 0xdb, 0x7f, 0xa1, 0x45, 0x2a, 0x9c,
0xb1, 0xcc, 0x8e, 0xc3, 0xb1, 0x91, 0x77, 0xe3, 0xc7, 0x1a, 0x94, 0xde, 0xc0, 0x2d, 0xea, 0xf9, 0xc8, 0x1b, 0x13, 0xdb, 0xb1, 0xdc, 0xa1, 0xb7, 0x63, 0x63, 0x7b, 0xe3, 0x37, 0x1a, 0x54, 0x3e,
0xcc, 0xff, 0x28, 0xc8, 0xb4, 0x11, 0x42, 0xe3, 0x4c, 0x32, 0x34, 0xbe, 0x04, 0x45, 0xdb, 0x6a, 0xc0, 0x6d, 0xea, 0x07, 0x2c, 0xfe, 0x28, 0xc8, 0xb4, 0x31, 0xb6, 0xc6, 0xb9, 0xf4, 0xd6, 0xf8,
0x9a, 0xcc, 0xbe, 0xf8, 0xb8, 0xc3, 0x42, 0xb2, 0x82, 0x6d, 0x71, 0x43, 0x1c, 0x3d, 0xcb, 0xff, 0x0e, 0x94, 0x1d, 0xdb, 0xb4, 0x98, 0x7d, 0xf1, 0x7e, 0x47, 0x6d, 0xc9, 0x4a, 0x8e, 0xcd, 0x0d,
0x1d, 0x0d, 0x2a, 0x42, 0x66, 0x22, 0x28, 0x5f, 0x88, 0x0c, 0xa7, 0xa9, 0x8c, 0x5e, 0x36, 0xc2, 0x71, 0xfc, 0x2c, 0xff, 0xef, 0x6b, 0x50, 0x13, 0x32, 0x13, 0x41, 0xf9, 0x46, 0xac, 0x3b, 0x4d,
0x89, 0xde, 0x98, 0xe8, 0x0f, 0x7b, 0x05, 0x80, 0x29, 0x59, 0x92, 0x8b, 0x3d, 0xb3, 0xa0, 0x94, 0x65, 0xf4, 0xf2, 0x27, 0x1a, 0xe8, 0xc3, 0xa9, 0x41, 0xb7, 0xf7, 0x00, 0x98, 0x92, 0x25, 0xb9,
0x56, 0x90, 0x73, 0x85, 0xdf, 0x98, 0x30, 0x4a, 0x8c, 0x8a, 0xb3, 0xb8, 0x5a, 0x80, 0x1c, 0xa7, 0xf0, 0x99, 0x25, 0xa5, 0xb4, 0x82, 0x9c, 0x2b, 0xfc, 0xe1, 0x94, 0x51, 0x61, 0x54, 0x9c, 0xc5,
0xd6, 0xff, 0xad, 0xc1, 0xec, 0x35, 0xd3, 0x69, 0x2d, 0xdb, 0x84, 0x9a, 0x6e, 0x6b, 0x8c, 0x20, 0xfd, 0x12, 0x14, 0x38, 0xb5, 0xfe, 0x7f, 0x1a, 0xcc, 0xaf, 0x5a, 0x6e, 0x7b, 0xcd, 0x21, 0xd4,
0xec, 0x32, 0x14, 0xbc, 0x6e, 0xd3, 0xc1, 0x1b, 0x54, 0x8a, 0x74, 0x62, 0xc8, 0x8c, 0x84, 0x1a, 0xf2, 0xda, 0x13, 0x6c, 0xc2, 0xee, 0x42, 0xc9, 0xef, 0x99, 0x2e, 0xde, 0xa6, 0x52, 0xa4, 0x4b,
0x8c, 0xbc, 0xd7, 0xbd, 0x89, 0x37, 0x28, 0xfa, 0x5f, 0x28, 0x7a, 0xdd, 0xa6, 0x6f, 0xb7, 0x37, 0x23, 0x46, 0x24, 0xd4, 0x60, 0x14, 0xfd, 0xde, 0x23, 0xbc, 0x4d, 0xd1, 0xcf, 0x43, 0xd9, 0xef,
0xa9, 0xd4, 0xfe, 0x08, 0xc4, 0x05, 0xaf, 0x6b, 0x30, 0x8a, 0x48, 0x6e, 0x65, 0x72, 0x87, 0xb9, 0x99, 0x81, 0xd3, 0xd9, 0xa1, 0x52, 0xfb, 0x63, 0x10, 0x97, 0xfc, 0x9e, 0xc1, 0x28, 0x62, 0xb9,
0x15, 0xfd, 0x6f, 0x03, 0xd3, 0x1f, 0x63, 0x0f, 0x5c, 0x86, 0xa2, 0xed, 0xd2, 0xa6, 0x65, 0x93, 0x95, 0xe9, 0x43, 0xe6, 0x56, 0xf4, 0xff, 0x1c, 0x1a, 0xfe, 0x04, 0x3e, 0x70, 0x17, 0xca, 0x8e,
0x40, 0x05, 0x47, 0xd5, 0x36, 0xe4, 0x52, 0x3e, 0x03, 0xbe, 0xa6, 0x2e, 0x65, 0x63, 0xa3, 0x97, 0x47, 0x4d, 0xdb, 0x21, 0xa1, 0x0a, 0xce, 0xab, 0x6d, 0xc8, 0xa3, 0x7c, 0x04, 0x7c, 0x4e, 0x3d,
0x00, 0x36, 0x1c, 0xcf, 0x94, 0xd4, 0x42, 0x07, 0xc7, 0xd5, 0xdb, 0x87, 0xa1, 0x05, 0xf4, 0x25, 0xca, 0xfa, 0x46, 0x6f, 0x01, 0x6c, 0xbb, 0xbe, 0x25, 0xa9, 0x85, 0x0e, 0x2e, 0xaa, 0xdd, 0x87,
0x4e, 0xc4, 0x38, 0xf4, 0x97, 0xf4, 0x2f, 0x1a, 0x1c, 0x58, 0xc5, 0xbe, 0x28, 0x42, 0xa1, 0x32, 0xa1, 0x85, 0xf4, 0x15, 0x4e, 0xc4, 0x38, 0x0c, 0xa6, 0xf4, 0xdf, 0x35, 0x38, 0xb5, 0x81, 0x03,
0xcf, 0xb9, 0xe2, 0x6e, 0x78, 0xf1, 0x54, 0xb3, 0x96, 0x48, 0x35, 0x7f, 0x36, 0xe9, 0xd5, 0xd8, 0x51, 0x84, 0x42, 0x65, 0x9e, 0x73, 0xdd, 0xdb, 0xf6, 0x93, 0xa9, 0x66, 0x2d, 0x95, 0x6a, 0xfe,
0xcd, 0x49, 0x3c, 0x78, 0x04, 0x37, 0xa7, 0xe0, 0x59, 0x47, 0xdc, 0x3c, 0xa7, 0x52, 0x96, 0x49, 0x7e, 0xd2, 0xab, 0x89, 0x93, 0x93, 0xb8, 0xf0, 0x08, 0x4f, 0x4e, 0xe1, 0xb5, 0x8e, 0x38, 0x79,
0xca, 0x1b, 0xbd, 0x80, 0xeb, 0xdf, 0x14, 0x25, 0x16, 0xca, 0x49, 0x3d, 0xbc, 0xc1, 0xce, 0x83, 0xce, 0x64, 0x4c, 0x93, 0x94, 0x37, 0x7e, 0x00, 0xd7, 0x7f, 0x47, 0x94, 0x58, 0x28, 0x07, 0xf5,
0xf4, 0xf4, 0x09, 0xbf, 0xff, 0x04, 0x24, 0x7c, 0x47, 0x8a, 0x23, 0xfa, 0x9e, 0x06, 0x0b, 0xe9, 0xe2, 0x06, 0xbb, 0x08, 0x32, 0xd2, 0xa7, 0xe2, 0xfe, 0x0f, 0x21, 0x15, 0x3b, 0x32, 0x02, 0xd1,
0x52, 0x8d, 0x73, 0x44, 0xbf, 0x04, 0x39, 0xdb, 0xdd, 0xf0, 0x82, 0xb4, 0xdb, 0x19, 0x75, 0x88, 0x1f, 0x6a, 0xb0, 0x94, 0x2d, 0xd5, 0x24, 0x4b, 0xf4, 0x5b, 0x50, 0x70, 0xbc, 0x6d, 0x3f, 0x4c,
0xae, 0x1c, 0x57, 0x10, 0xea, 0xbf, 0xce, 0x40, 0x8d, 0x3b, 0xf5, 0x5d, 0x58, 0xfe, 0x0e, 0xee, 0xbb, 0x5d, 0x53, 0x6f, 0xd1, 0x95, 0xfd, 0x0a, 0x42, 0xfd, 0x6f, 0x73, 0xd0, 0xe0, 0x41, 0xfd,
0x34, 0x89, 0xfd, 0x0e, 0x0e, 0x96, 0xbf, 0x83, 0x3b, 0x6b, 0xf6, 0x3b, 0x38, 0x66, 0x19, 0xb9, 0x08, 0xa6, 0xbf, 0x8b, 0xbb, 0x26, 0x71, 0x3e, 0xc1, 0xe1, 0xf4, 0x77, 0x71, 0x77, 0xd3, 0xf9,
0xb8, 0x65, 0xc4, 0x13, 0x13, 0xf9, 0x21, 0x69, 0xd5, 0x42, 0x3c, 0xad, 0x3a, 0x0f, 0x79, 0xd7, 0x04, 0x27, 0x2c, 0xa3, 0x90, 0xb4, 0x8c, 0x64, 0x62, 0xa2, 0x38, 0x22, 0xad, 0x5a, 0x4a, 0xa6,
0xb3, 0xf0, 0xca, 0xb2, 0xbc, 0x76, 0xca, 0x56, 0xdf, 0xd4, 0x4a, 0x3b, 0x34, 0xb5, 0x0f, 0x35, 0x55, 0x17, 0xa1, 0xe8, 0xf9, 0x36, 0x5e, 0x5f, 0x93, 0xc7, 0x4e, 0xf9, 0x37, 0x30, 0xb5, 0xca,
0x68, 0x5c, 0xc7, 0x34, 0xa9, 0xbb, 0xdd, 0xb3, 0xb2, 0x8f, 0x34, 0x38, 0xac, 0x14, 0x68, 0x1c, 0x21, 0x4d, 0xed, 0x4b, 0x0d, 0x5a, 0x0f, 0x30, 0x4d, 0xeb, 0xee, 0xe8, 0xac, 0xec, 0x2b, 0x0d,
0x03, 0x7b, 0x21, 0x6e, 0x60, 0xea, 0x3b, 0xe0, 0xc0, 0x90, 0xd2, 0xb6, 0x2e, 0x42, 0x65, 0xb9, 0xce, 0x2a, 0x05, 0x9a, 0xc4, 0xc0, 0xde, 0x48, 0x1a, 0x98, 0xfa, 0x0c, 0x38, 0xd4, 0xa5, 0xb4,
0xd7, 0xe9, 0x84, 0x21, 0xd7, 0x09, 0xa8, 0xf8, 0xe2, 0x53, 0x5c, 0x91, 0xc4, 0xf9, 0x5b, 0x96, 0xad, 0xdb, 0x50, 0x5b, 0xeb, 0x77, 0xbb, 0xd1, 0x96, 0xeb, 0x12, 0xd4, 0x02, 0xf1, 0x29, 0x8e,
0x30, 0x76, 0x11, 0xd2, 0xcf, 0x42, 0x55, 0x92, 0x48, 0xa9, 0x1b, 0x50, 0xf4, 0xe5, 0xb7, 0xc4, 0x48, 0x62, 0xfd, 0xad, 0x4a, 0x18, 0x3b, 0x08, 0xe9, 0xd7, 0xa1, 0x2e, 0x49, 0xa4, 0xd4, 0x2d,
0x0f, 0xdb, 0xfa, 0x01, 0x98, 0x35, 0x70, 0x9b, 0x99, 0xb6, 0x7f, 0xd3, 0x76, 0xef, 0xca, 0x61, 0x28, 0x07, 0xf2, 0x5b, 0xe2, 0x47, 0xff, 0xfa, 0x29, 0x98, 0x37, 0x70, 0x87, 0x99, 0x76, 0xf0,
0xf4, 0xf7, 0x34, 0x98, 0x8b, 0xc3, 0x25, 0xaf, 0x67, 0xa1, 0x60, 0x5a, 0x96, 0x8f, 0x09, 0x19, 0xc8, 0xf1, 0x76, 0x65, 0x37, 0xfa, 0x67, 0x1a, 0x2c, 0x24, 0xe1, 0x92, 0xd7, 0xeb, 0x50, 0xb2,
0xba, 0x2c, 0x57, 0x04, 0x8e, 0x11, 0x20, 0x47, 0x34, 0x97, 0x19, 0x59, 0x73, 0x7a, 0x13, 0x66, 0x6c, 0x3b, 0xc0, 0x84, 0x8c, 0x9c, 0x96, 0x7b, 0x02, 0xc7, 0x08, 0x91, 0x63, 0x9a, 0xcb, 0x8d,
0xae, 0x63, 0x7a, 0x0b, 0x53, 0x7f, 0xac, 0x27, 0xfa, 0x3a, 0xbb, 0xbc, 0x70, 0x62, 0x69, 0x16, 0xad, 0x39, 0xdd, 0x84, 0xb9, 0x07, 0x98, 0x3e, 0xc6, 0x34, 0x98, 0xe8, 0x8a, 0xbe, 0xc9, 0x0e,
0x41, 0x53, 0xff, 0x40, 0x03, 0x14, 0x1d, 0x61, 0x9c, 0x65, 0x8e, 0x6a, 0x39, 0x13, 0xd7, 0xb2, 0x2f, 0x9c, 0x58, 0x9a, 0x45, 0xf8, 0xab, 0x7f, 0xa1, 0x01, 0x8a, 0xf7, 0x30, 0xc9, 0x34, 0xc7,
0xa8, 0x62, 0xea, 0x74, 0x3d, 0x17, 0xbb, 0x34, 0x1a, 0x6e, 0x55, 0x43, 0x28, 0x37, 0xbf, 0x4f, 0xb5, 0x9c, 0x4b, 0x6a, 0x59, 0x54, 0x31, 0x75, 0x7b, 0xbe, 0x87, 0x3d, 0x1a, 0xdf, 0x6e, 0xd5,
0x34, 0x40, 0x37, 0x3d, 0xd3, 0xba, 0x6a, 0x3a, 0xe3, 0x85, 0x07, 0x47, 0x01, 0x88, 0xdf, 0x6a, 0x23, 0x28, 0x37, 0xbf, 0x6f, 0x35, 0x40, 0x8f, 0x7c, 0xcb, 0xbe, 0x6f, 0xb9, 0x93, 0x6d, 0x0f,
0xca, 0xdd, 0x9a, 0x91, 0xde, 0xc7, 0x6f, 0xdd, 0x16, 0x1b, 0xf6, 0x38, 0x94, 0x2d, 0x42, 0x65, 0xce, 0x03, 0x90, 0xa0, 0x6d, 0x4a, 0x6f, 0xcd, 0xc9, 0xe8, 0x13, 0xb4, 0x9f, 0x08, 0x87, 0xbd,
0x77, 0xf0, 0x62, 0x0c, 0x16, 0xa1, 0xa2, 0x9f, 0x97, 0x9f, 0x12, 0x6c, 0x3a, 0xd8, 0x6a, 0x46, 0x08, 0x55, 0x9b, 0x50, 0xd9, 0x1c, 0xde, 0x18, 0x83, 0x4d, 0xa8, 0x68, 0xe7, 0xe5, 0xa7, 0x04,
0x1e, 0xdc, 0x26, 0x39, 0x5a, 0x4d, 0x74, 0xac, 0xf5, 0x9f, 0xdd, 0xee, 0xc0, 0xc1, 0x5b, 0xa6, 0x5b, 0x2e, 0xb6, 0xcd, 0xd8, 0x85, 0xdb, 0x34, 0x47, 0x6b, 0x88, 0x86, 0xcd, 0xc1, 0xb5, 0xdb,
0xdb, 0x33, 0x9d, 0x6b, 0x5e, 0xa7, 0x6b, 0xc6, 0x2a, 0x17, 0x93, 0x6e, 0x4e, 0x53, 0xb8, 0xb9, 0x53, 0x38, 0xfd, 0xd8, 0xf2, 0xfa, 0x96, 0xbb, 0xea, 0x77, 0x7b, 0x56, 0xa2, 0x72, 0x31, 0x1d,
0x63, 0xa2, 0xb4, 0x4d, 0x84, 0xd6, 0x5c, 0xd6, 0x49, 0x23, 0x02, 0xd1, 0x09, 0xd4, 0x07, 0xd9, 0xe6, 0x34, 0x45, 0x98, 0xbb, 0x20, 0x4a, 0xdb, 0xc4, 0xd6, 0x9a, 0xcb, 0x3a, 0x6d, 0xc4, 0x20,
0x8f, 0xb3, 0x50, 0x5c, 0xa8, 0x80, 0x55, 0xd4, 0xf7, 0xf6, 0x61, 0xfa, 0x8b, 0x70, 0x88, 0x97, 0x3a, 0x81, 0xe6, 0x30, 0xfb, 0x49, 0x26, 0x8a, 0x0b, 0x15, 0xb2, 0x8a, 0xc7, 0xde, 0x01, 0x4c,
0x19, 0x06, 0xa0, 0x58, 0x6a, 0x3f, 0xc9, 0x40, 0x53, 0x30, 0xf8, 0x6a, 0x86, 0xbb, 0xb6, 0x01, 0x7f, 0x13, 0xce, 0xf0, 0x32, 0xc3, 0x10, 0x94, 0x48, 0xed, 0xa7, 0x19, 0x68, 0x0a, 0x06, 0xbf,
0x0e, 0xe3, 0x08, 0x7e, 0x39, 0x9e, 0x51, 0x7f, 0x3c, 0xa5, 0x46, 0x36, 0x3e, 0xa2, 0x4c, 0xab, 0x91, 0xe3, 0xa1, 0x6d, 0x88, 0xc3, 0x24, 0x82, 0xdf, 0x4d, 0x66, 0xd4, 0x5f, 0xc9, 0xa8, 0x91,
0x2f, 0xc2, 0x34, 0x7e, 0x80, 0x5b, 0x3d, 0x6a, 0xbb, 0xed, 0x55, 0xc7, 0x74, 0x6f, 0x7b, 0xf2, 0x4d, 0xf6, 0x28, 0xd3, 0xea, 0xcb, 0x30, 0x8b, 0x9f, 0xe3, 0x76, 0x9f, 0x3a, 0x5e, 0x67, 0xc3,
0x40, 0x49, 0x82, 0xd1, 0xe3, 0x50, 0x65, 0xda, 0xf7, 0x7a, 0x54, 0xe2, 0x89, 0x93, 0x25, 0x0e, 0xb5, 0xbc, 0x27, 0xbe, 0x5c, 0x50, 0xd2, 0x60, 0xf4, 0x0a, 0xd4, 0x99, 0xf6, 0xfd, 0x3e, 0x95,
0x64, 0xfc, 0xd8, 0x7c, 0x1d, 0x4c, 0xb1, 0x25, 0xf1, 0xc4, 0x31, 0x93, 0x04, 0x0f, 0xa8, 0x92, 0x78, 0x62, 0x65, 0x49, 0x02, 0x19, 0x3f, 0x36, 0x5e, 0x17, 0x53, 0x6c, 0x4b, 0x3c, 0xb1, 0xcc,
0x81, 0xc9, 0x4e, 0x54, 0xf9, 0x0f, 0x2d, 0xa1, 0x4a, 0xc9, 0x61, 0xb7, 0x54, 0x79, 0x03, 0xa0, 0xa4, 0xc1, 0x43, 0xaa, 0x64, 0x60, 0x72, 0x18, 0x55, 0xfe, 0xb7, 0x96, 0x52, 0xa5, 0xe4, 0x70,
0x83, 0xfd, 0x36, 0x5e, 0xe1, 0x4e, 0x5d, 0xdc, 0xdc, 0x17, 0x95, 0x4e, 0xbd, 0xcf, 0xe0, 0x56, 0x54, 0xaa, 0x7c, 0x08, 0xd0, 0xc5, 0x41, 0x07, 0xaf, 0xf3, 0xa0, 0x2e, 0x4e, 0xee, 0xcb, 0xca,
0x40, 0x60, 0x44, 0x68, 0xf5, 0xeb, 0x30, 0xab, 0x40, 0x61, 0xfe, 0x8a, 0x78, 0x3d, 0xbf, 0x85, 0xa0, 0x3e, 0x60, 0xf0, 0x38, 0x24, 0x30, 0x62, 0xb4, 0xfa, 0x03, 0x98, 0x57, 0xa0, 0xb0, 0x78,
0x83, 0xe4, 0x4f, 0xd0, 0x64, 0xe7, 0x1b, 0x35, 0xfd, 0x36, 0xa6, 0xd2, 0x68, 0x65, 0x4b, 0x7f, 0x45, 0xfc, 0x7e, 0xd0, 0xc6, 0x61, 0xf2, 0x27, 0xfc, 0x65, 0xeb, 0x1b, 0xb5, 0x82, 0x0e, 0xa6,
0x96, 0x3f, 0x42, 0xf1, 0x44, 0x41, 0xcc, 0x52, 0xe3, 0x2f, 0xe6, 0xda, 0xc0, 0x8b, 0xf9, 0x06, 0xd2, 0x68, 0xe5, 0x9f, 0xfe, 0x3a, 0xbf, 0x84, 0xe2, 0x89, 0x82, 0x84, 0xa5, 0x26, 0x6f, 0xcc,
0x7f, 0xf1, 0x89, 0xd2, 0x8d, 0x59, 0xed, 0xb0, 0xc1, 0x58, 0x61, 0x4b, 0xfe, 0x1f, 0x11, 0x34, 0xb5, 0xa1, 0x1b, 0xf3, 0x6d, 0x7e, 0xe3, 0x13, 0xa7, 0x9b, 0xb0, 0xda, 0x61, 0x9b, 0xb1, 0xc2,
0xcf, 0x9c, 0x80, 0x62, 0x50, 0x2e, 0x83, 0x0a, 0x90, 0xbd, 0xe2, 0x38, 0xb5, 0x09, 0x54, 0x81, 0xb6, 0x7c, 0x1f, 0x11, 0xfe, 0xb2, 0x5d, 0x72, 0x7d, 0xbd, 0xdb, 0xf3, 0x07, 0x97, 0x1d, 0x63,
0xe2, 0x8a, 0xac, 0x09, 0xa9, 0x69, 0x67, 0xfe, 0x1f, 0xa6, 0x13, 0x59, 0x57, 0x54, 0x84, 0xc9, 0x1f, 0x25, 0x87, 0x93, 0xc5, 0x39, 0x55, 0xb2, 0xf8, 0x2c, 0x54, 0x02, 0x7f, 0xcf, 0x64, 0xd1,
0xdb, 0x9e, 0x8b, 0x6b, 0x13, 0xa8, 0x06, 0x95, 0xab, 0xb6, 0x6b, 0xfa, 0x5b, 0xe2, 0x4e, 0x52, 0xcf, 0xe6, 0x96, 0x5d, 0x36, 0xca, 0x81, 0xbf, 0xc7, 0x62, 0xa2, 0x8d, 0x16, 0xa0, 0xb0, 0xed,
0xb3, 0xd0, 0x34, 0x94, 0x79, 0x6c, 0x2e, 0x01, 0x78, 0xe9, 0xcb, 0xc7, 0xa1, 0x7a, 0x8b, 0xcb, 0xb8, 0xd1, 0x81, 0x51, 0xfc, 0xa0, 0x37, 0xd8, 0x19, 0x4a, 0xdc, 0xb8, 0x8e, 0x7d, 0xff, 0x1e,
0xb8, 0x86, 0xfd, 0x7b, 0x76, 0x0b, 0xa3, 0x26, 0xd4, 0x92, 0x7f, 0x11, 0xa1, 0x27, 0xd5, 0xeb, 0x52, 0xe8, 0x1f, 0xc1, 0x4c, 0x38, 0xa0, 0x09, 0xdf, 0x7c, 0x50, 0x8b, 0xec, 0x86, 0xd5, 0x0c,
0xa4, 0xfe, 0xd9, 0xa8, 0x31, 0x6c, 0xd6, 0xfa, 0x04, 0x7a, 0x0b, 0xa6, 0xe2, 0xff, 0xe2, 0x20, 0xe2, 0x47, 0xbf, 0x2e, 0x2e, 0xe2, 0x38, 0xff, 0xc4, 0x7c, 0x22, 0x98, 0x66, 0x18, 0xd2, 0x4d,
0x75, 0xf0, 0xa8, 0xfc, 0x61, 0x67, 0x3b, 0xe6, 0x4d, 0xa8, 0xc6, 0x7e, 0xad, 0x41, 0xa7, 0x95, 0xf8, 0xb7, 0xfe, 0xb5, 0x06, 0x8b, 0x69, 0xec, 0x49, 0x44, 0x7a, 0x3d, 0xe9, 0x1a, 0xea, 0xb2,
0xbc, 0x55, 0xbf, 0xdf, 0x34, 0xd4, 0xf7, 0xb9, 0xe8, 0xef, 0x2f, 0x42, 0xfa, 0x78, 0xfd, 0x7b, 0xfe, 0x78, 0x6f, 0xd2, 0x2d, 0xe4, 0x0c, 0xb4, 0xfd, 0xbe, 0x47, 0x65, 0x6c, 0x61, 0x33, 0xb0,
0x8a, 0xf4, 0xca, 0x22, 0xf9, 0xed, 0xa4, 0x37, 0x61, 0x66, 0xa0, 0x9c, 0x1d, 0x9d, 0x53, 0xf2, 0xca, 0xfe, 0xaf, 0x5d, 0x82, 0x72, 0x58, 0x2f, 0x85, 0x4a, 0x90, 0xbf, 0xe7, 0xba, 0x8d, 0x29,
0x4f, 0x2b, 0x7b, 0xdf, 0x6e, 0x88, 0xfb, 0x80, 0x06, 0x7f, 0x21, 0x41, 0xe7, 0xd5, 0x2b, 0x90, 0x54, 0x83, 0xf2, 0xba, 0x2c, 0x0a, 0x6a, 0x68, 0xd7, 0x7e, 0x11, 0x66, 0x53, 0x69, 0x77, 0x54,
0xf6, 0x03, 0x4d, 0xe3, 0xc2, 0xc8, 0xf8, 0xa1, 0xe2, 0xbe, 0xa2, 0xc1, 0xc1, 0x94, 0x1a, 0x74, 0x86, 0xe9, 0x27, 0xbe, 0x87, 0x1b, 0x53, 0xa8, 0x01, 0xb5, 0xfb, 0x8e, 0x67, 0x05, 0xfb, 0xe2,
0x74, 0x49, 0xc9, 0x6e, 0x78, 0x21, 0x7d, 0xe3, 0xe9, 0x9d, 0x11, 0x85, 0x82, 0xb8, 0x30, 0x9d, 0x50, 0xda, 0xb0, 0xd1, 0x2c, 0x54, 0xf9, 0xe1, 0x4c, 0x02, 0xf0, 0xca, 0xbf, 0x2c, 0x41, 0xfd,
0x28, 0xcb, 0x46, 0x67, 0x53, 0x4b, 0xd5, 0x06, 0xeb, 0xd3, 0x1b, 0x4f, 0x8e, 0x86, 0x1c, 0x8e, 0x31, 0x17, 0x75, 0x13, 0x07, 0xcf, 0x9c, 0x36, 0x46, 0x26, 0x34, 0xd2, 0xcf, 0xc8, 0xd0, 0x8f,
0x77, 0x07, 0xa6, 0x13, 0xb5, 0xcc, 0x29, 0xe3, 0xa9, 0x2b, 0x9e, 0xb7, 0x5b, 0xd0, 0x37, 0xa1, 0xd4, 0x8e, 0xaa, 0x7e, 0x6d, 0xd6, 0x1a, 0xa5, 0x30, 0x7d, 0x0a, 0x7d, 0x04, 0x33, 0xc9, 0xc7,
0x1a, 0x2b, 0x3a, 0x4e, 0xb1, 0x78, 0x55, 0x61, 0xf2, 0x76, 0xac, 0xef, 0x40, 0x25, 0x5a, 0x1b, 0x58, 0x48, 0x7d, 0x7a, 0x50, 0xbe, 0xd8, 0x3a, 0x88, 0xb9, 0x09, 0xf5, 0xc4, 0xdb, 0x2a, 0x74,
0x8c, 0x16, 0xd3, 0xf6, 0xd2, 0x00, 0xe3, 0x9d, 0x6c, 0xa5, 0x7e, 0xe9, 0xdf, 0x90, 0xad, 0x34, 0x55, 0xc9, 0x5b, 0xf5, 0xfe, 0xaa, 0xa5, 0x3e, 0xd0, 0xc7, 0xdf, 0x3f, 0x09, 0xe9, 0x93, 0x0f,
0x50, 0x2d, 0x39, 0xfa, 0x56, 0x8a, 0xf0, 0x1f, 0xba, 0x95, 0x76, 0x3c, 0xc4, 0x7b, 0x1a, 0xcc, 0x20, 0x32, 0xa4, 0x57, 0xbe, 0x92, 0x38, 0x48, 0x7a, 0x0b, 0xe6, 0x86, 0xde, 0x33, 0xa0, 0x1b,
0xab, 0x4b, 0x4b, 0xd1, 0x52, 0x9a, 0x6d, 0xa6, 0x17, 0xd1, 0x36, 0x2e, 0xed, 0x88, 0x26, 0xd4, 0x4a, 0xfe, 0x59, 0xef, 0x1e, 0x0e, 0xea, 0x62, 0x0f, 0xd0, 0xf0, 0x1b, 0x22, 0x74, 0x53, 0x3d,
0xe2, 0x5d, 0x98, 0x8a, 0x17, 0x50, 0xa6, 0x68, 0x51, 0x59, 0x73, 0xda, 0x38, 0x3b, 0x12, 0x6e, 0x03, 0x59, 0x2f, 0xa8, 0x5a, 0xb7, 0xc6, 0xc6, 0x8f, 0x14, 0xf7, 0xeb, 0x1a, 0x9c, 0xce, 0x78,
0x38, 0xd8, 0xeb, 0x50, 0x8e, 0xfc, 0x18, 0x8c, 0x4e, 0x0d, 0xb1, 0xe3, 0xe8, 0x5f, 0xb2, 0xdb, 0x84, 0x80, 0xee, 0x28, 0xd9, 0x8d, 0x7e, 0x49, 0xd1, 0x7a, 0xf5, 0x70, 0x44, 0x91, 0x20, 0x1e,
0x69, 0xf2, 0x55, 0x28, 0x85, 0xff, 0xf3, 0xa2, 0x93, 0xa9, 0xf6, 0xbb, 0x13, 0x96, 0x6b, 0x00, 0xcc, 0xa6, 0xea, 0xf2, 0xd1, 0xf5, 0xcc, 0x5a, 0xc5, 0xe1, 0x07, 0x0a, 0xad, 0x1f, 0x8d, 0x87,
0xfd, 0x9f, 0x75, 0xd1, 0x13, 0x4a, 0x9e, 0x03, 0x7f, 0xf3, 0x6e, 0xc7, 0x34, 0x9c, 0xbe, 0x78, 0x1c, 0xf5, 0xf7, 0x14, 0x66, 0x53, 0xc5, 0xec, 0x19, 0xfd, 0xa9, 0x4b, 0xde, 0x0f, 0x9a, 0xd0,
0xb6, 0x1e, 0x36, 0xfd, 0x68, 0x9d, 0xc5, 0x76, 0x6c, 0x37, 0xa1, 0x1a, 0xab, 0x8e, 0x4a, 0xdb, 0x0f, 0xa1, 0x9e, 0xa8, 0x3a, 0xcf, 0xb0, 0x78, 0x55, 0x65, 0xfa, 0x41, 0xac, 0x9f, 0x42, 0x2d,
0xc2, 0x8a, 0xa2, 0xb5, 0xc6, 0x99, 0x51, 0x50, 0xc3, 0xf5, 0xdb, 0x84, 0x6a, 0xac, 0x56, 0x25, 0x5e, 0x1c, 0x8e, 0x96, 0xb3, 0x7c, 0x69, 0x88, 0xf1, 0x61, 0x5c, 0x69, 0x50, 0xfb, 0x39, 0xc2,
0x65, 0x24, 0x55, 0x69, 0x4e, 0xca, 0x48, 0xca, 0xd2, 0x17, 0x7d, 0x02, 0xbd, 0x1b, 0x29, 0x8b, 0x95, 0x86, 0xca, 0x65, 0xc7, 0x77, 0xa5, 0x18, 0xff, 0x91, 0xae, 0x74, 0xe8, 0x2e, 0x3e, 0x13,
0x89, 0x95, 0x1e, 0xa1, 0x8b, 0x43, 0xf9, 0xa8, 0x2a, 0xaf, 0x1a, 0x4b, 0x3b, 0x21, 0x09, 0x45, 0x6b, 0x88, 0xa2, 0xb6, 0x18, 0xad, 0x64, 0xd9, 0x66, 0x76, 0x15, 0x75, 0xeb, 0xce, 0xa1, 0x68,
0x90, 0x56, 0x25, 0x54, 0x9a, 0x6e, 0x55, 0x3b, 0x59, 0xa9, 0x35, 0xc8, 0x8b, 0xea, 0x13, 0xa4, 0x22, 0x2d, 0xee, 0xc2, 0x4c, 0xb2, 0x82, 0x36, 0x43, 0x8b, 0xca, 0xa2, 0xe3, 0xd6, 0xf5, 0xb1,
0xa7, 0xd4, 0x99, 0x45, 0x4a, 0x53, 0x1a, 0x8f, 0x29, 0x71, 0xe2, 0x85, 0x19, 0x82, 0xa9, 0xa8, 0x70, 0xa3, 0xce, 0xde, 0x87, 0x6a, 0xec, 0x65, 0x38, 0xba, 0x32, 0xc2, 0x8e, 0xe3, 0xcf, 0xa4,
0x2e, 0x48, 0x61, 0x1a, 0x2b, 0x3d, 0x18, 0x95, 0xa9, 0x01, 0x79, 0xf1, 0xac, 0x98, 0xc2, 0x34, 0x0f, 0xd2, 0xe4, 0xbb, 0x50, 0x89, 0x1e, 0x74, 0xa3, 0xcb, 0x99, 0xf6, 0x7b, 0x18, 0x96, 0x9b,
0xf6, 0x34, 0xde, 0x18, 0x8e, 0xc3, 0xf3, 0xcd, 0xfa, 0x04, 0x5a, 0x85, 0x1c, 0x0f, 0x7a, 0xd1, 0x00, 0x83, 0xd7, 0xda, 0xe8, 0x87, 0x4a, 0x9e, 0x43, 0xcf, 0xb9, 0x0f, 0x62, 0x1a, 0x0d, 0x5f,
0x89, 0x61, 0x2f, 0x6e, 0xc3, 0x38, 0xc6, 0x1e, 0xe5, 0xf4, 0x09, 0xf4, 0x79, 0xc8, 0xf1, 0x14, 0xd4, 0x2d, 0x8c, 0x1a, 0x7e, 0xbc, 0xd0, 0xe6, 0x20, 0xb6, 0x3b, 0x50, 0x4f, 0x94, 0xc7, 0x65,
0x4e, 0x0a, 0xc7, 0xe8, 0xb3, 0x59, 0x63, 0x28, 0x4a, 0x20, 0xa2, 0x05, 0x95, 0x68, 0xae, 0x3c, 0xb9, 0xb0, 0xa2, 0x6a, 0xb1, 0x75, 0x6d, 0x1c, 0xd4, 0x68, 0xfe, 0x76, 0xa0, 0x9e, 0x28, 0x56,
0xe5, 0xc8, 0x52, 0xbc, 0x26, 0x34, 0x46, 0xc1, 0x0c, 0x46, 0x11, 0xdb, 0xa8, 0x7f, 0x01, 0x48, 0xca, 0xe8, 0x49, 0x55, 0x9b, 0x95, 0xd1, 0x93, 0xb2, 0xf6, 0x49, 0x9f, 0x42, 0x9f, 0xc6, 0xea,
0xdf, 0x46, 0x03, 0x97, 0x8b, 0xf4, 0x6d, 0x34, 0x78, 0x9f, 0xd0, 0x27, 0xd0, 0xd7, 0x34, 0xa8, 0xa2, 0x12, 0xb5, 0x67, 0xe8, 0xf6, 0x48, 0x3e, 0xaa, 0xd2, 0xbb, 0xd6, 0xca, 0x61, 0x48, 0x22,
0xa7, 0x25, 0x70, 0x51, 0x6a, 0x04, 0x34, 0x2c, 0x0b, 0xdd, 0x78, 0x66, 0x87, 0x54, 0xa1, 0x2c, 0x11, 0xa4, 0x55, 0x09, 0x95, 0x66, 0x5b, 0xd5, 0x61, 0x66, 0x6a, 0x13, 0x8a, 0xa2, 0xfc, 0x08,
0xef, 0xc0, 0xac, 0x22, 0xcb, 0x87, 0x2e, 0xa4, 0xf1, 0x4b, 0x49, 0x50, 0x36, 0x9e, 0x1a, 0x9d, 0xe9, 0x19, 0x85, 0x86, 0xb1, 0xda, 0xa4, 0xd6, 0x0f, 0x94, 0x38, 0xc9, 0xca, 0x1c, 0xc1, 0x54,
0x20, 0x1c, 0x7b, 0x15, 0x72, 0x3c, 0x3b, 0x97, 0x62, 0x28, 0xd1, 0x64, 0x5f, 0x8a, 0xe9, 0xc5, 0x94, 0x97, 0x64, 0x30, 0x4d, 0xd4, 0x9e, 0x8c, 0xcb, 0xd4, 0x80, 0xa2, 0xb8, 0x57, 0xce, 0x60,
0x92, 0x7b, 0xfa, 0x04, 0xc2, 0x50, 0x89, 0xa6, 0xea, 0x52, 0x2c, 0x45, 0x91, 0xe5, 0x6b, 0x9c, 0x9a, 0xa8, 0x8d, 0x68, 0x8d, 0xc6, 0xe1, 0x17, 0x0e, 0xfa, 0x14, 0xda, 0x80, 0x02, 0x3f, 0xf5,
0x1e, 0x01, 0x33, 0x1c, 0xa6, 0x09, 0xd0, 0x4f, 0x95, 0xa5, 0x9c, 0x43, 0x03, 0xd9, 0xba, 0xc6, 0xa0, 0x4b, 0xa3, 0xae, 0x5c, 0x47, 0x71, 0x4c, 0xdc, 0xca, 0xea, 0x53, 0xe8, 0x97, 0xa1, 0xc0,
0xa9, 0x6d, 0xf1, 0xa2, 0x47, 0x72, 0x24, 0xf9, 0x95, 0x72, 0x26, 0x0d, 0xa6, 0xc7, 0x46, 0xb8, 0x73, 0x78, 0x19, 0x1c, 0xe3, 0xf7, 0xa6, 0xad, 0x91, 0x28, 0xa1, 0x88, 0x36, 0xd4, 0xe2, 0x97,
0x27, 0x0c, 0x26, 0x62, 0x52, 0xee, 0x09, 0xa9, 0x39, 0x9f, 0xc6, 0x85, 0x91, 0xf1, 0xc3, 0xf9, 0x25, 0x19, 0x4b, 0x96, 0xe2, 0x3a, 0xa9, 0x35, 0x0e, 0x66, 0xd8, 0x8b, 0x70, 0xa3, 0xc1, 0x09,
0xbc, 0x0d, 0xb5, 0x64, 0xe2, 0x2a, 0xe5, 0xfe, 0x99, 0x92, 0x3e, 0x6b, 0x9c, 0x1b, 0x11, 0x3b, 0x30, 0xdb, 0x8d, 0x86, 0x4e, 0x97, 0xd9, 0x6e, 0x34, 0x7c, 0xa0, 0xd4, 0xa7, 0xd0, 0x6f, 0x6a,
0x7a, 0x56, 0x1d, 0x1e, 0x94, 0xe9, 0x0b, 0x36, 0xdd, 0xe4, 0x39, 0x93, 0x51, 0x66, 0x1d, 0x4d, 0xd0, 0xcc, 0xca, 0xe0, 0xa3, 0xcc, 0x1d, 0xd0, 0xa8, 0x6b, 0x88, 0xd6, 0x6b, 0x87, 0xa4, 0x8a,
0xcf, 0x8c, 0x32, 0xeb, 0x58, 0x32, 0x46, 0x9f, 0x58, 0xea, 0x41, 0x65, 0xd5, 0xf7, 0x1e, 0x6c, 0x64, 0xf9, 0x04, 0xe6, 0x15, 0x69, 0x5e, 0x74, 0x2b, 0x8b, 0x5f, 0x46, 0x86, 0xba, 0xf5, 0xe3,
0x05, 0xb7, 0xf0, 0xff, 0x8e, 0x75, 0x5e, 0x7d, 0xe6, 0x8b, 0x97, 0xda, 0x36, 0xdd, 0xec, 0xad, 0xf1, 0x09, 0xa2, 0xbe, 0x37, 0xa0, 0xc0, 0xd3, 0xb3, 0x19, 0x86, 0x12, 0xcf, 0xf6, 0x66, 0x98,
0xb3, 0xf5, 0xbf, 0x20, 0x70, 0xcf, 0xd9, 0x9e, 0xfc, 0xba, 0x60, 0xbb, 0x14, 0xfb, 0xae, 0xe9, 0x5e, 0x22, 0xbb, 0xab, 0x4f, 0x21, 0x0c, 0xb5, 0x78, 0xae, 0x36, 0xc3, 0x52, 0x14, 0x69, 0xde,
0x5c, 0xe0, 0xbc, 0x24, 0xb4, 0xbb, 0xbe, 0x9e, 0xe7, 0xed, 0x4b, 0xff, 0x09, 0x00, 0x00, 0xff, 0xd6, 0xd5, 0x31, 0x30, 0xa3, 0x6e, 0x4c, 0x80, 0x41, 0xae, 0x34, 0x63, 0x1d, 0x1a, 0x4a, 0xd7,
0xff, 0xef, 0xdb, 0xd5, 0x05, 0x68, 0x46, 0x00, 0x00, 0xb6, 0xae, 0x1c, 0x88, 0x17, 0x5f, 0x92, 0x63, 0xd9, 0xcf, 0x8c, 0x35, 0x69, 0x38, 0x3f, 0x3a,
0xc6, 0x39, 0x61, 0x38, 0x13, 0x97, 0x71, 0x4e, 0xc8, 0x4c, 0xfa, 0xb5, 0x6e, 0x8d, 0x8d, 0x1f,
0x8d, 0xe7, 0x63, 0x68, 0xa4, 0x33, 0x97, 0x19, 0xe7, 0xcf, 0x8c, 0xfc, 0x69, 0xeb, 0xc6, 0x98,
0xd8, 0xf1, 0xb5, 0xea, 0xec, 0xb0, 0x4c, 0xbf, 0xe2, 0xd0, 0x1d, 0x9e, 0x34, 0x1b, 0x67, 0xd4,
0xf1, 0xfc, 0xdc, 0x38, 0xa3, 0x4e, 0x64, 0xe3, 0xe4, 0xc2, 0xc2, 0xb3, 0x03, 0x59, 0x0b, 0x4b,
0x3c, 0x0f, 0x94, 0xb1, 0x06, 0x24, 0x53, 0x2b, 0x62, 0x6b, 0x98, 0xcc, 0x71, 0xa0, 0xec, 0x35,
0x7c, 0x28, 0x6d, 0x92, 0xb1, 0x35, 0x54, 0x27, 0x4d, 0xf4, 0xa9, 0x95, 0x3e, 0xd4, 0x36, 0x02,
0xff, 0xf9, 0x7e, 0x98, 0x47, 0xf8, 0xd9, 0xf8, 0xd7, 0xfd, 0xd7, 0x7e, 0xf5, 0x4e, 0xc7, 0xa1,
0x3b, 0xfd, 0x2d, 0x66, 0xc1, 0xb7, 0x04, 0xee, 0x0d, 0xc7, 0x97, 0x5f, 0xb7, 0x1c, 0x8f, 0xe2,
0xc0, 0xb3, 0xdc, 0x5b, 0x9c, 0x97, 0x84, 0xf6, 0xb6, 0xb6, 0x8a, 0xfc, 0xff, 0xce, 0xff, 0x07,
0x00, 0x00, 0xff, 0xff, 0x0f, 0x2e, 0x5d, 0x0a, 0x2b, 0x49, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -5312,6 +5538,9 @@ type MilvusServiceClient interface {
GetCompactionState(ctx context.Context, in *GetCompactionStateRequest, opts ...grpc.CallOption) (*GetCompactionStateResponse, error) GetCompactionState(ctx context.Context, in *GetCompactionStateRequest, opts ...grpc.CallOption) (*GetCompactionStateResponse, error)
ManualCompaction(ctx context.Context, in *ManualCompactionRequest, opts ...grpc.CallOption) (*ManualCompactionResponse, error) ManualCompaction(ctx context.Context, in *ManualCompactionRequest, opts ...grpc.CallOption) (*ManualCompactionResponse, error)
GetCompactionStateWithPlans(ctx context.Context, in *GetCompactionPlansRequest, opts ...grpc.CallOption) (*GetCompactionPlansResponse, error) GetCompactionStateWithPlans(ctx context.Context, in *GetCompactionPlansRequest, opts ...grpc.CallOption) (*GetCompactionPlansResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(ctx context.Context, in *ImportRequest, opts ...grpc.CallOption) (*ImportResponse, error)
GetImportState(ctx context.Context, in *GetImportStateRequest, opts ...grpc.CallOption) (*GetImportStateResponse, error)
} }
type milvusServiceClient struct { type milvusServiceClient struct {
@ -5673,6 +5902,24 @@ func (c *milvusServiceClient) GetCompactionStateWithPlans(ctx context.Context, i
return out, nil return out, nil
} }
func (c *milvusServiceClient) Import(ctx context.Context, in *ImportRequest, opts ...grpc.CallOption) (*ImportResponse, error) {
out := new(ImportResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/Import", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *milvusServiceClient) GetImportState(ctx context.Context, in *GetImportStateRequest, opts ...grpc.CallOption) (*GetImportStateResponse, error) {
out := new(GetImportStateResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/GetImportState", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// MilvusServiceServer is the server API for MilvusService service. // MilvusServiceServer is the server API for MilvusService service.
type MilvusServiceServer interface { type MilvusServiceServer interface {
CreateCollection(context.Context, *CreateCollectionRequest) (*commonpb.Status, error) CreateCollection(context.Context, *CreateCollectionRequest) (*commonpb.Status, error)
@ -5716,6 +5963,9 @@ type MilvusServiceServer interface {
GetCompactionState(context.Context, *GetCompactionStateRequest) (*GetCompactionStateResponse, error) GetCompactionState(context.Context, *GetCompactionStateRequest) (*GetCompactionStateResponse, error)
ManualCompaction(context.Context, *ManualCompactionRequest) (*ManualCompactionResponse, error) ManualCompaction(context.Context, *ManualCompactionRequest) (*ManualCompactionResponse, error)
GetCompactionStateWithPlans(context.Context, *GetCompactionPlansRequest) (*GetCompactionPlansResponse, error) GetCompactionStateWithPlans(context.Context, *GetCompactionPlansRequest) (*GetCompactionPlansResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
Import(context.Context, *ImportRequest) (*ImportResponse, error)
GetImportState(context.Context, *GetImportStateRequest) (*GetImportStateResponse, error)
} }
// UnimplementedMilvusServiceServer can be embedded to have forward compatible implementations. // UnimplementedMilvusServiceServer can be embedded to have forward compatible implementations.
@ -5839,6 +6089,12 @@ func (*UnimplementedMilvusServiceServer) ManualCompaction(ctx context.Context, r
func (*UnimplementedMilvusServiceServer) GetCompactionStateWithPlans(ctx context.Context, req *GetCompactionPlansRequest) (*GetCompactionPlansResponse, error) { func (*UnimplementedMilvusServiceServer) GetCompactionStateWithPlans(ctx context.Context, req *GetCompactionPlansRequest) (*GetCompactionPlansResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetCompactionStateWithPlans not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetCompactionStateWithPlans not implemented")
} }
func (*UnimplementedMilvusServiceServer) Import(ctx context.Context, req *ImportRequest) (*ImportResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Import not implemented")
}
func (*UnimplementedMilvusServiceServer) GetImportState(ctx context.Context, req *GetImportStateRequest) (*GetImportStateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetImportState not implemented")
}
func RegisterMilvusServiceServer(s *grpc.Server, srv MilvusServiceServer) { func RegisterMilvusServiceServer(s *grpc.Server, srv MilvusServiceServer) {
s.RegisterService(&_MilvusService_serviceDesc, srv) s.RegisterService(&_MilvusService_serviceDesc, srv)
@ -6546,6 +6802,42 @@ func _MilvusService_GetCompactionStateWithPlans_Handler(srv interface{}, ctx con
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _MilvusService_Import_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ImportRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MilvusServiceServer).Import(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.milvus.MilvusService/Import",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).Import(ctx, req.(*ImportRequest))
}
return interceptor(ctx, in, info, handler)
}
func _MilvusService_GetImportState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetImportStateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MilvusServiceServer).GetImportState(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.milvus.MilvusService/GetImportState",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).GetImportState(ctx, req.(*GetImportStateRequest))
}
return interceptor(ctx, in, info, handler)
}
var _MilvusService_serviceDesc = grpc.ServiceDesc{ var _MilvusService_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.milvus.MilvusService", ServiceName: "milvus.proto.milvus.MilvusService",
HandlerType: (*MilvusServiceServer)(nil), HandlerType: (*MilvusServiceServer)(nil),
@ -6706,6 +6998,14 @@ var _MilvusService_serviceDesc = grpc.ServiceDesc{
MethodName: "GetCompactionStateWithPlans", MethodName: "GetCompactionStateWithPlans",
Handler: _MilvusService_GetCompactionStateWithPlans_Handler, Handler: _MilvusService_GetCompactionStateWithPlans_Handler,
}, },
{
MethodName: "Import",
Handler: _MilvusService_Import_Handler,
},
{
MethodName: "GetImportState",
Handler: _MilvusService_GetImportState_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "milvus.proto", Metadata: "milvus.proto",

View File

@ -206,6 +206,18 @@ func (coord *DataCoordMock) DropVirtualChannel(ctx context.Context, req *datapb.
return &datapb.DropVirtualChannelResponse{}, nil return &datapb.DropVirtualChannelResponse{}, nil
} }
func (coord *DataCoordMock) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
return &milvuspb.ImportResponse{}, nil
}
func (coord *DataCoordMock) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
return &milvuspb.GetImportStateResponse{}, nil
}
func (coord *DataCoordMock) CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error) {
return &commonpb.Status{}, nil
}
func NewDataCoordMock() *DataCoordMock { func NewDataCoordMock() *DataCoordMock {
return &DataCoordMock{ return &DataCoordMock{
nodeID: typeutil.UniqueID(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()), nodeID: typeutil.UniqueID(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),

View File

@ -3939,3 +3939,27 @@ func unhealthyStatus() *commonpb.Status {
Reason: "proxy not healthy", Reason: "proxy not healthy",
} }
} }
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
func (node *Proxy) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) {
log.Info("received Import request")
resp := &milvuspb.ImportResponse{}
if !node.checkHealthy() {
resp.Status = unhealthyStatus()
return resp, nil
}
return resp, nil
}
// Check import task state from datanode
func (node *Proxy) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
log.Info("received GetImportState request", zap.Int64("taskID", req.GetTask()))
resp := &milvuspb.GetImportStateResponse{}
if !node.checkHealthy() {
resp.Status = unhealthyStatus()
return resp, nil
}
return resp, nil
}

View File

@ -68,6 +68,15 @@ type DataNode interface {
GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
// Compaction will add a compaction task according to the request plan // Compaction will add a compaction task according to the request plan
Compaction(ctx context.Context, req *datapb.CompactionPlan) (*commonpb.Status, error) Compaction(ctx context.Context, req *datapb.CompactionPlan) (*commonpb.Status, error)
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including file path and options
//
// Return status indicates if this operation is processed successfully or fail cause;
// error is always nil
Import(ctx context.Context, req *milvuspb.ImportRequest) (*commonpb.Status, error)
} }
// DataNodeComponent is used by grpc server of DataNode // DataNodeComponent is used by grpc server of DataNode
@ -256,6 +265,35 @@ type DataCoord interface {
// response status contains the status/error code and failing reason if any // response status contains the status/error code and failing reason if any
// error is returned only when some communication issue occurs // error is returned only when some communication issue occurs
DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest) (*datapb.DropVirtualChannelResponse, error) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest) (*datapb.DropVirtualChannelResponse, error)
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including file path and options
//
// The `Status` in response struct `ImportResponse` indicates if this operation is processed successfully or fail cause;
// the `tasks` in `ImportResponse` return an id list of tasks.
// error is always nil
Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error)
// Check import task state from datanode
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including a task id
//
// The `Status` in response struct `GetImportStateResponse` indicates if this operation is processed successfully or fail cause;
// the `state` in `GetImportStateResponse` return the state of the import task.
// error is always nil
GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error)
// Report impot task state to datacoord
//
// ctx is the context to control request deadline and cancellation
// req contains the import results, including imported row count and an id list of generated segments
//
// response status contains the status/error code and failing reason if any error is returned
// error is always nil
CompleteImport(ctx context.Context, req *datapb.ImportResult) (*commonpb.Status, error)
} }
// DataCoordComponent defines the interface of DataCoord component. // DataCoordComponent defines the interface of DataCoord component.
@ -1030,6 +1068,26 @@ type ProxyComponent interface {
GetCompactionStateWithPlans(ctx context.Context, req *milvuspb.GetCompactionPlansRequest) (*milvuspb.GetCompactionPlansResponse, error) GetCompactionStateWithPlans(ctx context.Context, req *milvuspb.GetCompactionPlansRequest) (*milvuspb.GetCompactionPlansResponse, error)
// GetFlushState gets the flush state of multiple segments // GetFlushState gets the flush state of multiple segments
GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error)
// Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including file path and options
//
// The `Status` in response struct `ImportResponse` indicates if this operation is processed successfully or fail cause;
// the `tasks` in `ImportResponse` return an id list of tasks.
// error is always nil
Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error)
// Check import task state from datanode
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including a task id
//
// The `Status` in response struct `GetImportStateResponse` indicates if this operation is processed successfully or fail cause;
// the `state` in `GetImportStateResponse` return the state of the import task.
// error is always nil
GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error)
} }
// QueryNode is the interface `querynode` package implements // QueryNode is the interface `querynode` package implements

View File

@ -118,3 +118,15 @@ func (m *DataCoordClient) GetFlushState(ctx context.Context, req *milvuspb.GetFl
func (m *DataCoordClient) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest, opts ...grpc.CallOption) (*datapb.DropVirtualChannelResponse, error) { func (m *DataCoordClient) DropVirtualChannel(ctx context.Context, req *datapb.DropVirtualChannelRequest, opts ...grpc.CallOption) (*datapb.DropVirtualChannelResponse, error) {
return &datapb.DropVirtualChannelResponse{}, m.Err return &datapb.DropVirtualChannelResponse{}, m.Err
} }
func (m *DataCoordClient) Import(ctx context.Context, req *milvuspb.ImportRequest, opts ...grpc.CallOption) (*milvuspb.ImportResponse, error) {
return &milvuspb.ImportResponse{}, m.Err
}
func (m *DataCoordClient) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest, opts ...grpc.CallOption) (*milvuspb.GetImportStateResponse, error) {
return &milvuspb.GetImportStateResponse{}, m.Err
}
func (m *DataCoordClient) CompleteImport(ctx context.Context, req *datapb.ImportResult, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{}, m.Err
}

View File

@ -54,3 +54,7 @@ func (m *DataNodeClient) GetMetrics(ctx context.Context, in *milvuspb.GetMetrics
func (m *DataNodeClient) Compaction(ctx context.Context, req *datapb.CompactionPlan, opts ...grpc.CallOption) (*commonpb.Status, error) { func (m *DataNodeClient) Compaction(ctx context.Context, req *datapb.CompactionPlan, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{}, m.Err return &commonpb.Status{}, m.Err
} }
func (m *DataNodeClient) Import(ctx context.Context, req *milvuspb.ImportRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{}, m.Err
}

View File

@ -27,7 +27,7 @@ echo "mode: atomic" > ${FILE_COVERAGE_INFO}
echo "Running unittest under ./internal" echo "Running unittest under ./internal"
if [[ "$(uname -s)" == "Darwin" ]]; then if [[ "$(uname -s)" == "Darwin" ]]; then
export MallocNanoZone=0 export MallocNanoZone=0
for d in $(go list ./internal... | grep -v -e vendor -e internal/querycoord -e /metricsinfo -e internal/proxy -e internal/querynode); do for d in $(go list ./internal/... | grep -v -e vendor -e internal/querycoord -e /metricsinfo -e internal/proxy -e internal/querynode); do
go test -race -v -coverpkg=./... -coverprofile=profile.out -covermode=atomic "$d" go test -race -v -coverpkg=./... -coverprofile=profile.out -covermode=atomic "$d"
if [ -f profile.out ]; then if [ -f profile.out ]; then
sed '1d' profile.out >> ${FILE_COVERAGE_INFO} sed '1d' profile.out >> ${FILE_COVERAGE_INFO}
@ -35,7 +35,7 @@ if [[ "$(uname -s)" == "Darwin" ]]; then
fi fi
done done
else else
for d in $(go list ./internal... | grep -v vendor); do for d in $(go list ./internal/... | grep -v vendor); do
go test -race -v -coverpkg=./... -coverprofile=profile.out -covermode=atomic "$d" go test -race -v -coverpkg=./... -coverprofile=profile.out -covermode=atomic "$d"
if [ -f profile.out ]; then if [ -f profile.out ]; then
sed '1d' profile.out >> ${FILE_COVERAGE_INFO} sed '1d' profile.out >> ${FILE_COVERAGE_INFO}