BackendPlugin: Change QueryData response format (#23234)

* BackendPlugin: (wip) change response format
goes with https://github.com/grafana/grafana-plugin-sdk-go/pull/109

* fix error mapping in wrapper

* latest of my sdk branch

* latest of my sdk branch

* TransformWrapper fixes

* latest of sdk branch (removes extra meta)

* add metadata in wrappers

* also set error string

* sdk: v0.35.0
This commit is contained in:
Kyle Brandt authored and GitHub committed 2020-04-07 10:13:14 -04:00
1 parent afd8ffde69
commit f6cbb26167
9 files changed
+255 -179

No files matched your search

+27 -1
View File
@@ -657,7 +657,7 @@ func UnmarshalArrow(b []byte) (*Frame, error) {
if metaAsString, ok := getMDKey("meta", metaData); ok {
var err error
frame.Meta, err = QueryResultMetaFromJSON(metaAsString)
frame.Meta, err = FrameMetaFromJSON(metaAsString)
if err != nil {
return nil, err
}
@@ -692,3 +692,29 @@ func toJSONString(val interface{}) (string, error) {
}
return string(b), nil
}
// BytesSliceToFrames decodes a slice of encoded Arrow frames to a slice of *Frame.
func BytesSliceToFrames(bFrames [][]byte) ([]*Frame, error) {
frames := make([]*Frame, len(bFrames))
var err error
for i, encodedFrame := range bFrames {
frames[i], err = UnmarshalArrow(encodedFrame)
if err != nil {
return nil, err
}
}
return frames, nil
}
// FramesToBytesSlice encodes a slice of Frames into a slice of []byte.
func FramesToBytesSlice(frames []*Frame) ([][]byte, error) {
bs := make([][]byte, len(frames))
var err error
for i, frame := range frames {
bs[i], err = MarshalArrow(frame)
if err != nil {
return nil, err
}
}
return bs, nil
}
+15 -48
View File
@@ -28,7 +28,7 @@ type Frame struct {
Fields []*Field
RefID string
Meta *QueryResultMeta
Meta *FrameMeta
Warnings []Warning
}
@@ -263,29 +263,13 @@ func FrameTestCompareOptions() []cmp.Option {
if x == nil && y == nil {
return true
}
if y == nil {
if math.IsNaN(float64(*x)) {
return true
}
if math.IsInf(float64(*x), 1) {
return true
}
if math.IsInf(float64(*x), -1) {
return true
}
if y == nil && x != nil || y != nil && x == nil {
return false
}
if x == nil {
if math.IsNaN(float64(*y)) {
return true
}
if math.IsInf(float64(*y), 1) {
return true
}
if math.IsInf(float64(*y), -1) {
return true
}
}
return *x == *y
return (math.IsNaN(float64(*x)) && math.IsNaN(float64(*y))) ||
(math.IsInf(float64(*x), 1) && math.IsInf(float64(*y), 1)) ||
(math.IsInf(float64(*x), -1) && math.IsInf(float64(*y), -1)) ||
*x == *y
})
f64s := cmp.Comparer(func(x, y float64) bool {
return (math.IsNaN(x) && math.IsNaN(y)) ||
@@ -297,29 +281,13 @@ func FrameTestCompareOptions() []cmp.Option {
if x == nil && y == nil {
return true
}
if y == nil {
if math.IsNaN(float64(*x)) {
return true
}
if math.IsInf(float64(*x), 1) {
return true
}
if math.IsInf(float64(*x), -1) {
return true
}
if y == nil && x != nil || y != nil && x == nil {
return false
}
if x == nil {
if math.IsNaN(float64(*y)) {
return true
}
if math.IsInf(float64(*y), 1) {
return true
}
if math.IsInf(float64(*y), -1) {
return true
}
}
return *x == *y
return (math.IsNaN(float64(*x)) && math.IsNaN(float64(*y))) ||
(math.IsInf(float64(*x), 1) && math.IsInf(float64(*y), 1)) ||
(math.IsInf(float64(*x), -1) && math.IsInf(float64(*y), -1)) ||
*x == *y
})
f32s := cmp.Comparer(func(x, y float32) bool {
return (math.IsNaN(float64(x)) && math.IsNaN(float64(y))) ||
@@ -369,6 +337,8 @@ func (f *Frame) StringTable(maxFields, maxRows int) (string, error) {
sb := &strings.Builder{}
sb.WriteString(fmt.Sprintf("Name: %v\n", f.Name))
sb.WriteString(fmt.Sprintf("Dimensions: %v Fields by %v Rows\n", len(f.Fields), rowLen))
table := tablewriter.NewWriter(sb)
// table formatting options
@@ -377,9 +347,6 @@ func (f *Frame) StringTable(maxFields, maxRows int) (string, error) {
table.SetAutoWrapText(false)
table.SetAlignment(tablewriter.ALIGN_LEFT)
// (caption is below the table)
table.SetCaption(true, fmt.Sprintf("Field Count: %v\nRow Count: %v", len(f.Fields), rowLen))
// set table headers
headers := make([]string, width)
for colIdx, field := range f.Fields {
@@ -2,24 +2,24 @@ package data
import "encoding/json"
// QueryResultMeta matches:
// FrameMeta matches:
// https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L11
// NOTE -- in javascript this can accept any `[key: string]: any;` however
// this interface only exposes the values we want to be exposed
type QueryResultMeta struct {
// Used in Explore for highlighting
SearchWords []string `json:"searchWords,omitempty"`
// Used in Explore to show limit applied to search result
Limit int64 `json:"limit,omitempty"`
type FrameMeta struct {
// Datasource specific values
Custom map[string]interface{} `json:"custom,omitempty"`
// Stats is TODO
Stats interface{} `json:"stats,omitempty"`
// Notices is TODO
Notices interface{} `json:"notices,omitempty"`
}
// QueryResultMetaFromJSON creates a QueryResultMeta from a json string
func QueryResultMetaFromJSON(jsonStr string) (*QueryResultMeta, error) {
var m QueryResultMeta
// FrameMetaFromJSON creates a QueryResultMeta from a json string
func FrameMetaFromJSON(jsonStr string) (*FrameMeta, error) {
var m FrameMeta
err := json.Unmarshal([]byte(jsonStr), &m)
if err != nil {
return nil, err
@@ -49,7 +49,7 @@ func (x CheckHealthResponse_HealthStatus) String() string {
}
func (CheckHealthResponse_HealthStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13, 0}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{14, 0}
}
type DataSourceConfig struct {
@@ -677,14 +677,11 @@ func (m *QueryDataRequest) GetQueries() []*DataQuery {
}
type QueryDataResponse struct {
// Arrow encoded DataFrames
// Each frame encodes its own: Errors, meta, and refId
Frames [][]byte `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"`
// Additional response metadata
Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
// Map of refId to response
Responses map[string]*DataResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryDataResponse) Reset() { *m = QueryDataResponse{} }
@@ -712,16 +709,66 @@ func (m *QueryDataResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_QueryDataResponse proto.InternalMessageInfo
func (m *QueryDataResponse) GetFrames() [][]byte {
func (m *QueryDataResponse) GetResponses() map[string]*DataResponse {
if m != nil {
return m.Responses
}
return nil
}
type DataResponse struct {
// Arrow encoded DataFrames
// Frame has its own meta, warnings, and repeats refId
Frames [][]byte `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"`
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
JsonMeta []byte `protobuf:"bytes,3,opt,name=jsonMeta,proto3" json:"jsonMeta,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DataResponse) Reset() { *m = DataResponse{} }
func (m *DataResponse) String() string { return proto.CompactTextString(m) }
func (*DataResponse) ProtoMessage() {}
func (*DataResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10}
}
func (m *DataResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DataResponse.Unmarshal(m, b)
}
func (m *DataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DataResponse.Marshal(b, m, deterministic)
}
func (m *DataResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_DataResponse.Merge(m, src)
}
func (m *DataResponse) XXX_Size() int {
return xxx_messageInfo_DataResponse.Size(m)
}
func (m *DataResponse) XXX_DiscardUnknown() {
xxx_messageInfo_DataResponse.DiscardUnknown(m)
}
var xxx_messageInfo_DataResponse proto.InternalMessageInfo
func (m *DataResponse) GetFrames() [][]byte {
if m != nil {
return m.Frames
}
return nil
}
func (m *QueryDataResponse) GetMetadata() map[string]string {
func (m *DataResponse) GetError() string {
if m != nil {
return m.Metadata
return m.Error
}
return ""
}
func (m *DataResponse) GetJsonMeta() []byte {
if m != nil {
return m.JsonMeta
}
return nil
}
@@ -736,7 +783,7 @@ func (m *CollectMetricsRequest) Reset() { *m = CollectMetricsRequest{} }
func (m *CollectMetricsRequest) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsRequest) ProtoMessage() {}
func (*CollectMetricsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11}
}
func (m *CollectMetricsRequest) XXX_Unmarshal(b []byte) error {
@@ -768,7 +815,7 @@ func (m *CollectMetricsResponse) Reset() { *m = CollectMetricsResponse{}
func (m *CollectMetricsResponse) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsResponse) ProtoMessage() {}
func (*CollectMetricsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12}
}
func (m *CollectMetricsResponse) XXX_Unmarshal(b []byte) error {
@@ -807,7 +854,7 @@ func (m *CollectMetricsResponse_Payload) Reset() { *m = CollectMetricsRe
func (m *CollectMetricsResponse_Payload) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsResponse_Payload) ProtoMessage() {}
func (*CollectMetricsResponse_Payload) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11, 0}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12, 0}
}
func (m *CollectMetricsResponse_Payload) XXX_Unmarshal(b []byte) error {
@@ -846,7 +893,7 @@ func (m *CheckHealthRequest) Reset() { *m = CheckHealthRequest{} }
func (m *CheckHealthRequest) String() string { return proto.CompactTextString(m) }
func (*CheckHealthRequest) ProtoMessage() {}
func (*CheckHealthRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13}
}
func (m *CheckHealthRequest) XXX_Unmarshal(b []byte) error {
@@ -887,7 +934,7 @@ func (m *CheckHealthResponse) Reset() { *m = CheckHealthResponse{} }
func (m *CheckHealthResponse) String() string { return proto.CompactTextString(m) }
func (*CheckHealthResponse) ProtoMessage() {}
func (*CheckHealthResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{14}
}
func (m *CheckHealthResponse) XXX_Unmarshal(b []byte) error {
@@ -946,7 +993,8 @@ func init() {
proto.RegisterType((*QueryDataRequest)(nil), "pluginv2.QueryDataRequest")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.QueryDataRequest.HeadersEntry")
proto.RegisterType((*QueryDataResponse)(nil), "pluginv2.QueryDataResponse")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.QueryDataResponse.MetadataEntry")
proto.RegisterMapType((map[string]*DataResponse)(nil), "pluginv2.QueryDataResponse.ResponsesEntry")
proto.RegisterType((*DataResponse)(nil), "pluginv2.DataResponse")
proto.RegisterType((*CollectMetricsRequest)(nil), "pluginv2.CollectMetricsRequest")
proto.RegisterType((*CollectMetricsResponse)(nil), "pluginv2.CollectMetricsResponse")
proto.RegisterType((*CollectMetricsResponse_Payload)(nil), "pluginv2.CollectMetricsResponse.Payload")
@@ -957,77 +1005,79 @@ func init() {
func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) }
var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{
// 1115 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x2e, 0x49, 0xfd, 0x71, 0xa4, 0x18, 0xea, 0x5a, 0x71, 0x08, 0x35, 0x49, 0x05, 0x22, 0x40,
0x95, 0x14, 0x15, 0x5a, 0xe5, 0xd0, 0x22, 0x39, 0xc5, 0x96, 0x0a, 0xc7, 0x8e, 0x7f, 0xba, 0x8a,
0x51, 0x20, 0x45, 0x0f, 0x2b, 0x72, 0x2d, 0xb1, 0xe6, 0x8f, 0xcc, 0x5d, 0x1a, 0xf5, 0x03, 0x14,
0x7d, 0x81, 0x3e, 0x47, 0xfa, 0x14, 0x3d, 0xf5, 0xd8, 0x43, 0x5f, 0xa7, 0xd8, 0xe5, 0x52, 0x24,
0x6d, 0xc9, 0x46, 0x5b, 0xe7, 0xb6, 0x33, 0x9c, 0x9d, 0x9d, 0xf9, 0xe6, 0x9b, 0xcf, 0x32, 0xdc,
0x9b, 0x12, 0xe7, 0x8c, 0x86, 0xee, 0x60, 0x11, 0x47, 0x3c, 0x42, 0x8d, 0x85, 0x9f, 0xcc, 0xbc,
0xf0, 0x62, 0x68, 0xff, 0x69, 0x40, 0x7b, 0x44, 0x38, 0x99, 0x44, 0x49, 0xec, 0xd0, 0x9d, 0x28,
0x3c, 0xf5, 0x66, 0x68, 0x03, 0x74, 0xcf, 0xb5, 0xb4, 0x9e, 0xd6, 0x37, 0xb0, 0xee, 0xb9, 0x08,
0x41, 0x25, 0x24, 0x01, 0xb5, 0xf4, 0x9e, 0xd6, 0x37, 0xb1, 0x3c, 0xa3, 0x36, 0x18, 0x49, 0xec,
0x5b, 0x86, 0x74, 0x89, 0xa3, 0x88, 0x4a, 0x18, 0x8d, 0xad, 0x4a, 0x1a, 0x25, 0xce, 0xa8, 0x0b,
0x0d, 0x97, 0x70, 0x32, 0x25, 0x8c, 0x5a, 0x55, 0xe9, 0x5f, 0xda, 0xe8, 0x19, 0xb4, 0xa7, 0x84,
0x79, 0xce, 0xab, 0x84, 0xcf, 0xc7, 0x21, 0x99, 0xfa, 0xd4, 0xb5, 0x6a, 0x3d, 0xad, 0xdf, 0xc0,
0xd7, 0xfc, 0xe8, 0x89, 0xe8, 0x40, 0xf9, 0x4e, 0xc4, 0x23, 0x75, 0x99, 0xac, 0xec, 0x14, 0xaf,
0xfd, 0xc4, 0xa2, 0x50, 0xf4, 0x63, 0x35, 0x7a, 0x5a, 0xbf, 0x85, 0x97, 0x36, 0x3a, 0x87, 0x07,
0x2e, 0x75, 0xe2, 0xcb, 0x05, 0xa7, 0xee, 0x84, 0x3a, 0x49, 0x4c, 0xf7, 0xb2, 0x50, 0xb3, 0x67,
0xf4, 0x9b, 0xc3, 0xaf, 0x07, 0x19, 0x28, 0x83, 0xab, 0x80, 0x0c, 0x46, 0xab, 0x6f, 0x8e, 0x43,
0x1e, 0x5f, 0xe2, 0x75, 0x79, 0x45, 0xd1, 0x3e, 0x61, 0xfc, 0x64, 0xe1, 0x12, 0x4e, 0xdd, 0x83,
0x89, 0x05, 0x12, 0xd1, 0xb2, 0xb3, 0xbb, 0x07, 0x0f, 0x6f, 0x4a, 0x2f, 0x80, 0x3e, 0xa3, 0x97,
0x72, 0x1a, 0x26, 0x16, 0x47, 0xd4, 0x81, 0xea, 0x05, 0xf1, 0x93, 0x6c, 0x1e, 0xa9, 0xf1, 0x42,
0xff, 0x46, 0xb3, 0x7f, 0x31, 0xa0, 0x75, 0x2c, 0xbb, 0x50, 0x93, 0xec, 0x40, 0x35, 0x8a, 0x67,
0xaf, 0xb3, 0x61, 0xa6, 0x86, 0xc0, 0x29, 0xed, 0xf5, 0xb5, 0xab, 0x72, 0x2c, 0xed, 0x12, 0x86,
0xc6, 0x15, 0x0c, 0x83, 0xf5, 0x18, 0x56, 0x24, 0x86, 0xcf, 0x73, 0x0c, 0x8b, 0x65, 0xdc, 0x15,
0x7e, 0xd5, 0x15, 0xf8, 0xa1, 0x6f, 0xa1, 0x2d, 0x28, 0xc5, 0x0a, 0xf3, 0x92, 0x34, 0x6a, 0x0e,
0xbb, 0xeb, 0x27, 0x8a, 0xaf, 0xdd, 0xb9, 0xd3, 0x39, 0xbc, 0x83, 0x8a, 0x24, 0x64, 0x07, 0xaa,
0x7e, 0x34, 0xf3, 0x42, 0x75, 0x2b, 0x35, 0x56, 0xae, 0x53, 0x07, 0xaa, 0x34, 0x20, 0x5e, 0xb6,
0x50, 0xa9, 0x21, 0x22, 0xe3, 0xc8, 0xa7, 0xd9, 0x4a, 0x89, 0xb3, 0xfd, 0x04, 0x60, 0xc2, 0x63,
0x2f, 0x9c, 0xbd, 0xf1, 0x18, 0x47, 0x5b, 0x50, 0x93, 0xcf, 0x32, 0x4b, 0xeb, 0x19, 0x7d, 0x13,
0x2b, 0xcb, 0xfe, 0x4b, 0x87, 0xcd, 0x1d, 0xe2, 0xfb, 0x98, 0xa6, 0x4d, 0x62, 0x7a, 0x9e, 0x50,
0xc6, 0xd1, 0x00, 0x6a, 0x4e, 0x8a, 0x91, 0x26, 0x31, 0xda, 0x5a, 0x3d, 0x31, 0xac, 0xa2, 0x90,
0xad, 0x96, 0x5a, 0x97, 0xd1, 0x1b, 0x79, 0xb4, 0xe8, 0x4f, 0x2d, 0x39, 0x82, 0xca, 0x82, 0xf0,
0xb9, 0x2a, 0x5d, 0x9e, 0x45, 0x5d, 0x01, 0xe5, 0xf3, 0xc8, 0x55, 0xb5, 0x2b, 0x2b, 0x93, 0x8d,
0x6a, 0x2e, 0x1b, 0x23, 0xa8, 0xcf, 0x29, 0x71, 0x69, 0xcc, 0xac, 0x9a, 0x24, 0xd1, 0xb3, 0xfc,
0x91, 0x15, 0x1d, 0x0c, 0x76, 0xd3, 0xe0, 0x94, 0x3b, 0xd9, 0x55, 0x51, 0xc3, 0x34, 0x72, 0x2f,
0xa5, 0x2e, 0xb4, 0xb0, 0x3c, 0x77, 0x8f, 0xa1, 0x55, 0x0c, 0x5e, 0x31, 0xc1, 0x67, 0xc5, 0x09,
0x36, 0x87, 0x9d, 0xfc, 0xe5, 0x1c, 0xe2, 0xe2, 0x5c, 0xff, 0xd6, 0xa0, 0x53, 0xae, 0x89, 0x2d,
0xa2, 0x90, 0x51, 0xf1, 0xbc, 0x13, 0xb9, 0x54, 0xe6, 0xae, 0x62, 0x79, 0x46, 0xe3, 0xbc, 0x31,
0x5d, 0x36, 0xf6, 0xf9, 0xba, 0xc6, 0xd2, 0x24, 0xb7, 0x74, 0x66, 0x7c, 0xd0, 0xce, 0xf6, 0xc1,
0x7c, 0xeb, 0x05, 0x14, 0x93, 0x70, 0x46, 0x51, 0x0f, 0x9a, 0xa7, 0x71, 0x14, 0x8c, 0x17, 0x91,
0x33, 0x3f, 0x98, 0x28, 0xed, 0x28, 0xba, 0xd0, 0x43, 0x30, 0x79, 0x94, 0x7d, 0xd7, 0xe5, 0xf7,
0xdc, 0x61, 0xbf, 0xd7, 0xc0, 0x14, 0x8b, 0xf3, 0x5d, 0x42, 0x63, 0xb9, 0x26, 0x31, 0x3d, 0x55,
0x1a, 0x64, 0xe2, 0xd4, 0x10, 0xcb, 0x1d, 0x90, 0x9f, 0x45, 0xd4, 0x71, 0xe4, 0x85, 0x9c, 0xa9,
0x2c, 0x65, 0x27, 0x7a, 0x0c, 0xe0, 0x85, 0x9c, 0xc6, 0x17, 0xc4, 0x3f, 0x98, 0x48, 0x08, 0x0c,
0x5c, 0xf0, 0xa0, 0xaf, 0xc0, 0xe4, 0x59, 0xd9, 0x92, 0x69, 0xcd, 0xe1, 0x66, 0xde, 0xea, 0xb2,
0x23, 0x9c, 0x47, 0x09, 0x3c, 0x85, 0xa0, 0x49, 0x0a, 0xb6, 0xb0, 0x3c, 0xdb, 0xbf, 0xe9, 0xd0,
0x96, 0xc5, 0x8a, 0xa7, 0x3f, 0xe4, 0xaa, 0xbc, 0xca, 0x39, 0x61, 0x48, 0x4e, 0x7c, 0x96, 0x87,
0x5d, 0x2d, 0x60, 0x0d, 0x1f, 0xbe, 0x80, 0xfa, 0x79, 0x42, 0x63, 0x8f, 0x32, 0x25, 0xba, 0x9b,
0x65, 0x99, 0x93, 0x69, 0x70, 0x16, 0xd3, 0x7d, 0x71, 0x2b, 0x55, 0xd6, 0xcb, 0xd8, 0xef, 0x1a,
0x7c, 0x5c, 0xa8, 0x4a, 0x71, 0x7d, 0x0b, 0x6a, 0xa7, 0x31, 0x09, 0x94, 0xe4, 0xb4, 0xb0, 0xb2,
0xd0, 0x18, 0x1a, 0x01, 0xe5, 0x44, 0x08, 0xab, 0x22, 0xfc, 0xd3, 0x95, 0xcd, 0x29, 0xb6, 0x1f,
0xa8, 0xd8, 0xb4, 0xbd, 0xe5, 0xd5, 0xee, 0x4b, 0xb8, 0x57, 0xfa, 0xf4, 0xaf, 0x2a, 0x7e, 0x00,
0xf7, 0x77, 0x22, 0xdf, 0xa7, 0x0e, 0x3f, 0xa0, 0x3c, 0xf6, 0x1c, 0xa6, 0xb0, 0xb4, 0x7f, 0xd5,
0x60, 0xeb, 0xea, 0x17, 0xd5, 0xcf, 0x36, 0xd4, 0x83, 0xd4, 0xa5, 0x06, 0xdd, 0x2f, 0xec, 0xe9,
0xca, 0x2b, 0x83, 0x63, 0x72, 0xe9, 0x47, 0xc4, 0xc5, 0xd9, 0xc5, 0xee, 0x53, 0xa8, 0x2b, 0x9f,
0xa0, 0xec, 0x22, 0x8e, 0x84, 0xdc, 0xd1, 0x24, 0xcd, 0xd8, 0xc2, 0x05, 0x8f, 0x3d, 0x02, 0xb4,
0x33, 0xa7, 0xce, 0xd9, 0x2e, 0x25, 0x3e, 0x9f, 0xff, 0x47, 0xb2, 0xd9, 0x7f, 0x68, 0xb0, 0x59,
0x4a, 0xb3, 0x6c, 0xa6, 0xc6, 0x38, 0xe1, 0xea, 0xe5, 0x8d, 0x92, 0x98, 0x5e, 0x0f, 0x1f, 0xa4,
0xe6, 0x44, 0xde, 0xc0, 0xea, 0x26, 0xb2, 0x04, 0x20, 0x8c, 0x91, 0x59, 0x06, 0x70, 0x66, 0x0a,
0x61, 0x90, 0x3f, 0x06, 0x28, 0x27, 0x9e, 0xcf, 0x94, 0x24, 0x15, 0x5d, 0xf6, 0x40, 0xd2, 0x6d,
0x99, 0x13, 0x35, 0xa1, 0x7e, 0x72, 0xb8, 0x7f, 0x78, 0xf4, 0xfd, 0x61, 0xfb, 0x23, 0x54, 0x03,
0xfd, 0x68, 0xbf, 0xad, 0x21, 0x13, 0xaa, 0x63, 0x8c, 0x8f, 0x70, 0x5b, 0x1f, 0xfe, 0x00, 0x8d,
0x4c, 0x07, 0xd1, 0x11, 0xb4, 0x8a, 0xba, 0x88, 0x1e, 0xdd, 0xf8, 0x87, 0xa0, 0xfb, 0xf8, 0x66,
0x39, 0xfd, 0x52, 0x1b, 0xbe, 0x81, 0x8a, 0xfc, 0x21, 0x31, 0x02, 0x73, 0xc9, 0x3f, 0xd4, 0x5d,
0xbf, 0x71, 0xdd, 0x4f, 0x6e, 0x20, 0xec, 0xf0, 0xbd, 0x06, 0xcd, 0x91, 0x47, 0x66, 0x61, 0xc4,
0xb8, 0xe7, 0x30, 0xb4, 0x07, 0xcd, 0x02, 0xa4, 0xe8, 0xe1, 0x1a, 0xa4, 0xd3, 0xcc, 0x8f, 0x6e,
0x9c, 0x03, 0x9a, 0xc0, 0x46, 0x99, 0x6a, 0xe8, 0xd3, 0xf5, 0x24, 0x4c, 0x33, 0xf6, 0x6e, 0x63,
0xe9, 0xf0, 0x04, 0xcc, 0xb7, 0x31, 0x09, 0xd9, 0x69, 0x14, 0x07, 0x68, 0x17, 0xee, 0x2d, 0x8d,
0xff, 0x87, 0xc3, 0x8f, 0x70, 0xbf, 0x94, 0x49, 0x80, 0xbf, 0x4d, 0x9c, 0xb3, 0xbb, 0x81, 0x79,
0xbb, 0xf5, 0x0e, 0x06, 0x2f, 0xb3, 0xef, 0xd3, 0x9a, 0xfc, 0x87, 0xe5, 0xf9, 0x3f, 0x01, 0x00,
0x00, 0xff, 0xff, 0xfc, 0xf3, 0x6d, 0x5e, 0xc1, 0x0c, 0x00, 0x00,
// 1144 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0xc6,
0x13, 0xff, 0x53, 0x9f, 0xe6, 0x48, 0x31, 0xf4, 0x5f, 0x2b, 0x8e, 0xa0, 0x26, 0xa9, 0x40, 0x04,
0xa8, 0x9a, 0xb6, 0x44, 0xab, 0x1c, 0x5a, 0xa4, 0xa7, 0xd8, 0x72, 0xe1, 0xd8, 0xf1, 0x47, 0x57,
0x36, 0x5a, 0xa4, 0xe8, 0x61, 0x45, 0xae, 0x25, 0xd6, 0x14, 0x57, 0xde, 0x5d, 0x1a, 0xf5, 0x03,
0x14, 0x7d, 0x81, 0x3e, 0x47, 0x2e, 0x7d, 0x86, 0x9e, 0x7a, 0xec, 0xa1, 0xaf, 0x53, 0xec, 0x72,
0x29, 0x92, 0xb6, 0x64, 0x03, 0xad, 0x73, 0x9b, 0x99, 0x9d, 0x9d, 0x9d, 0xf9, 0xcd, 0x6f, 0x86,
0x12, 0x3c, 0x18, 0x13, 0xef, 0x9c, 0x46, 0xbe, 0x3b, 0xe7, 0x4c, 0x32, 0xb4, 0x36, 0x0f, 0xe3,
0x49, 0x10, 0x5d, 0x0e, 0x9c, 0x3f, 0xcb, 0xd0, 0x1a, 0x12, 0x49, 0x46, 0x2c, 0xe6, 0x1e, 0xdd,
0x66, 0xd1, 0x59, 0x30, 0x41, 0xeb, 0x50, 0x0a, 0xfc, 0x8e, 0xd5, 0xb3, 0xfa, 0x65, 0x5c, 0x0a,
0x7c, 0x84, 0xa0, 0x12, 0x91, 0x19, 0xed, 0x94, 0x7a, 0x56, 0xdf, 0xc6, 0x5a, 0x46, 0x2d, 0x28,
0xc7, 0x3c, 0xec, 0x94, 0xb5, 0x49, 0x89, 0xca, 0x2b, 0x16, 0x94, 0x77, 0x2a, 0x89, 0x97, 0x92,
0x51, 0x17, 0xd6, 0x7c, 0x22, 0xc9, 0x98, 0x08, 0xda, 0xa9, 0x6a, 0xfb, 0x42, 0x47, 0xcf, 0xa1,
0x35, 0x26, 0x22, 0xf0, 0x5e, 0xc5, 0x72, 0xba, 0x13, 0x91, 0x71, 0x48, 0xfd, 0x4e, 0xad, 0x67,
0xf5, 0xd7, 0xf0, 0x0d, 0x3b, 0x7a, 0xa6, 0x2a, 0x30, 0xb6, 0x53, 0xf5, 0x48, 0x5d, 0x07, 0x2b,
0x1a, 0xd5, 0x6b, 0x3f, 0x09, 0x16, 0xa9, 0x7a, 0x3a, 0x6b, 0x3d, 0xab, 0xdf, 0xc4, 0x0b, 0x1d,
0x5d, 0xc0, 0x23, 0x9f, 0x7a, 0xfc, 0x6a, 0x2e, 0xa9, 0x3f, 0xa2, 0x5e, 0xcc, 0xe9, 0x5e, 0xea,
0x6a, 0xf7, 0xca, 0xfd, 0xc6, 0xe0, 0x4b, 0x37, 0x05, 0xc5, 0xbd, 0x0e, 0x88, 0x3b, 0x5c, 0x7e,
0x73, 0x27, 0x92, 0xfc, 0x0a, 0xaf, 0x8a, 0xab, 0x92, 0x0e, 0x89, 0x90, 0xa7, 0x73, 0x9f, 0x48,
0xea, 0x1f, 0x8c, 0x3a, 0xa0, 0x11, 0x2d, 0x1a, 0xbb, 0x7b, 0xf0, 0xf8, 0xb6, 0xf0, 0x0a, 0xe8,
0x73, 0x7a, 0xa5, 0xbb, 0x61, 0x63, 0x25, 0xa2, 0x36, 0x54, 0x2f, 0x49, 0x18, 0xa7, 0xfd, 0x48,
0x94, 0x97, 0xa5, 0xaf, 0x2c, 0xe7, 0x97, 0x32, 0x34, 0x8f, 0x75, 0x15, 0xa6, 0x93, 0x6d, 0xa8,
0x32, 0x3e, 0x79, 0x9d, 0x36, 0x33, 0x51, 0x14, 0x4e, 0x49, 0xad, 0xaf, 0x7d, 0x13, 0x63, 0xa1,
0x17, 0x30, 0x2c, 0x5f, 0xc3, 0x70, 0xb6, 0x1a, 0xc3, 0x8a, 0xc6, 0xf0, 0x45, 0x86, 0x61, 0x3e,
0x8d, 0xfb, 0xc2, 0xaf, 0xba, 0x04, 0x3f, 0xf4, 0x0d, 0xb4, 0x14, 0xa5, 0x44, 0xae, 0x5f, 0x9a,
0x46, 0x8d, 0x41, 0x77, 0x75, 0x47, 0xf1, 0x8d, 0x3b, 0xf7, 0xda, 0x87, 0xb7, 0x50, 0xd1, 0x84,
0x6c, 0x43, 0x35, 0x64, 0x93, 0x20, 0x32, 0xb7, 0x12, 0x65, 0xe9, 0x38, 0xb5, 0xa1, 0x4a, 0x67,
0x24, 0x48, 0x07, 0x2a, 0x51, 0x94, 0x27, 0x67, 0x21, 0x4d, 0x47, 0x4a, 0xc9, 0xce, 0x33, 0x80,
0x91, 0xe4, 0x41, 0x34, 0x79, 0x13, 0x08, 0x89, 0x36, 0xa1, 0xa6, 0x9f, 0x15, 0x1d, 0xab, 0x57,
0xee, 0xdb, 0xd8, 0x68, 0xce, 0x5f, 0x25, 0xd8, 0xd8, 0x26, 0x61, 0x88, 0x69, 0x52, 0x24, 0xa6,
0x17, 0x31, 0x15, 0x12, 0xb9, 0x50, 0xf3, 0x12, 0x8c, 0x2c, 0x8d, 0xd1, 0xe6, 0xf2, 0x8e, 0x61,
0xe3, 0x85, 0x1c, 0x33, 0xd4, 0x25, 0xed, 0xbd, 0x9e, 0x79, 0xab, 0xfa, 0xcc, 0x90, 0x23, 0xa8,
0xcc, 0x89, 0x9c, 0x9a, 0xd4, 0xb5, 0xac, 0xf2, 0x9a, 0x51, 0x39, 0x65, 0xbe, 0xc9, 0xdd, 0x68,
0xe9, 0xda, 0xa8, 0x66, 0x6b, 0x63, 0x08, 0xf5, 0x29, 0x25, 0x3e, 0xe5, 0xa2, 0x53, 0xd3, 0x24,
0x7a, 0x9e, 0x3d, 0xb2, 0xa4, 0x02, 0x77, 0x37, 0x71, 0x4e, 0xb8, 0x93, 0x5e, 0x55, 0x39, 0x8c,
0x99, 0x7f, 0xa5, 0xf7, 0x42, 0x13, 0x6b, 0xb9, 0x7b, 0x0c, 0xcd, 0xbc, 0xf3, 0x92, 0x0e, 0x3e,
0xcf, 0x77, 0xb0, 0x31, 0x68, 0x67, 0x2f, 0x67, 0x10, 0xe7, 0xfb, 0xfa, 0xb7, 0x05, 0xed, 0x62,
0x4e, 0x62, 0xce, 0x22, 0x41, 0xd5, 0xf3, 0x1e, 0xf3, 0xa9, 0x8e, 0x5d, 0xc5, 0x5a, 0x46, 0x3b,
0x59, 0x61, 0x25, 0x5d, 0xd8, 0x27, 0xab, 0x0a, 0x4b, 0x82, 0xdc, 0x51, 0x59, 0xf9, 0xbd, 0x56,
0xb6, 0x0f, 0xf6, 0x49, 0x30, 0xa3, 0x98, 0x44, 0x13, 0x8a, 0x7a, 0xd0, 0x38, 0xe3, 0x6c, 0xb6,
0x33, 0x67, 0xde, 0xf4, 0x60, 0x64, 0x76, 0x47, 0xde, 0x84, 0x1e, 0x83, 0x2d, 0x59, 0x7a, 0x5e,
0xd2, 0xe7, 0x99, 0xc1, 0x79, 0x67, 0x81, 0xad, 0x06, 0xe7, 0xdb, 0x98, 0x72, 0x3d, 0x26, 0x9c,
0x9e, 0x99, 0x1d, 0x64, 0xe3, 0x44, 0x51, 0xc3, 0x3d, 0x23, 0x3f, 0x2b, 0xaf, 0x63, 0x16, 0x44,
0x52, 0x98, 0x28, 0x45, 0x23, 0x7a, 0x0a, 0x10, 0x44, 0x92, 0xf2, 0x4b, 0x12, 0x1e, 0x8c, 0x34,
0x04, 0x65, 0x9c, 0xb3, 0xa0, 0x2f, 0xc0, 0x96, 0x69, 0xda, 0x9a, 0x69, 0x8d, 0xc1, 0x46, 0x56,
0xea, 0xa2, 0x22, 0x9c, 0x79, 0x29, 0x3c, 0xd5, 0x42, 0xd3, 0x14, 0x6c, 0x62, 0x2d, 0x3b, 0xbf,
0x95, 0xa0, 0xa5, 0x93, 0x55, 0x4f, 0xbf, 0xcf, 0x51, 0x79, 0x95, 0x71, 0xa2, 0xac, 0x39, 0xf1,
0x51, 0xe6, 0x76, 0x3d, 0x81, 0x15, 0x7c, 0xf8, 0x0c, 0xea, 0x17, 0x31, 0xe5, 0x01, 0x15, 0x66,
0xe9, 0x6e, 0x14, 0xd7, 0x9c, 0x0e, 0x83, 0x53, 0x9f, 0xee, 0xcb, 0x3b, 0xa9, 0xb2, 0x7a, 0x8d,
0xfd, 0x6e, 0xc1, 0xff, 0x73, 0x59, 0x19, 0xae, 0xef, 0x82, 0xcd, 0x8d, 0x9c, 0x6c, 0x9d, 0xc2,
0xc8, 0xde, 0xf0, 0x77, 0x53, 0xc1, 0x14, 0x92, 0x5d, 0xee, 0x9e, 0xc0, 0x7a, 0xf1, 0x70, 0x49,
0x76, 0x9f, 0x16, 0x89, 0xbc, 0x59, 0x2c, 0x36, 0xbd, 0x9e, 0xcf, 0xfa, 0x7b, 0x68, 0x16, 0xf2,
0xdd, 0x84, 0xda, 0x19, 0x27, 0x33, 0x93, 0x6c, 0x13, 0x1b, 0x4d, 0xaf, 0x5c, 0xce, 0x19, 0x4f,
0xeb, 0xd6, 0x4a, 0xfa, 0xfd, 0x3b, 0xa0, 0xc5, 0xef, 0x9f, 0xd2, 0x9d, 0x47, 0xf0, 0x70, 0x9b,
0x85, 0x21, 0xf5, 0xe4, 0x01, 0x95, 0x3c, 0xf0, 0x84, 0xe9, 0x94, 0xf3, 0xab, 0x05, 0x9b, 0xd7,
0x4f, 0xcc, 0xeb, 0x5b, 0x50, 0x9f, 0x25, 0x26, 0x43, 0xa3, 0x7e, 0x6e, 0x0b, 0x2c, 0xbd, 0xe2,
0x1e, 0x93, 0xab, 0x90, 0x11, 0x1f, 0xa7, 0x17, 0xbb, 0x1f, 0x43, 0xdd, 0xd8, 0xd4, 0x40, 0xcc,
0x39, 0x53, 0xcb, 0x94, 0xc6, 0x49, 0xc4, 0x26, 0xce, 0x59, 0x9c, 0x21, 0xa0, 0xed, 0x29, 0xf5,
0xce, 0x77, 0x29, 0x09, 0xe5, 0xf4, 0x5f, 0x52, 0xd9, 0xf9, 0xc3, 0x82, 0x8d, 0x42, 0x98, 0x45,
0x31, 0x35, 0x21, 0x89, 0x34, 0x2f, 0xaf, 0x17, 0x56, 0xf5, 0x4d, 0x77, 0x37, 0x51, 0x47, 0xfa,
0x06, 0x36, 0x37, 0x51, 0x47, 0x01, 0x22, 0x04, 0x99, 0xa4, 0x84, 0x4b, 0x55, 0xb5, 0x76, 0xf4,
0x4f, 0x0d, 0x2a, 0x49, 0x10, 0x0a, 0x83, 0x7e, 0xde, 0xe4, 0xb8, 0x9a, 0xcc, 0x8b, 0x98, 0xa8,
0x01, 0xf5, 0xd3, 0xc3, 0xfd, 0xc3, 0xa3, 0xef, 0x0e, 0x5b, 0xff, 0x43, 0x35, 0x28, 0x1d, 0xed,
0xb7, 0x2c, 0x64, 0x43, 0x75, 0x07, 0xe3, 0x23, 0xdc, 0x2a, 0x0d, 0x7e, 0x80, 0xb5, 0x74, 0xcb,
0xa2, 0x23, 0x68, 0xe6, 0xb7, 0x2e, 0x7a, 0x72, 0xeb, 0x67, 0xa6, 0xfb, 0xf4, 0xf6, 0x65, 0xfd,
0xb9, 0x35, 0x78, 0x03, 0x15, 0xfd, 0x33, 0x65, 0x08, 0xf6, 0x82, 0xf4, 0xa8, 0xbb, 0x7a, 0x9e,
0xbb, 0x1f, 0xdc, 0x32, 0x25, 0x83, 0x77, 0x16, 0x34, 0x86, 0x01, 0x99, 0x44, 0x4c, 0xc8, 0xc0,
0x13, 0x68, 0x0f, 0x1a, 0x39, 0x48, 0xd1, 0xe3, 0x15, 0x48, 0x27, 0x91, 0x9f, 0xdc, 0xda, 0x07,
0x34, 0x82, 0xf5, 0x22, 0xd5, 0xd0, 0x87, 0xab, 0x49, 0x98, 0x44, 0xec, 0xdd, 0xc5, 0xd2, 0xc1,
0x29, 0xd8, 0x27, 0x9c, 0x44, 0xe2, 0x8c, 0xf1, 0x19, 0xda, 0x85, 0x07, 0x0b, 0xe5, 0xbf, 0xe1,
0xf0, 0x23, 0x3c, 0x2c, 0x44, 0x52, 0xe0, 0x6f, 0x11, 0xef, 0xfc, 0x7e, 0x60, 0xde, 0x6a, 0xbe,
0x05, 0xf7, 0xeb, 0xf4, 0x7c, 0x5c, 0xd3, 0x7f, 0x87, 0x5e, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff,
0x4e, 0x49, 0x76, 0x89, 0x1f, 0x0d, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.